03@Dockerfile构建镜像

1|0Dockerfile构建镜像

Dockerfile是由一行行指令语句构成的一个创建docker镜像的配置文件。Dockerfile是由三个部分组成:基础镜像(必须的)、运行指令、容器默认执行命令。

1|1一、Dockerfile的简述

1》Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含任何动态数据,其内容在构建之后也不会被改变
2》Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦

1)Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行。 2)Dockerfile 主体内容分为四部分:基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令 3)Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM。一个声 明以#字符开头则被视为注释。可以在 Docker 文件中使用RUN,CMD,FROM,EXPOSE,ENV 等指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iq23MHk0-1624552733318)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1624548440180.png)]

1|2二、Dockerfile使用参数(参数编写为大写)

1|01、FROM

指定基础镜像,必须为第一个命令,目的是为了给构建镜像提供一个基础环境

#格式: FROM <image> FROM <image>:<tag> FROM <image>@<digest> #示例: FROM mysql:5.6 FROM mysql:5.7 #注: tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像

1|02、MAINTAINER

指定维护者信息 (一般不常用)

#格式: MAINTAINER <name> #示例: MAINTAINER Jasper Xu MAINTAINER sorex@163.com MAINTAINER Jasper Xu <sorex@163.com>

1|03、RUN

构建镜像时执行的命令,基于FROM指定的docker镜像运行一个指令,将结果反映到新生成的镜像,RUN指令后面执行的命令必须是镜像中已经存在了的命令

#RUN :用于在镜像容器中执行命令,其有以下两种命令执行方式: 1》shell 执行 #格式: RUN <command> 2》exec 执行 #格式: RUN ["executable", "param1", "param2"] #示例: RUN ["executable", "param1", "param2"] RUN apk update RUN ["/etc/execfile", "arg1", "arg1"] #注: RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。 如果不想使用这些缓存镜像,可以在构建时指定--no-cache 参数 如:docker build --no-cache

1|04、CMD

构建容器后调用,也就是在容器启动时才进行调用,指定容器运行的默认命令

#格式: CMD ["executable","param1","param2"] (执行可执行文件,优先) CMD ["param1","param2"] (设置了 ENTRYPOINT,则直接调用 ENTRYPOINT 添加参数) CMD command param1 param2 (执行 shell 内部命令) #示例: CMD echo "This is a test." | wc - CMD ["/usr/bin/wc","--help"] #注: CMD 不同于 RUN,CMD 用于指定在容器启动时所要执行的命令,而 RUN 用于指定镜像构建时所要执行的命令。 nginx前台使用的命令: CMD nginx -g "daemon off;"

1|05、ADD

将本地文件添加到容器中

tar 类型文件会自动解压(网络压缩资源不会被解压)

#格式: ADD <src>... <dest> ADD ["<src>",... "<dest>"] 用于支持包含空格的路径 #示例: ADD hom* /mydir/ #添加所有以"hom"开头的文件 ADD hom?.txt /mydir/ #? 替代一个单字符,例如:"home.txt" ADD test relativeDir/ #添加 "test" 到 `WORKDIR`/relativeDir/ ADD test /absoluteDir/ #添加 "test" 到 /absoluteDir/ #ADD与copy之间的区别: ADD : 将本地文件添加到镜像 ADD支持自动解压,但是仅仅支持解压tar包 ADD支持远程下载,但是不会解压下载内容 COPY : 将文件复制到镜像 copy不支持解压功能功能 copy不支持远程下载功能

1|06、COPY

功能类似 ADD ,但是是不会自动解压文件,也不能访问网络资源(将文件复制到镜像)

#功能描述: 只支持复制文件到镜像中,不支持解压功能 #语法: COPY < src>… < dest> COPY [“< src>”,… “< dest>”] #示列: COPY hzl absoluteDir/ #注: 指令逻辑和 ADD 十分相似,同样 Docker Daemon 会从编译目录寻找文件或目录,dest 为镜像中的绝对路径或者相对于 WORKDIR 的路径

1|07、ENV

设置一个容器的环境变量

