一、单独使用docker container部署
1.首先我们开始编写dockerfile, 我可以通过dockerfile生成image,在生成container
FROM python:3.6 # 源镜像
ENV DJANGO_DEBUG=True # 设置环境变量, 项目中为了安全一些关键的配置项没有卸载settings中,而是通过环境变量获取的
ENV PYTHONIOENCODING=utf-8
env TZ='Asia/Shanghai' # env和ENV是同一个
run mkdir /logs # 创建logs日志文件夹
WORKDIR /code # 创建项目的文件夹
ADD project /code # 将项目project拷贝到image中code文件夹
RUN pip install -r requirements/deploy.txt # run安装python依赖包
EXPOSE 8000 # 指定开发端口
ENV NAME iam # 设置环境变量
CMD python manage.py runserver 0.0.0.0:8000 # 运行服务
2.在写好dockerfile文件之后,我们就可以构建image了
docker build -t pr1 .
这样我们就构建一个名为pr镜像, 使用docker images就可在镜像列表中查看了
然后我就可以跑个容器了,我将这个container命名为pr
docker run -d -p 0.0.0.0:8007:8000 --name=pr1 pre
我可是看看服务有没有启动, 打开http://localhost:8007/admin/查看后台是否正常
使用docker log 可以查看运行情况
docker log 93ccfe3094e90078606542f6e0e603b14e728a2575a9d4c3072c0769765ac274
同时我们可以使用docker exec 进入容器
同时我们查看了python运行的进程
二、使用docker-compose编排工具
1.我们仍需要Dockerfile, 在Dockerfile所在的新增docker-compose.yml, 内容也挺简单
version: '3'
services:
web:
build: .
ports:
-"5002:8000"
network_mode: "bridge"
然后我们使用
docker-compose build
这里会生成一个以当前文件夹为前缀的image
接下来我们使用
docker-compose up -d
我们看一下启动的容器
在访问以下后台
这里要说一下遇到的坑:
1.一开始并未加入network_mode模式,导致每次build之后会产生一个新的network局域网
而数据库在bridge这个局域网中,导致无法访问数据库
我们先来看一下生成局域网的信息,使用docker network inspect命令
这个所在ip段是“172.22”, 然后我们在看看数据库所在容器的IP段bridge
由于太长我截取了部分,这个局域网说在IP段是“172.17”, 同时也能看出这个containers中包含了我们生成pr_docker_web_1容器
还要说的是bridge是自动生成局域网
我们在文件里写bridge是‘ network_mode: "bridge"’是网络模式, 为容器选择什么样的网络模式,下面是官网的说明