1、安装docker
# Step 1: 移除之前docker版本并更新更新 apt 包索引
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
# Step 2: 安装 apt 依赖包,用于通过HTTPS来获取仓库
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Step 3: 添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 4: 设置docker稳定版仓库,这里使用了阿里云仓库
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
# Step 5: 安装免费的docker Community版本docker-ce
sudo apt-get -y install docker-ce
# sudo apt-get install -y docker-ce=<VERSION> #该命令可以选择docker-ce版本
# Step 6: 查看docker版本及运行状态
sudo docker -v
sudo systemctl status docker
# Step 7:本步非必需。使用阿里云设置Docker镜像加速,注意下面链接请使用阿里云给自己的URL
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{ "registry-mirrors": ["https://ua3456xxx.mirror.aliyuncs.com"] }
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
https://help.aliyun.com/document_detail/60750.html
2、docker-compose的安装过程
# Step 1: 以ubuntu为例,下载docker-compose
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# Step 2: 给予docker-compose可执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
# Step 3: 查看docker-compose版本
$ docker-compose --version
3、docker命令
查本地已有镜像
docker images
查看本地已有的容器:
docker ps -a
基础命令
docker rmi [images ID] # 删除此 ID 的镜像
docker container stop [container ID] # 停止此 ID 的容器
docker container start [container ID] # 启动此 ID 的容器
docker container rm [container ID] # 删除此 ID 的容器
删除所有镜像
docker rmi $(docker images -q)
杀死所有正在运行的容器
docker kill $(docker ps -a -q)
删除所有已经停止的容器
docker rm $(docker ps -a -q)
4、部署需要的文件
前提:有一个要部署的项目,文件名为MyBlog
更新系统
sudo apt-get update
sudo apt-get upgrade
下载git
sudo apt-get install git
创建文件 MyBlog/docker-compose.yml
version: "3"
services:
app:
restart: always
build: .
command: bash -c "python3 manage.py collectstatic --no-input && python3 manage.py migrate && gunicorn --timeout=30 --workers=4 --bind :8000 django_app.wsgi:application"
volumes:
- .:/code
- static-volume:/code/collected_static
expose:
- "8000"
depends_on:
- db
networks:
- web_network
- db_network
db:
image: mysql:5.7
volumes:
- "./mysql:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=mypassword
- MYSQL_DATABASE=django_app
networks:
- db_network
nginx:
restart: always
image: nginx:latest
ports:
- "80:8000"
volumes:
- static-volume:/code/collected_static
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- app
networks:
- web_network
networks:
web_network:
driver: bridge
db_network:
driver: bridge
volumes:
static-volume:
创建文件 MyBlog/config/nginx/django_app.conf
upstream app {
ip_hash;
server app:8000;
}
server {
listen 8000;
server_name localhost;
location /static/ {
autoindex on;
alias /code/collected_static/;
}
location / {
proxy_pass http://app/;
}
}
创建文件 MyBlog/Dockerfile
FROM python:3.7
ENV PYTHONUNBUFFERED 1
# 添加这两行
RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev -y
RUN mkdir /code
WORKDIR /code
RUN pip install pip -U
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
requirements.txt增加
...
mysqlclient==2.0.1
gunicorn==19.9.0
修改django_app/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_app',
'USER': 'root',
'PASSWORD': 'mypassword',
'HOST': 'db',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'},
}
}
最后在MyBlog文件夹里面执行命令:
docker-compose build
docker-compose up
5、报错解决
在执行docker-compose up后会有这个报错,网上搜索了一番,说是数据库编码的问题
解决方法:
熟悉命令:
docker ps #查询docker容器服务
docker exec -it mysql bash #进入MySQL服务
mysql -uroot -p #登陆mysql
set password for 'root' = password('密码') #修改mysql密码
set password for 'root'@'localhost' = password('密码') #修改本地密码
进入mysql容器后进入mysql,执行命令show databases;查看数据库,删除执行docker-compose up时创建的数据库,然后执行命令:
CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
创建编码为utf-8的数据库
quit退出mysql,exit退出mysql容器
删除掉所有的镜像和容器,并执行命令
docker-compose build
docker-compose up
学习链接:
https://www.dusaiphoto.com/article/75/
https://mp.weixin.qq.com/mp/appmsgalbum
心得:看着很复杂,其实一步一步跟着做很快就好了,刚开始不太懂这些,这么一点部署弄了3天,用了阿里云的服务器部署,一直部署不好换了好多次操作系统重新弄,但这个过程还是学到了很多啦!熟悉后半个钟就能搞定了,用docker果然比自己配置各种文件去部署容易得多!
非docker的部署可以看另外一篇文章:
https://blog.csdn.net/lzzlcy/article/details/118727106?spm=1001.2014.3001.5502