#格式: ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置 一个变量 ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行 #示例: ENV myName John Doe ENV myDog Rex The Dog ENV myCat=fluffy

1|08、EXPOSE

指定容器需要向外界暴露的端口,实际上没有暴露,只有指定了EXPOSE才能够使用-P, 可以指定多个端口

指定于外界交互的端口

#格式: EXPOSE <port> [<port>...] #示例: EXPOSE 80 443 EXPOSE 8080 EXPOSE 11211/tcp 11211/udp #注: EXPOSE 并不会让容器的端口访问到主机。要使其可访问,需要在 docker run 运行容器时通过-p 来发布这些端口,或通过-P 参数来发布 EXPOSE 导出的所有端口

1|09、ARG

用于指定传递给构建运行时的变量

指定运行时参数,用于构建docker镜像时传入参数: --build-arg=USER=root

#格式: ARG <name>[=<default value>] #示例: ARG site ARG build_user=www

1|010、VOLUME

用于指定持久化目录,设置需要挂载的目录,没有实现挂载

#格式: VOLUME ["/path/to/dir"] #示例: VOLUME ["/data"] VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"] #注: 一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能: 1)卷可以容器间共享和重用 2)容器并不一定要和其它容器共享卷 3)修改卷后会立即生效 4)对卷的修改不会对镜像产生影响 5)卷会一直存在,直到没有任何容器在使用它

1|011、WORKDIR

工作目录,类似于 cd 命令

设置工作目录:

1)程序运行的开始目录
2)进入容器的最初目录

#格式: WORKDIR /path/to/workdir #示例: WORKDIR /a (这时工作目录为/a) WORKDIR b (这时工作目录为/a/b) WORKDIR c (这时工作目录为/a/b/c) #注:通过 WORKDIR 设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用 docker run 运行容器时,可以通过-w 参数覆盖构建时所设置的工作目录

1|012、ONBUILD

用于设置构建触发器 : 当当前镜像用作基础镜像时触发

ONBUILD 后面跟的是Dockerfile指令不是linux命令

#格式: ONBUILD [INSTRUCTION] #示例: ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src #注:当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发

1|013、LABEL

用于为镜像添加元数据

#格式: LABEL <key>=<value> <key>=<value> <key>=<value> ... #示例: LABEL version="1.0" description="这是一个 Web 服务器" by="IT 笔录" #注:使用 LABEL 指定元数据时,一条 LABEL 指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔,推荐将所有的元数据通过一条 LABEL 指令指定,以免生成过多的中间镜像

1|3三、Dockerfile(案列)

1|0【构建nginx镜像】

1)#创建nginx镜像文件 ----------------------------------------------------------------------------------------------------- [root@hzl nginx]# vim Dockerfile #构建镜像 FROM nginx RUN yum install nginx -y RUN useradd www ADD default.conf /etc/nginx/conf.d/ ADD nginx.conf /etc/nginx EXPOSE 80 443 WORKDIR /root #创建工作目录 CMD nginx -g "daemon off;" #nginx前台运行命令 ----------------------------------------------------------------------------------------------------- 2)#修改配置文件一(nginx) [root@hzl nginx]#cat nginx.conf user www; #修改用户 worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } ..... ... 3)#修改配置文件二(nginx) [root@hzl nginx]#cat default.conf server { listen 80; listen [::]:80; server_name localhost; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 4)#构建镜像 [root@hzl nginx]# docker build -t nginx_lnmp:v1 . Sending build context to Docker daemon 4.608kB Step 1/6 : FROM centos:7 ---> 8652b9f0cb4c Step 2/6 : RUN useradd www ---> Using cache ---> 604c262a4b42 Step 3/6 : ADD default.conf /etc/nginx/conf.d/ ---> 14de68977858 Step 4/6 : ADD nginx.conf /etc/nginx ---> 4aad7ceec6c5 Step 5/6 : EXPOSE 80 443 ---> Running in fcd1ed826cdb Removing intermediate container fcd1ed826cdb ---> 925ca375e06c Step 6/6 : CMD nginx -g "daemon off;" ---> Running in 8cc6e5a8bcb4 Removing intermediate container 8cc6e5a8bcb4 ---> ce2cb9bc6cc3 Successfully built ce2cb9bc6cc3 Successfully tagged nginx_lnmp:v1 5)#查看生成的镜像 [root@hzl nginx]# docker images |grep nginx_lnmp nginx_lnmp v1 ce2cb9bc6cc3 53 seconds ago 204MB

