文章目录

  • Dockerfile构建镜像
    • 一、Dockerfile的简述
    • 二、Dockerfile使用参数(参数编写为大写)
      • 1、FROM
      • 2、MAINTAINER
      • 3、RUN
      • 4、CMD
      • 5、ADD
      • 6、COPY
      • 7、ENV
      • 8、EXPOSE
      • 9、ARG
      • 10、VOLUME
      • 11、WORKDIR
      • 12、ONBUILD
      • 13、LABEL
    • 三、Dockerfile(案列)
      • 【构建nginx镜像】
      • 【构建php镜像】
      • 【数据库镜像】
      • 【总结】
      • 【Dockerfile源码构建PHP镜像】
      • 【构建镜像文件(扩展)】
    • 四、使用构建镜像搭建lnmp
    • 五、Dockerfile(多种构建镜像详解案列)

Dockerfile构建镜像

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

一、Dockerfile的简述

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

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

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

1、FROM

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

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

2、MAINTAINER

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

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

3、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

4、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;"

5、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不支持远程下载功能

6、COPY

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

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

7、ENV

设置一个容器的环境变量

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

8、EXPOSE

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

指定于外界交互的端口

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

9、ARG

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

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

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

10、VOLUME

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

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

11、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 参数覆盖构建时所设置的工作目录

12、ONBUILD

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

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

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

13、LABEL

用于为镜像添加元数据

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

三、Dockerfile(案列)

【构建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:v15#查看生成的镜像
[root@hzl nginx]# docker images  |grep nginx_lnmp
nginx_lnmp                                                  v1             ce2cb9bc6cc3   53 seconds ago   204MB

【构建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 728 22:34 Dockerfile
-rw-r--r-- 1 root root    23007 728 17:11 php-fpm.conf
-rw-r--r-- 1 root root      109 728 19:50 php.repo
-rw-r--r-- 1 root root 20275200 728 22:55 php.tar
-rw-r--r-- 1 root root    17964 728 19:56 www.conf3#修改配置文件 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 = 03#构建镜像(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:v14#查看镜像(php)
[root@hzl php]# docker images |grep php
php_lnmp                                                    v1             52518650afa9   About a minute ago   463MB

【数据库镜像】

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

【Dockerfile源码构建PHP镜像】

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

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"]     #启动服务

四、使用构建镜像搭建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    local3)#运行容器并创建数据库(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   mysql4)#检查数据库状态(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              php6#运行创建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   nginx7)#项目文件
[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/html8#使用浏览器访问
http://192.168.15.80

五、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=true2#编写 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:77779)#文件 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:888812)#然后来编写 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页面

03@Dockerfile构建镜像相关推荐

  1. Docker 从Dockerfile 构建镜像 :build 命令的用法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dockerfile 创建完成后,可以使用 docker build 命令根据 Dockerfile ...

  2. 实战:Docker容器虚拟化技术(使用DockerFile构建镜像并搭建 swarm+compose集群)5

    实战:Docker容器虚拟化技术 (使用DockerFile构建镜像并搭建 swarm+compose集群)5 要求: 使用DockerFile构建镜像并搭建 swarm+compose集群 在Swa ...

  3. Dockerfile 构建镜像以及镜像优化的方法

    点击查看<docker容器安装配置及创建容器> 一. Docker commit 构建镜像 docker commit 构建新镜像三部曲 运行容器 修改容器 将容器保存为新的容器 [roo ...

  4. Dockerfile构建镜像最佳实践

    参考文章:Dockerfile构建镜像最佳实践 在前文Dockefile及命令详解中我们已经学习了如何通过Dockerfile构建镜像以及命令的详细说明,但是在生产环境或项目使用时如何构建出一个尽可能 ...

  5. 【Docker】Dockerfile构建镜像与命令详解

    前言 传统方式部署集群,你需要在每台机器搭建环境,配置各种中间件,这样不但效率低下,而且很难保证环境的一致性,而且配置如果有改动,需要挨个机器修改. 有了Docker,上述问题都能解决.但是官方镜像大 ...

  6. 实战:Dockerfile构建镜像-2022.2.28

    实战:Dockerfile构建镜像-2022.2.28 目录 文章目录 实战:Dockerfile构建镜像-2022.2.28 目录 实验环境 实验软件 1.Dockerfile概述 2.Docker ...

  7. docker:dockerfile构建镜像

    目录 一.dockerfile概念 1.dockerfile的原理就是镜像分层 二.docker镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于dockerfile创建 3.1 doc ...

  8. dockerfile构建镜像的命令_编写Dockerfile的最佳实践

    虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以进行版本控制,但是很多人构建镜像的时候,都有一种冲动--把可能用到的东西都打包到镜像中.这种不正当的 Dockerfile 使用也会 ...

  9. Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)

    Dockerfile 是一个文本文件,记录了镜像构建的所有步骤. 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 dock ...

最新文章

  1. MVC中一个表单实现多个提交按钮(一个action搞定添删改)
  2. php小程序地图处理,微信小程序 地图map详解及简单实例
  3. 实现一个域名对应多个IP地址和DNS优缺点详解!
  4. linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程
  5. 2 万字长文盘点五种负载均衡策略
  6. 艾伟:WM有约(一):你好,CF
  7. 清华ACL'22 | 一文读懂刘知远所在实验室18篇论文详情
  8. maven:Java heap space内存不足错误的解决方法
  9. libjingle源码解析(3)-【PseudoTcp】建立UDP之上的TCP(1):连接和关闭
  10. 单元格自适应宽度_Excel – 合并单元格时,如何同时保留每个单元格的内容?...
  11. 计算机软件系统包括选择题,青书学堂: (单选题) 计算机软件系统包括 ( )(本题2.0分)...
  12. linux4g内存图,linux 支持4G内存
  13. 基于javaEE的超市库存管理系统
  14. PyCharm的Requirement already satisfied 解决方法
  15. 简师网:考上教编才知道,小学教师和中学教师有这些差别!
  16. 拾忆Elasticsearch02:Elasticsearch的基本命令回顾
  17. Python PEP8 基本常用规范
  18. PyQt5教程(八)——实现QQ登录界面(二、加载资源文件)
  19. [转] Bias-Variance Tradeoff
  20. Mesh?无线协议的选择

热门文章

  1. CMOS放大器的频率特性--视频节选
  2. C语言邻接表表示法创建无向图并输出
  3. ZLL主机接口的信息处理流程
  4. 我的stm32学习——串口屏的使用
  5. 示波器1m和50欧姆示阻抗匹配_50欧阻抗匹配线的问题
  6. citespace的操作流程
  7. 集成灶好还是传统灶好(有没有你心仪的集成灶推荐)
  8. MySQL workbench 输入汉字_MySQL Workbench 中文使用教程
  9. OpenCL相关资源
  10. 登录harbor提示x509: cannot validate certificate for x.x.x.x because it doesn‘t contain any IP SANs