Dockerfile创建python+django+uwsgi+nginx相关的镜像
在工作中刚好遇到需要做CI/CD的情况,需要把当前的web系统构建成docker镜像。经过一些折腾完成了,于是分享一下Dockerfile。
需要的环境是python3, django, uwsgi, nginx。目前没有能直接满足的镜像,于是自己写了一份Dockerfile来构建。构建的步骤是拉取ubuntu,安装python3.6和nginx,再安装python依赖包,将nginx的配置文件拷进nginx目录,并在docker run时直接启动web服务。
最后的部分是暴露出80端口,因为只能执行一个CMD,但我是需要先启动uwsgi再启动nginx,就不能按照常用的来
CMD ["nginx", "-g", "daemon off;"]
这样虽然能启动nginx并保证docker run不退出,但是还差了uwsgi的启动。于是需要把两个命令写在一起,这样也只有一个CMD,也能同时启动多个进程
CMD ["sh", "-c", "uwsgi -i /mysite/config/uwsgi.ini && nginx -g 'daemon off;'"]
文件内容如下
FROM ubuntu:18.04
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y vim && \
apt-get install -y \
python3 \
python3-dev \
python3-setuptools \
python3-pip \
nginx && \
rm -rf /var/lib/apt/lists/*
WORKDIR /mysite
COPY ./ ./
RUN pip3 install -r requirement.txt
RUN cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf-default
COPY ./config/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["sh", "-c", "uwsgi -i /mysite/config/uwsgi.ini && nginx -g 'daemon off;'"]
build完成后就可以运行并查看效果了。
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# <none> <none> bf21da761d8f 8 seconds ago 605MB
docker run -p 80:80 bf21da761d8f
# [uWSGI] getting INI configuration from /mysite/config/uwsgi.ini
此时打开localhost就能看到对应的页面了。
也可以运行'docker exec -it cbead25a54f7 /bin/bash'进入container去查看和修改。
------------------------------------
上面的是用的ubuntu,也可以用centos+python36的镜像。
FROM centos/python-36-centos7
USER root
RUN yum -y install epel-release && \
yum -y install nginx && \
yum clean all
WORKDIR /mysite
COPY ./ ./
RUN pip install --upgrade pip
RUN pip install -r requirement.txt
RUN cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf-default
COPY ./config/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["sh", "-c", "uwsgi -i /mysite/config/uwsgi.ini && nginx -g 'daemon off;'"]