什么是 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年前