1|0【构建php镜像】

1)#创建PHP镜像文件 -------------------------------------------------------------------------------------------------- [root@hzl php]# vim Dockerfile FROM centos:7 #RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm #RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm #RUN yum install php php-devel php-fpm -y #低版本安装使用 ADD php.repo /etc/yum.repos.d/php.repo #安装yum源 RUN yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb --skip-broken RUN useradd www ADD www.conf /etc/php-fpm.d/ ADD php-fpm.conf /etc/ EXPOSE 9000 CMD php-fpm -F #php前台运行命令 --------------------------------------------------------------------------------------------------------------------------------------- [root@hzl php]# cat Dockerfile #本地安装php构建 FROM centos:7 ADD php.tar /tmp #添加php安装包 RUN yum -y localinstall /tmp/*.rpm #本地安装php包 RUN useradd www ADD www.conf /etc/php-fpm.d/ ADD php-fpm.conf /etc/ EXPOSE 9000 CMD php-fpm -F #php前台运行命令 -------------------------------------------------------------------------------------------------------------------------------------- 2)#创建php官方源 [root@hzl php]# cp /etc/yum.repos.d/php.repo . [root@hzl php]# cat php.repo [php-webtatic] name = PHP Repository baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/ gpgcheck = 0 [root@hzl php]# ll #php需要文件 总用量 19852 -rw-r--r-- 1 root root 576 7月 28 22:34 Dockerfile -rw-r--r-- 1 root root 23007 7月 28 17:11 php-fpm.conf -rw-r--r-- 1 root root 109 7月 28 19:50 php.repo -rw-r--r-- 1 root root 20275200 7月 28 22:55 php.tar -rw-r--r-- 1 root root 17964 7月 28 19:56 www.conf 3)#修改配置文件 www.conf (php) [root@hzl php]#cat www.conf [www] user = apache group = apache listen = 0.0.0.0:9000 listen.allowed_clients = 0.0.0.0 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 slowlog = /var/log/php-fpm/www-slow.log php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache [root@hzl php]#cat php-fpm.conf [global] [www] user = www group = www listen = 9000 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 request_terminate_timeout = 0 3)#构建镜像(php) [root@hzl php]# docker build -t php_lnmp:v1 . Sending build context to Docker daemon 44.54kB Step 1/6 : FROM centos:7 ...... .... ---> 8c615ceff8a3 Step 6/6 : CMD ["php-fpm"] ---> Running in 72f4cbd8a2be Removing intermediate container 72f4cbd8a2be ---> 52518650afa9 Successfully built 52518650afa9 Successfully tagged php_lnmp:v1 4)#查看镜像(php) [root@hzl php]# docker images |grep php php_lnmp v1 52518650afa9 About a minute ago 463MB

1|0【数据库镜像】

#创建mysql镜像 [root@hzl php]# docker rm -f mysql && docker run -d --name mysql --network=lnmp -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE wordpress mysql:5.7 #直接使用拉取mysql镜像

1|0【总结】

#注意: 1》dockerfile执行顺序是按照从上到下 2》如果构建的上一个镜像执行过此步骤,下一个则可以使用缓存(Using cache),重复构建镜像会使用缓存 3》如果上一步文件修改过,再次构建镜像时dockerfile的步骤,全部不会使用缓存 #缓存: 1、从互联网下载内容不会使用缓存 2、向镜像内部添加文件的内容(ADD、COPY)

1|0【Dockerfile源码构建PHP镜像】

1|0【构建镜像文件(扩展)】

FROM centos7 MAINTAINER Alvin hzl@qq.com RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #本地yum源备份 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo RUN yum makecache RUN yum update -y RUN yum install python3 -y RUN pip3 install django COPY docker /root/docker WORKDIR /root/docker EXPOSE 8080 CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"] #启动服务

