RUN pip install -r /config/requirements.txt
RUN mkdir /src
WORKDIR /src/mysite
我简单解释一下这个文件
FROM python:3.6.8
这里我使用的基础镜像是python:3.6.8,它的基础镜像是Ubuntu我比较熟悉,如果你对alpine比较熟悉的话也可以使用alpine,那个镜像要小的多。
ENV PYTHONUNBUFFERED 1
你可以使用 Env 关键字创建任意的操作系统的环境变量
ENV PYTHONUNBUFFERED 1
例如,如果你使用它来存储你的 Django 密钥,你可以这样写:
ENV DJANGO_SECRET_KEY l!fafmjcqyn+j+zz1@2@wt$o8w8k(_dhgub%41l#k3zi2m-b%m
在你的代码里这样使用:
import os
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']RUN顾名思义,RUN就是在容器里面运行命令,这里RUN命令创建了两个文件夹/config和/src,以及安装Python的依赖环境。
RUN mkdir /config
RUN mkdir /src
RUN pip install -r /config/requirements.txtADD
ADD /mysite/requirements.txt /config/增加本地的文件到容器中 WORKDIR
WORKDIR /src/mysite是指定后面所有在容器里运行命令的默认路径,要运行的命令在稍后的docker-compose文件这种可以看到。
新建docker-compose脚本
docker-compose可以用来管理多个容器,以前手动加海量参数运行容器并连接容器的活都可以让docker-compose来做了。我的docker-compose.yml内容大致如下:
$ cat docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
container_name: mysite_db
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mysite
MYSQL_DATABASE: mysite
LANG: C.UTF-8
web:
build: .
container_name: mysite_web
command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./mysite:/src
restart: always
ports:
- "8002:8000"再简单解释一下这个docker-compose文件吧。
version: '3'指的是docker-compose的版本,不同版本支持的配置项目稍有不同。 services 管理的服务,我们的例子中是两个服务:db和web。两个服务中的配置项目我分开解释一下 db:
image 直接使用docker hub或者本地的已有镜像,这个使用的是MySQL5.7 container_name 指定容器的名称 ports 指定容器对宿主机的端口映射,前面的是宿主机端口,后面的是容器端口 environment 指定当前服务运行时候的环境,环境的细节参考当前镜像的说明,那上面说支持哪些,我们就可以配置哪些。这个案例中我们指定了MySQL的root密码、默认数据库和数据库的字符集。 web: build 编译镜像,这里是使用当前文件夹下的Dockerfile command 容器启动后执行的命令 depends_on 当前容器要依赖的服务,也就是说必须依赖中的服务成功启动当前服务才能启动 volumes 当前容器要挂载的卷,前面指的是宿主机的目录,后面是容器目录 restart 指定容器的重启策略,当前案例是如果出错就一直重启。 这里把容器的8000端口映射到宿主机的8002端口,web服务就是从8002端口访问。










