4、制作Docerfile:nginx+uwsgi+django+python

dafu 2879

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

 

这张图非常清晰地说明了宿主机、Docker 、Containers、Images 、Dockerfile以及Docker hub之间的关系。看懂了这张图,就说明我们对Docker了解的比较清楚了。

具体Dockerfile指令说明 ,请参考 https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html

 

# -----------------Dockerfile START-------------------

# Python 3.8.3

# Django 3.0.7

# Nginx 1.18.0

# uWSGI

# 2020.06.18 

FROM centos:7

MAINTAINER dafufoto.com

# 安装应用运行所需要的工具依赖

RUN yum -y install wget

RUN yum -y groupinstall "Development tools"

RUN yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

RUN yum install -y libffi-devel zlib1g-dev

RUN yum install zlib* -y

RUN wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz && \

# 安装最新版本的python

tar -xvJf  Python-3.8.3.tar.xz && \

mkdir /usr/local/python3 && \

cd Python-3.8.3 && \

./configure prefix=/usr/local/python3 && \

make && make install && \

cd .. && rm -rf /Python-3.8.3* && \

rm -rf /usr/bin/python && \

ln -s /usr/local/python3/bin/python3 /usr/bin/python && \

# 建立python3跟pip3的软链接

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

RUN set -ex \                                                     

    && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/bin/yum \

# yum需要python2的环境

    && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/libexec/urlgrabber-ext-down \

    && yum install -y deltarpm \

    && pip install --upgrade pip

 

RUN cd /usr/local && \

    wget http://repo.mysql.com/mysql80-community-release-sles12.rpm && \

# 下载安装mysql配置源,注意这个镜像

    rpm -ivh mysql80-community-release-sles12.rpm && \

# 并没有安装mysql,下载它的配置源是为了后面安装mysql-devel,我们要将Mysql安装在另外一个Docker内

    yum -y install mysql-devel

 

RUN pip install Django==3.0.7 && \

#安装最新版本的django以及相关的依赖

    pip install setuptools && \

    pip install supervisor && \

    pip install uwsgi && \

    ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi && \

    pip install mysqlclient

# 安装mysqlclient的前提是安装mysql-devel

RUN mkdir usr/project && \

# 新建一个目录,下面会创建一个django的测试项目

    cd /usr/project && \

    ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin && \

    ../local/python3/bin/django-admin.py startproject testproject && \

    cd testproject && touch uwsgi.ini

      

RUN wget http://nginx.org/download/nginx-1.18.0.tar.gz && \

# 安装最新稳定版本的nginx

tar zxf nginx-1.18.0.tar.gz && \

cd nginx-1.18.0 && \

./configure --prefix=/usr/local/nginx \

--with-http_ssl_module \

--with-http_stub_status_module && \

make -j 4 && make install && \

cd / && rm -rf nginx-1.18.0* && \

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 做时区的重定向软链

   

ENV PATH $PATH:/usr/local/nginx/sbin

# 做一个环境变量,方便在里面直接使用nginx命令

WORKDIR /usr/local/nginx

# 设置工作目录

EXPOSE 80

# 声明80端口

CMD ["nginx","-g","daemon off;"]

# 新建容器就开启nginx

# -----------------Dockerfile END-------------------

 

[root@VM-0-16-centos ~]# vi /usr/local/src/Dockerfile

 

利用如下指令,根据Dockerfile 创建 镜像:

 docker build -t <image_name> -f  <Dockerfile_name>  .

后面有一个点,千万不能落下,否则提示命令错误。

 

[root@VM-0-16-centos /]#docker build -t dafu_image -f /usr/local/src/Dockerfile .

建议利用早上五六点的时间来运行,安装包的拉取用户少,速度快,如果网速过慢,中间有可能出出错,然后中断。

 

这样就创建了一个名为dafu_image的镜像文件,我们可以用docker images来看一下是不是已经存在了。

[root@VM-0-16-centos /]# docker images    查看宿主机上的所有的镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

dafu_image          latest              ab058e327d23        37 hours ago        1.44 GB

 

镜像制作好了没啥意义,得让她跑起来为我们工作。

[root@VM-0-16-centos ~]# docker run -d --name dafu_container -p 80:80 dafu_image

这条命令是将dafu_image的镜像run起来,镜像run起来就是container,这里我们为自己的容器取名为dafu_container

并将容器的80端口映射到宿主主机的80端口上,这样我们就可以在任何地方访问我们的网站了。

到这里如果一切顺利,我们应该可以通过web browser可以访问到我们的网站了,但由于还没有内容,看到的应该是nginx的初始页面。

 一切OK!!!

 下一步,就是将我们开发的网站部署到该容器里了。

 

 

 

最后修改于:3年前