1|4四、使用构建镜像搭建lnmp

1)#下载wordpress [root@docker ~]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz --2021-07-28 04:23:50-- https://cn.wordpress.org/latest-zh_CN.tar.gz 正在解析主机 cn.wordpress.org (cn.wordpress.org)... 198.143.164.252 正在连接 cn.wordpress.org (cn.wordpress.org)|198.143.164.252|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:15783657 (15M) [application/octet-stream] 正在保存至: “latest-zh_CN.tar.gz” 100%[============================================================================================================================>] 15,783,657 1.10MB/s 用时 25s 2021-07-28 04:24:16 (618 KB/s) - 已保存 “latest-zh_CN.tar.gz” [15783657/15783657]) 2)#创建网桥lnmp [root@hzl nginx]# docker network create lnmp c7ad0d637a1455ebd5ea9d08e23f5d13971a0172a910ddc8bd4649a68ee27fc4 #查看创建的网桥 [root@hzl nginx]# docker network ls |grep lnmp 4ead920b47c7 lnmp bridge local 3)#运行容器并创建数据库(mysql5.7) [root@docker mysql]# docker run -d -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=wordpress --network lnmp --name mysql mysql:5.7 840cdb23efceb5d894f92b280aa247ef2d656f015f5950c4927dbae49305ad42 [root@docker mysql]# docker ps |grep mysql 840cdb23efce mysql:5.7 "docker-entrypoint.s…" 20 seconds ago Up 18 seconds 3306/tcp, 33060/tcp mysql 4)#检查数据库状态(mysql) [root@docker tmp]# docker exec -it mysql bash root@840cdb23efce:/# mysql -uroot -p123 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | wordpress | +--------------------+ 5 rows in set (0.00 sec) 5)#运行创建php容器(php) [root@docker ]# docker run -d -v /tmp/html:/usr/share/nginx/html --network lnmp --name php php_lnmp:v1 a67d5e25f7dd228ab2a712005d15823fb22a0ad8c30d36bfb8d713f08074d2e2 [root@docker php]# docker ps |grep php a67d5e25f7dd php_lnmp:v1 "php-fpm" 20 seconds ago Up 19 seconds 9000/tcp php 6)#运行创建nginx容器(nginx) [root@docker nginx]# docker run -d -p 80:80 -v /tmp/html/:/usr/share/nginx/html --name nginx --network lnmp nginx_lnmp:v1 2e752f264faef9d7e8c2f8e2c214f8e62eb4ac23dceeaa24021bb83eba3ad6a7 [root@docker nginx]# docker ps |grep nginx 2e752f264fae nginx_lnmp:v1 "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx 7)#项目文件 [root@docker ~]# mkdir /tmp/html/ [root@docker ~]# tar xf latest-zh_CN.tar.gz -C /tmp/ [root@docker html]# cd /tmp/ [root@docker html]# mv /tmp/wordpress/* /tmp/html 8)#使用浏览器访问 http://192.168.15.80

在这里插入图片描述

1|5五、Dockerfile(多种构建镜像详解案列)

