Dockerfile主要用在Docker中,构建镜像。
Dockerfile是由一行一行指令组成的,支持以#开头的行为注释的行。
一般而言,Dockerfile主体内容分为两个部分:基础镜像信息(必须)、其他指令。
在构建镜像之前,必须基于Docker一个基础环境(基础镜像)。
FROM
FROM指令必须是Dockerfile中的第一个指令,而且FROM指令有且只有一个,主要用来指定一个构建镜像的基础环境。
[root@kubernetes linux]# vim Dockerfile[root@kubernetes linux]# cat DockerfileFROM python:3.6
MAINTAINER
指定维护者信息。没有实际作用,主要是用来指定构建该镜像的作者信息。
[root@kubernetes linux]# cat Dockerfile
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN
构建镜像时执行命令。
[root@kubernetes linux]# cat Dockerfile
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 构建镜像
[root@kubernetes linux]# docker build -t django:v1 .
CMD
设置Docker镜像启动时默认执行的命令。
[root@kubernetes linux]# cat Dockerfile
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
CMD python manage.py runserver 0.0.0.0:8080
ENTRYPOINT
设置Docker镜像启动命令,如果设置了ENTRYPOINT,则CMD将会变成它的参数。
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
ADD ./ /opt/
VOLUME /tmp
WORKDIR /opt
EXPOSE 8080
ENTRYPOINT ["python"]
CMD ["manage.py", "runserver", "0.0.0.0:8080"]
WORKDIR
指定Docker容器的工作目录。也就是说docker容器启动时,默认执行命令的目录。
[root@kubernetes linux]# cat Dockerfile
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
WORKDIR /opt
CMD python manage.py runserver 0.0.0.0:8080
[root@kubernetes linux]# docker run -d -v /root/django/linux/:/opt -p 8081:8080 django:v3
EXPOST
expost是Dockerfile中指定默认端口号。
[root@kubernetes linux]# cat Dockerfile
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
WORKDIR /opt
EXPOSE 8080 8081 8082 8083/udp
CMD python manage.py runserver 0.0.0.0:8080
ADD
将宿主主机中的内容或者互联网下载的内容放置于镜像中。支持自动解压(注意:ADD只支持解压tar类型的压缩包)。
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
ADD ./ /opt/
ADD http://106.13.81.75/Navicat15.exe /tmp/
WORKDIR /opt
EXPOSE 8080 8081 8082 8083/udp
CMD python manage.py runserver 0.0.0.0:8080
COPY
将宿主主机中的内容复制到镜像中。不支持互联网下载,也不支持自动解压。
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
COPY etcd-v3.4.14-linux-amd64.tar.gz /tmp/
WORKDIR /opt
EXPOSE 8080
CMD python manage.py runserver 0.0.0.0:8080
VOLUME
指定容器需要挂载的目录(注意:如果我们启动容器时,使用了-v参数则直接挂载,如果没有使用,则会指定一个默认的挂载)
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
ADD ./ /opt/
VOLUME /tmp
WORKDIR /opt
EXPOSE 8080
CMD python manage.py runserver 0.0.0.0:8080
ENV
指定该镜像启动容器中的环境变量。
FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
ADD ./ /opt/
VOLUME /tmp
ENV DJANGO_VERSION=123456
WORKDIR /opt
EXPOSE 8080
ENTRYPOINT ["python"]
CMD ["manage.py", "runserver", "0.0.0.0:8080"]
ARG
设置构建镜像临时参数。
[root@kubernetes django]# cat Dockerfile
FROM python:3.6
ARG package=django
RUN pip install $package
[root@kubernetes django]# docker build --build-arg=package=pymysql -t django:v17 .
ONBUILD
Docker构建触发器。主要是当该镜像作为基础镜像时触发。
[root@kubernetes django]# cat Dockerfile
FROM django:v19
ARG package=django
RUN pip install $package
ONBUILD RUN rm -rf /opt
案例:使用Nginx代理Django
1、Django
- Dockerfile ```dockerfile FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN mkdir /opt/linux
ADD ./linux /opt/linux/
EXPOSE 8000
WORKDIR /opt/linux
CMD [“uwsgi”, “—ini”, “myweb.ini”] FROM python:3.6
MAINTAINER shanhe shanhe@123.com xxxxxxx
RUN pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install django==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
ADD ./linux/ /opt/
EXPOSE 8080
WORKDIR /opt
CMD [“uwsgi”, “—ini”, “myweb.ini”]
- myweb.ini
```properties
[uwsgi]
# 端口号
socket = :8000
# 指定项目的目录
chdir = /opt/linux
# wsgi文件路径
wsgi-file = linux/wsgi.py
# 模块wsgi路径
module = linux.wsgi
# 是否开启master进程
master = true
# 工作进程的最大数目
processes = 4
# 结束后是否清理文件
vacuum = true
构建镜像
docker build -t django:v20 .启动镜像
docker run -d --name django django:v202、Nginx
配置文件 ```nginx server { listen 80; server_name py.test.com; location / { include uwsgi_params; uwsgi_pass django:8000; uwsgi_read_timeout 2; uwsgi_param UWSGI_SCRIPT linux.wsgi; uwsgi_param UWSGI_CHDIR /opt/linux; index index.html index.htm; client_max_body_size 35m; } }
- Dockerfile
```dockerfile
FROM nginx
ADD default.conf /etc/nginx/conf.d/
EXPOSE 80 443
CMD nginx -g 'daemon off;'