1)#使用 centos7 作为基础镜像部署 nginx 服务先创建一个nginx.repo文件 vim nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/releasever/basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/releasever/basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true 2)#编写 Dockerfile 文件 [root@hzl ~]# vim Dockerfile #指定基础镜像(依赖镜像) FROM centos:7 #执行一个命令 RUN yum install -y yum-utils #将本地文件添加到容器中 ADD nginx.repo /etc/yum.repos.d/nginx.repo #更新YUM缓存 RUN yum makecache #安装nginx RUN yum install -y nginx #制定容器启动默认执行的命令 CMD nginx -g ‘daemon off;’ 3)#构建镜像 [root@hzl ~]# docker build -t install/nginx:v1 #查看刚刚构建的镜像, 然后实例容器 [root@hzl ~]# docker images [root@hzl ~]# docker run -dit install/nginx:v1 sh #查看刚刚实例出的容器, 并进入到容器中 [root@hzl ~]# docker exec -it 94f8e35f3357 bash #检测nginx是否部署成功 [root@hzl ~]# crul 127.0.0.1 #出现 html 代码说明部署成功 4)#在容器中编译安装 nginx 服务 #编辑 Dockerfile 文件 [root@hzl ~]# vim Dockerfile #指定基础镜像(依赖镜像) FROM centos:7 #执行命令 RUN yum install yum-utils wget zlib zlib-devel pcre pcre-devel make gcc gcc-c++ RUN cd /opt && wget http://nginx.org/download/nginx-1.18.0.tar.gz && tar -xvf nginx.1.18.0/ && cd nginx-1.18.0/ && ./configure && make && make install #指定进入容器的默认工作目录 WORKDIR /usr/local/nginx/sbin #指定容器启动默认执行的命令 CMD ./nginx -g ‘daemon off;’ 5)#构建镜像 [root@hzl ~]# docker build -t yuan/install/nginx:v2 . #查看是否构建成功,并实例出容器 [root@hzl ~]# docker images [root@hzl ~]# docker run -dit --name yuan_nginx yuan/install/nginx:v2 sh #查看容器是否启动成功, 并测试 nginx [root@hzl ~]# docker exec yuan_nginx crul 127.0.0.1 #出现html代码说明部署成功 6)#构建以 Centos 为依赖镜像并安装 Django 的服务 #首先构建一个Dockerfile文件 [root@hzl ~]#vim Dockerfile #指定基础镜像 FROM centos:7 #运行命令 RUN yum makecache && yum update -y && yum install -y python3 && pip3 install django #拷贝本地文件到容器 COPY hzl /root/ #指定进入到容器的工作目录 WORKDIR /root/ #指定向外暴露的端口 EXPOSE 8080 #运行命令 CMD cd ./hzl && python3 manage.py runserver 0.0.0.0:8080 #文件 hzl 的构建 #在宿主机上安装 Django django-admin startproject hzl #创建一个 “hzl” 项目 cd ./hzl #进入目录 django-admin startapp application #开始项目 cd ./hzl vim setting.cong #修改配置文件"*"代理 cd#退出 7)#构建镜像 [root@hzl ~]#docker build -t test333:v1 . #查看并使用镜像实例化出容器 [root@hzl ~]#docker images [root@hzl ~]#docker run -dit --name test001 -p 9999:8080 test333:v1 sh #查看刚开启的容器,并进入容器启动 Django 服务 [root@hzl ~]#docker exec -it test001 bash [root@80f1315c030c ~]# python3 manage.py runserver 0.0.0.0:8080 Watching for file changes with StatReloader Performing system checks… System check identified no issues (0 silenced). December 04, 2020 - 06:50:19 Django version 3.1.4, using settings ‘lingxiu.settings’ Starting development server at http://0.0.0.0:8080/ Quit the server with CONTROL-C. #使用浏览器验证一下 8)#构建以 python 为依赖镜像并安装 Django 服务 #编辑 Dockerfile 文件 [root@hzl ~]# vim Dockerfile #指定依赖镜像 FROM python:3.6 #设置作者 MAINTAINER hzl #执行命令 RUN /usr/local/bin/python -m pip install --upgrade pip RUN pip3 install django==2.2.2 #拷贝文件 COPY app /root/ #设置工作目录 WORKDIR /root/ #执行命令 CMD cd ./app && python3 manage.py runserver 0.0.0.0:7777 9)#文件 app 的构建 #在宿主机上安装 Django django-admin startproject app #创建一个 “app” 项目 cd ./app #进入目录 django-admin startapp application #开始项目 cd ./app vim setting.cong #修改配置文件"*"代理 cd#退出 10)#构建镜像 [root@hzl ~]#docker build -t jjjj . #查看并使用镜像实例化出容器 [root@hzl ~]#docker images [root@hzl ~]#docker run -dit --name jjjjtest -p 4444:7777 jjjj:latest sh #查看刚开启的容器,并进入容器启动 Django 服务 [root@hzl ~]#docker exec -it jjjtest bash root@b85f93fcc114:~# python3 manage.py runserver 0.0.0.0:7777 Watching for file changes with StatReloader Performing system checks… System check identified no issues (0 silenced). December 04, 2020 - 10:17:51 Django version 2.2.2, using settings ‘app.settings’ Starting development server at http://0.0.0.0:7777/ Quit the server with CONTROL-C. #使用浏览器检验一下 11)#使用 NGINX 代理 Django #先构建一个 Django 服务, 步骤与上一个例子相同 #改变了一下向外暴露的端口 #编写 “Dockerfile” 文件 [root@hzl DjangoDocker]#vim Dockerfile #指定依赖镜像 FROM pyhton:3.6 #安装 Django RUN /usr/local/bin/python -m pip install --upgrade pip RUN pip3 install django==2.2.2 #COPY 文件 COPY app /root/ #指定工作目录 WORKDIR /root/ #运行命令 CMD cd ./app && python3 manage.py runserver 0.0.0.0:8080 [root@hzl DjangoDocker]#ls app Dockerfile #这两个文件, “app” 在上一个例子中有构建 #构建镜像,并查看 [root@hzl DjangoDocker]#docker build -t python_django:v6 . [root@hzl DjangoDocker]#docker images #实例出容器,并查看 [root@hzl DjangoDocker]#docker run -dit --name p_d_test1 -p 8888:8080 python_django:v6 sh 6906ff9e3ec0f9d583eb27890d82c79deff4358a43e5f1ec768a702547d020bf [root@hzl DjangoDocker]#docker ps #进到容器里面,开启服务,再测试 [root@hzl DjangoDocker]#docker exec -it p_d_test1 bash root@6906ff9e3ec0:~# python3 manage.py runserver 0.0.0.0:8080 [root@hzl DjangoDocker]#curl 127.0.0.1:8888 12)#然后来编写 nginx 服务以及代理配置 #编写 “nginx.repo” 文件 [root@hzl NginxDocker]#vim nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/releasever/basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/releasever/basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true #编写 “default.conf” 文件(代理"Django"配置) [root@hzl NginxDocker]#vim default.conf server { listen 80; server_name www.py16zxl.com; location / { # 这里填的是 Django 服务的访问地址与端口(映射端口) proxy_pass http://192.168.13.234:8888/; index index.html index.htm index.jsp; } } 13)#编写 “Dockerfile” 文件 [root@hzl NginxDocker]#vim Dockerfile #指定依赖进行 FROM centos:7 #指定作者 MAINTAINER hzl #安装依赖 RUN yum install -y yum-utils gcc gcc-c++ pcre pcre-devel zlib zlib-devel make wget #源码安装 nginx1.18.0 RUN wget http://nginx.org/download/nginx-1.18.0.tar.gz && tar -xvf nginx-1.18.0.tar.gz && cd nginx.1.18.0 && ./configure --prefix="/usr/local/nginx-1.18.0" && make && make install #拷贝 NGINX 配置文件 COPY nginx.repo /etc/yum.repos.d/ #更新 yum 软件包索引 RUN yum makecache fast #yum 安装 nginx RUN yum install -y nginx #指定向外暴露的端口 EXPOSE 8000 #拷贝 nginx 默认配置文件 COPY default.conf /etc/nginx/conf.d/ #容器起来运行的命令 CMD /usr/local/nginx-1.18.0/sbin/nginx -g ‘daemon off;’ #当前需要的文件 [root@hzl NginxDocker]#ls default.conf Dockerfile nginx.repo #开始构建镜像,并查看 [root@hzl NginxDocker]#docker build -t nginx_d:v7 . [root@hzl NginxDocker]#docker images #实例化出容器,并查看 [root@hzl NginxDocker]#docker run -dit --name nginx_d -p 80:80 nginx_d:v7 sh [root@hzl NginxDocker]#docker ps #进入容器,开启 “nginx” 服务,并验证 [root@hzl NginxDocker]#docker exec -it nginx_d bash [root@51f54c1d5abb /]#nginx [root@hzl NginxDocker]#curl 127.0.0.1:80 #发现通过访问nginx也可以进入Django页面

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121514.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示