文章目录一、使用docker commit 命令创建镜像1、通过docker run命令启动容器2、修改docker镜像内容3、docker commit提交修改的镜像4、docker run新的镜像5、验证修改的配置已被正确应用在新的镜像二、使用 Dockerfile 创建镜像1、准备 Dockerfile2、构建镜像3、运行容器三、docker commit 和使用 Dockerfile 创建 Docker 镜像对比四、总结当我们从docker 镜像仓库中下载的镜像不能满足我们的需求时可以通过以下两种方式对镜像进行更改制作符合业务需求的镜像。一、使用docker commit 命令创建镜像以下通过在配置文件中将nginx进程的最大连接数由1024修改为1000为例进行演示。1、通过docker run命令启动容器拉取一个nginx镜像并启动容器。[rootansible ~]# docker run -it -d --name nginx -p 8088:80 registry.openanolis.cn/openanolis/nginx:1.14.1-8.652375591c148cc769c1227075a60091608ce2e960c04b4df8a9ad2cc939a8da2[rootansible ~]#[rootansible ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE registry.openanolis.cn/openanolis/mysql8.0.30-8.6 f74177ebc0922years ago 814MB registry.openanolis.cn/openanolis/nginx1.14.1-8.6 cdd9bdf893462years ago 521MB registry.openanolis.cn/openanolis/httpd2.4.37-8.6 04222782d6982years ago 463MB[rootansible ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52375591c148 registry.openanolis.cn/openanolis/nginx:1.14.1-8.6docker-entrypoint.s…18seconds ago Up17seconds0.0.0.0:8088-80/tcp nginx2、修改docker镜像内容进入容器将nginx进程的最大连接数由worker_connections 1024;修改为worker_connections 1000;[rootansible ~]# docker exec -it 52375591c148 /bin/bash[root52375591c148 /]# vim /etc/nginx/nginx.conf[root52375591c148 /]# cat /etc/nginx/nginx.conf# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events{worker_connections1000;}http{log_format main$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;types_hash_max_size2048;include /etc/nginx/mime.types;default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;server{listen80default_server;listen[::]:80 default_server;server_name _;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location /{}error_page404/404.html;location/40x.html{}error_page500502503504/50x.html;location/50x.html{}}# Settings for a TLS enabled server.## server {# listen 443 ssl http2 default_server;# listen [::]:443 ssl http2 default_server;# server_name _;# root /usr/share/nginx/html;## ssl_certificate /etc/pki/nginx/server.crt;# ssl_certificate_key /etc/pki/nginx/private/server.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers PROFILESYSTEM;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## location / {# }## error_page 404 /404.html;# location /40x.html {# }## error_page 500 502 503 504 /50x.html;# location /50x.html {# }# }}[root52375591c148 /]# exitexit[rootansible ~]#3、docker commit提交修改的镜像docker commit的语法格式为dockercommit[选项]容器ID或容器名[仓库名[:标签]]示例将上述修改后的容器保存为镜像[rootansible ~]# docker commit -mset worker_connections 1000 -a北极星 52375591c148 crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1sha256:aae09f726618f2f2724d063cf4d8034ba537e12489dacb00a31db52f1e793557#上述执行成功后可以查看到刚打包成功的新镜像[rootansible ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx v1 aae09f7266186seconds ago 521MB registry.openanolis.cn/openanolis/mysql8.0.30-8.6 f74177ebc0922years ago 814MB registry.openanolis.cn/openanolis/nginx1.14.1-8.6 cdd9bdf893462years ago 521MB registry.openanolis.cn/openanolis/httpd2.4.37-8.6 04222782d6982years ago 463MB[rootansible ~]#各个参数说明•-m: 提交的描述信息•-a: 指定镜像作者• 52375591c148容器 ID•crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1指定要创建的目标镜像名常见命名规范为仓库名称/镜像名称:标签4、docker run新的镜像通过打包的新镜像重新启动一个容器nginxv1[rootansible ~]# docker run -it -d -p8080:80 --name nginxv1 crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1892552859d37a1f93d39c94ed5162e44b908bce592e68c124ec2f4c80ccaa0bb[rootansible ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 892552859d37 crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1docker-entrypoint.s…3seconds ago Up3seconds0.0.0.0:8080-80/tcp nginxv1 52375591c148 registry.openanolis.cn/openanolis/nginx:1.14.1-8.6docker-entrypoint.s…3hours ago Up3hours0.0.0.0:8088-80/tcp nginx[rootansible ~]#5、验证修改的配置已被正确应用在新的镜像检查确认通过新镜像启动的nginxv1容器配置文件已应用调整后的参数worker_connections 1000;[rootansible ~]# docker exec -it 892552859d37 /bin/bash[root892552859d37 /]# more /etc/nginx/nginx.conf# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events{worker_connections1000;}二、使用 Dockerfile 创建镜像1、准备 Dockerfile在一个空白目录中建立一个文本文件并命名为Dockerfile注意没有扩展名[rootansible ~]# mkdir mynginx[rootansible ~]# cd mynginx[rootansible mynginx]# touch Dockerfile编写Dockerfile文件内容# Dockerfile 示例# 使用阿里云龙蜥操作系统提供的Nginx基础镜像FROM registry.openanolis.cn/openanolis/nginx:1.14.1-8.6# 设置维护者信息可选LABELmaintaineryour.emailexample.com# 设置环境变量ENVAPP_DIR/usr/share/nginx/html# 安装额外的软件包RUN yuminstall-ywgetvimnet-tools# 替换默认首页内容RUNechohtmlbodyh1Hello, Enhanced Docker!/h1/body/html${APP_DIR}/index.html# 添加自定义的Nginx配置文件COPY nginx.conf /etc/nginx/nginx.conf# 暴露80端口EXPOSE80# 定义容器启动时执行的命令CMD[nginx,-g,daemon off;]2、构建镜像在包含Dockerfile的目录通过运行docker build命令来构建Docker 镜像并且可以查看构建镜像的整个过程[rootansible mynginx]# docker build -t mynginx:latest .Sending build context to Docker daemon6.144kB Step1/8:FROM registry.openanolis.cn/openanolis/nginx:1.14.1-8.61.14.1-8.6: Pulling from openanolis/nginx719018114380: Already exists f578b0a89bc8: Pull complete aeae93121098: Pull complete 00b464068565: Pull complete Digest: sha256:55dcb729c46f2028126f2a57417712c4d77a947ecb409e445bf0c2e59d100640 Status: Downloaded newer imageforregistry.openanolis.cn/openanolis/nginx:1.14.1-8.6 ---cdd9bdf89346 Step2/8:LABELmaintaineryour.emailexample.com---Runningin89bb323a22f5 Removing intermediate container 89bb323a22f5 ---273fb49ede20 Step3/8:ENVAPP_DIR/usr/share/nginx/html ---Runninginf13f69b8aa61 Removing intermediate container f13f69b8aa61 ---3c766328214c Step4/8:RUN yuminstall-ywgetvimnet-tools ---Runninginecb39363dda0 AnolisOS-8 - AppStream7.2MB/s|9.2MB 00:01 AnolisOS-8 - BaseOS6.9MB/s|4.3MB 00:00 AnolisOS-8 - Extras8.3kB/s|2.3kB 00:00 AnolisOS-8 - PowerTools1.6MB/s|1.4MB 00:00 Dependencies resolved.Package Arch Version Repository SizeInstalling: net-tools x86_642.0-0.52.20160912git.an8 BaseOS321k vim-enhanced x86_642:8.0.1763-19.0.1.an8_6.4 AppStream1.4Mwgetx86_641.19.5-12.0.1.an8 AppStream705k Installing dependencies: gpm-libs x86_641.20.7-17.an8 AppStream38k libmetalink x86_640.1.3-7.0.1.an8 BaseOS30k vim-common x86_642:8.0.1763-19.0.1.an8_6.4 AppStream6.3M vim-filesystem noarch2:8.0.1763-19.0.1.an8_6.4 AppStream50kwhichx86_642.21-20.0.1.an8 BaseOS44k Transaction SummaryInstall8Packages Total download size:8.9M Installed size:34M Downloading Packages:(1/8): gpm-libs-1.20.7-17.an8.x86_64.rpm156kB/s|38kB 00:00(2/8): vim-filesystem-8.0.1763-19.0.1.an8_6.4.n347kB/s|50kB 00:00(3/8): wget-1.19.5-12.0.1.an8.x86_64.rpm2.4MB/s|705kB 00:00(4/8): vim-enhanced-8.0.1763-19.0.1.an8_6.4.x861.8MB/s|1.4MB 00:00(5/8): libmetalink-0.1.3-7.0.1.an8.x86_64.rpm254kB/s|30kB 00:00(6/8): which-2.21-20.0.1.an8.x86_64.rpm378kB/s|44kB 00:00(7/8): net-tools-2.0-0.52.20160912git.an8.x86_61.5MB/s|321kB 00:00(8/8): vim-common-8.0.1763-19.0.1.an8_6.4.x86_65.7MB/s|6.3MB 00:01 -------------------------------------------------------------------------------- Total7.9MB/s|8.9MB 00:01 Running transaction check Transaction check succeeded. Running transactiontestTransactiontestsucceeded. Running transaction Preparing:1/1 Installing:which-2.21-20.0.1.an8.x86_641/8 Installing:libmetalink-0.1.3-7.0.1.an8.x86_642/8 Installing:vim-filesystem-2:8.0.1763-19.0.1.an8_6.4.noarch3/8 Installing:vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_644/8 Installing:gpm-libs-1.20.7-17.an8.x86_645/8 Running scriptlet: gpm-libs-1.20.7-17.an8.x86_645/8 Installing:vim-enhanced-2:8.0.1763-19.0.1.an8_6.4.x86_646/8 Installing:wget-1.19.5-12.0.1.an8.x86_647/8 Running scriptlet: wget-1.19.5-12.0.1.an8.x86_647/8 Installing:net-tools-2.0-0.52.20160912git.an8.x86_648/8 Running scriptlet: net-tools-2.0-0.52.20160912git.an8.x86_648/8 Running scriptlet: vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_648/8 Verifying:gpm-libs-1.20.7-17.an8.x86_641/8 Verifying:vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_642/8 Verifying:vim-enhanced-2:8.0.1763-19.0.1.an8_6.4.x86_643/8 Verifying:vim-filesystem-2:8.0.1763-19.0.1.an8_6.4.noarch4/8 Verifying:wget-1.19.5-12.0.1.an8.x86_645/8 Verifying:libmetalink-0.1.3-7.0.1.an8.x86_646/8 Verifying:net-tools-2.0-0.52.20160912git.an8.x86_647/8 Verifying:which-2.21-20.0.1.an8.x86_648/8 Installed: gpm-libs-1.20.7-17.an8.x86_64 libmetalink-0.1.3-7.0.1.an8.x86_64 net-tools-2.0-0.52.20160912git.an8.x86_64 vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_64 vim-enhanced-2:8.0.1763-19.0.1.an8_6.4.x86_64 vim-filesystem-2:8.0.1763-19.0.1.an8_6.4.noarch wget-1.19.5-12.0.1.an8.x86_64 which-2.21-20.0.1.an8.x86_64 Complete!Removing intermediate container ecb39363dda0 ---89ee9ee7c7d4 Step5/8:RUNechohtmlbodyh1Hello, Enhanced Docker!/h1/body/html${APP_DIR}/index.html ---Runningina790e89b1ec2 Removing intermediate container a790e89b1ec2 ---92bc8aacf3e9 Step6/8:COPY nginx.conf /etc/nginx/nginx.conf ---5ed903bfcb23 Step7/8:EXPOSE80---Runningin803ac3700903 Removing intermediate container 803ac3700903 ---740497b2d600 Step8/8:CMD[nginx,-g,daemon off;]---Runningincdafa06f319a Removing intermediate container cdafa06f319a ---4ac5057b2b8a Successfully built 4ac5057b2b8a Successfully tagged mynginx:latest[rootansible mynginx]#•-t参数用于给新镜像指定一个标签格式为name:tag• 后面的点.表示Dockerfile所在的当前目录也可以通过-f参数指定Dockerfile的绝对路径3、运行容器构建完成后使用docker run命令来运行基于该镜像的容器[rootansible mynginx]# docker run -d -it --name mynginx -p8080:80 mynginx这个命令会以后台模式启动容器并将主机的 8080端口映射到容器内的 80 端口。现在你应该能够通过访问http://主机IP:8080来查看运行中的nginx服务器。三、docker commit 和使用 Dockerfile 创建 Docker 镜像对比特性/方面docker commit使用Dockerfile创建速度快速简便适合快速实验和测试初始设置可能需要更多时间来编写和完善Dockerfile透明度缺乏透明度难以了解镜像是如何构建的高透明度所有步骤都被记录在Dockerfile中可重复性不利于重现相同的修改在不同环境中可能无法一致地重建可以在任何地方一致地重建镜像版本控制不利于版本控制因为没有明确的构建步骤易于纳入版本控制系统如Git便于追踪变更历史维护难度随着项目发展管理多个由commit创建的镜像变得复杂且容易出错更新镜像只需修改Dockerfile并重新构建易于维护安全性可能包含不必要的文件或配置增加潜在的安全风险更精确地控制哪些内容被包含在镜像中减少安全风险团队协作其他人很难理解镜像是如何构建出来的不利于团队协作团队成员可以清晰地了解镜像的构成及其依赖关系便于理解和贡献自动化集成难以与CI/CD 工具无缝集成支持自动化工具可以轻松集成到CI/CD 流程中适用场景适用于快速原型设计、临时任务或简单的更改适用于长期解决方案、生产环境以及需要高度可靠性和一致性的场景学习曲线学习成本低适合初学者需要一定的学习成本来掌握Dockerfile的编写规范和最佳实践四、总结在生产环境中强烈推荐使用Dockerfile来创建和管理Docker 镜像因为它能够提供更高的可靠性、透明度和可维护性
Linux环境如何创建Docker镜像
发布时间:2026/6/5 17:12:17
文章目录一、使用docker commit 命令创建镜像1、通过docker run命令启动容器2、修改docker镜像内容3、docker commit提交修改的镜像4、docker run新的镜像5、验证修改的配置已被正确应用在新的镜像二、使用 Dockerfile 创建镜像1、准备 Dockerfile2、构建镜像3、运行容器三、docker commit 和使用 Dockerfile 创建 Docker 镜像对比四、总结当我们从docker 镜像仓库中下载的镜像不能满足我们的需求时可以通过以下两种方式对镜像进行更改制作符合业务需求的镜像。一、使用docker commit 命令创建镜像以下通过在配置文件中将nginx进程的最大连接数由1024修改为1000为例进行演示。1、通过docker run命令启动容器拉取一个nginx镜像并启动容器。[rootansible ~]# docker run -it -d --name nginx -p 8088:80 registry.openanolis.cn/openanolis/nginx:1.14.1-8.652375591c148cc769c1227075a60091608ce2e960c04b4df8a9ad2cc939a8da2[rootansible ~]#[rootansible ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE registry.openanolis.cn/openanolis/mysql8.0.30-8.6 f74177ebc0922years ago 814MB registry.openanolis.cn/openanolis/nginx1.14.1-8.6 cdd9bdf893462years ago 521MB registry.openanolis.cn/openanolis/httpd2.4.37-8.6 04222782d6982years ago 463MB[rootansible ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52375591c148 registry.openanolis.cn/openanolis/nginx:1.14.1-8.6docker-entrypoint.s…18seconds ago Up17seconds0.0.0.0:8088-80/tcp nginx2、修改docker镜像内容进入容器将nginx进程的最大连接数由worker_connections 1024;修改为worker_connections 1000;[rootansible ~]# docker exec -it 52375591c148 /bin/bash[root52375591c148 /]# vim /etc/nginx/nginx.conf[root52375591c148 /]# cat /etc/nginx/nginx.conf# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events{worker_connections1000;}http{log_format main$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;types_hash_max_size2048;include /etc/nginx/mime.types;default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;server{listen80default_server;listen[::]:80 default_server;server_name _;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location /{}error_page404/404.html;location/40x.html{}error_page500502503504/50x.html;location/50x.html{}}# Settings for a TLS enabled server.## server {# listen 443 ssl http2 default_server;# listen [::]:443 ssl http2 default_server;# server_name _;# root /usr/share/nginx/html;## ssl_certificate /etc/pki/nginx/server.crt;# ssl_certificate_key /etc/pki/nginx/private/server.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers PROFILESYSTEM;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## location / {# }## error_page 404 /404.html;# location /40x.html {# }## error_page 500 502 503 504 /50x.html;# location /50x.html {# }# }}[root52375591c148 /]# exitexit[rootansible ~]#3、docker commit提交修改的镜像docker commit的语法格式为dockercommit[选项]容器ID或容器名[仓库名[:标签]]示例将上述修改后的容器保存为镜像[rootansible ~]# docker commit -mset worker_connections 1000 -a北极星 52375591c148 crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1sha256:aae09f726618f2f2724d063cf4d8034ba537e12489dacb00a31db52f1e793557#上述执行成功后可以查看到刚打包成功的新镜像[rootansible ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx v1 aae09f7266186seconds ago 521MB registry.openanolis.cn/openanolis/mysql8.0.30-8.6 f74177ebc0922years ago 814MB registry.openanolis.cn/openanolis/nginx1.14.1-8.6 cdd9bdf893462years ago 521MB registry.openanolis.cn/openanolis/httpd2.4.37-8.6 04222782d6982years ago 463MB[rootansible ~]#各个参数说明•-m: 提交的描述信息•-a: 指定镜像作者• 52375591c148容器 ID•crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1指定要创建的目标镜像名常见命名规范为仓库名称/镜像名称:标签4、docker run新的镜像通过打包的新镜像重新启动一个容器nginxv1[rootansible ~]# docker run -it -d -p8080:80 --name nginxv1 crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1892552859d37a1f93d39c94ed5162e44b908bce592e68c124ec2f4c80ccaa0bb[rootansible ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 892552859d37 crpi-lzszgrfv271ncu45.cn-chengdu.personal.cr.aliyuncs.com/rb87/nginx:v1docker-entrypoint.s…3seconds ago Up3seconds0.0.0.0:8080-80/tcp nginxv1 52375591c148 registry.openanolis.cn/openanolis/nginx:1.14.1-8.6docker-entrypoint.s…3hours ago Up3hours0.0.0.0:8088-80/tcp nginx[rootansible ~]#5、验证修改的配置已被正确应用在新的镜像检查确认通过新镜像启动的nginxv1容器配置文件已应用调整后的参数worker_connections 1000;[rootansible ~]# docker exec -it 892552859d37 /bin/bash[root892552859d37 /]# more /etc/nginx/nginx.conf# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events{worker_connections1000;}二、使用 Dockerfile 创建镜像1、准备 Dockerfile在一个空白目录中建立一个文本文件并命名为Dockerfile注意没有扩展名[rootansible ~]# mkdir mynginx[rootansible ~]# cd mynginx[rootansible mynginx]# touch Dockerfile编写Dockerfile文件内容# Dockerfile 示例# 使用阿里云龙蜥操作系统提供的Nginx基础镜像FROM registry.openanolis.cn/openanolis/nginx:1.14.1-8.6# 设置维护者信息可选LABELmaintaineryour.emailexample.com# 设置环境变量ENVAPP_DIR/usr/share/nginx/html# 安装额外的软件包RUN yuminstall-ywgetvimnet-tools# 替换默认首页内容RUNechohtmlbodyh1Hello, Enhanced Docker!/h1/body/html${APP_DIR}/index.html# 添加自定义的Nginx配置文件COPY nginx.conf /etc/nginx/nginx.conf# 暴露80端口EXPOSE80# 定义容器启动时执行的命令CMD[nginx,-g,daemon off;]2、构建镜像在包含Dockerfile的目录通过运行docker build命令来构建Docker 镜像并且可以查看构建镜像的整个过程[rootansible mynginx]# docker build -t mynginx:latest .Sending build context to Docker daemon6.144kB Step1/8:FROM registry.openanolis.cn/openanolis/nginx:1.14.1-8.61.14.1-8.6: Pulling from openanolis/nginx719018114380: Already exists f578b0a89bc8: Pull complete aeae93121098: Pull complete 00b464068565: Pull complete Digest: sha256:55dcb729c46f2028126f2a57417712c4d77a947ecb409e445bf0c2e59d100640 Status: Downloaded newer imageforregistry.openanolis.cn/openanolis/nginx:1.14.1-8.6 ---cdd9bdf89346 Step2/8:LABELmaintaineryour.emailexample.com---Runningin89bb323a22f5 Removing intermediate container 89bb323a22f5 ---273fb49ede20 Step3/8:ENVAPP_DIR/usr/share/nginx/html ---Runninginf13f69b8aa61 Removing intermediate container f13f69b8aa61 ---3c766328214c Step4/8:RUN yuminstall-ywgetvimnet-tools ---Runninginecb39363dda0 AnolisOS-8 - AppStream7.2MB/s|9.2MB 00:01 AnolisOS-8 - BaseOS6.9MB/s|4.3MB 00:00 AnolisOS-8 - Extras8.3kB/s|2.3kB 00:00 AnolisOS-8 - PowerTools1.6MB/s|1.4MB 00:00 Dependencies resolved.Package Arch Version Repository SizeInstalling: net-tools x86_642.0-0.52.20160912git.an8 BaseOS321k vim-enhanced x86_642:8.0.1763-19.0.1.an8_6.4 AppStream1.4Mwgetx86_641.19.5-12.0.1.an8 AppStream705k Installing dependencies: gpm-libs x86_641.20.7-17.an8 AppStream38k libmetalink x86_640.1.3-7.0.1.an8 BaseOS30k vim-common x86_642:8.0.1763-19.0.1.an8_6.4 AppStream6.3M vim-filesystem noarch2:8.0.1763-19.0.1.an8_6.4 AppStream50kwhichx86_642.21-20.0.1.an8 BaseOS44k Transaction SummaryInstall8Packages Total download size:8.9M Installed size:34M Downloading Packages:(1/8): gpm-libs-1.20.7-17.an8.x86_64.rpm156kB/s|38kB 00:00(2/8): vim-filesystem-8.0.1763-19.0.1.an8_6.4.n347kB/s|50kB 00:00(3/8): wget-1.19.5-12.0.1.an8.x86_64.rpm2.4MB/s|705kB 00:00(4/8): vim-enhanced-8.0.1763-19.0.1.an8_6.4.x861.8MB/s|1.4MB 00:00(5/8): libmetalink-0.1.3-7.0.1.an8.x86_64.rpm254kB/s|30kB 00:00(6/8): which-2.21-20.0.1.an8.x86_64.rpm378kB/s|44kB 00:00(7/8): net-tools-2.0-0.52.20160912git.an8.x86_61.5MB/s|321kB 00:00(8/8): vim-common-8.0.1763-19.0.1.an8_6.4.x86_65.7MB/s|6.3MB 00:01 -------------------------------------------------------------------------------- Total7.9MB/s|8.9MB 00:01 Running transaction check Transaction check succeeded. Running transactiontestTransactiontestsucceeded. Running transaction Preparing:1/1 Installing:which-2.21-20.0.1.an8.x86_641/8 Installing:libmetalink-0.1.3-7.0.1.an8.x86_642/8 Installing:vim-filesystem-2:8.0.1763-19.0.1.an8_6.4.noarch3/8 Installing:vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_644/8 Installing:gpm-libs-1.20.7-17.an8.x86_645/8 Running scriptlet: gpm-libs-1.20.7-17.an8.x86_645/8 Installing:vim-enhanced-2:8.0.1763-19.0.1.an8_6.4.x86_646/8 Installing:wget-1.19.5-12.0.1.an8.x86_647/8 Running scriptlet: wget-1.19.5-12.0.1.an8.x86_647/8 Installing:net-tools-2.0-0.52.20160912git.an8.x86_648/8 Running scriptlet: net-tools-2.0-0.52.20160912git.an8.x86_648/8 Running scriptlet: vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_648/8 Verifying:gpm-libs-1.20.7-17.an8.x86_641/8 Verifying:vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_642/8 Verifying:vim-enhanced-2:8.0.1763-19.0.1.an8_6.4.x86_643/8 Verifying:vim-filesystem-2:8.0.1763-19.0.1.an8_6.4.noarch4/8 Verifying:wget-1.19.5-12.0.1.an8.x86_645/8 Verifying:libmetalink-0.1.3-7.0.1.an8.x86_646/8 Verifying:net-tools-2.0-0.52.20160912git.an8.x86_647/8 Verifying:which-2.21-20.0.1.an8.x86_648/8 Installed: gpm-libs-1.20.7-17.an8.x86_64 libmetalink-0.1.3-7.0.1.an8.x86_64 net-tools-2.0-0.52.20160912git.an8.x86_64 vim-common-2:8.0.1763-19.0.1.an8_6.4.x86_64 vim-enhanced-2:8.0.1763-19.0.1.an8_6.4.x86_64 vim-filesystem-2:8.0.1763-19.0.1.an8_6.4.noarch wget-1.19.5-12.0.1.an8.x86_64 which-2.21-20.0.1.an8.x86_64 Complete!Removing intermediate container ecb39363dda0 ---89ee9ee7c7d4 Step5/8:RUNechohtmlbodyh1Hello, Enhanced Docker!/h1/body/html${APP_DIR}/index.html ---Runningina790e89b1ec2 Removing intermediate container a790e89b1ec2 ---92bc8aacf3e9 Step6/8:COPY nginx.conf /etc/nginx/nginx.conf ---5ed903bfcb23 Step7/8:EXPOSE80---Runningin803ac3700903 Removing intermediate container 803ac3700903 ---740497b2d600 Step8/8:CMD[nginx,-g,daemon off;]---Runningincdafa06f319a Removing intermediate container cdafa06f319a ---4ac5057b2b8a Successfully built 4ac5057b2b8a Successfully tagged mynginx:latest[rootansible mynginx]#•-t参数用于给新镜像指定一个标签格式为name:tag• 后面的点.表示Dockerfile所在的当前目录也可以通过-f参数指定Dockerfile的绝对路径3、运行容器构建完成后使用docker run命令来运行基于该镜像的容器[rootansible mynginx]# docker run -d -it --name mynginx -p8080:80 mynginx这个命令会以后台模式启动容器并将主机的 8080端口映射到容器内的 80 端口。现在你应该能够通过访问http://主机IP:8080来查看运行中的nginx服务器。三、docker commit 和使用 Dockerfile 创建 Docker 镜像对比特性/方面docker commit使用Dockerfile创建速度快速简便适合快速实验和测试初始设置可能需要更多时间来编写和完善Dockerfile透明度缺乏透明度难以了解镜像是如何构建的高透明度所有步骤都被记录在Dockerfile中可重复性不利于重现相同的修改在不同环境中可能无法一致地重建可以在任何地方一致地重建镜像版本控制不利于版本控制因为没有明确的构建步骤易于纳入版本控制系统如Git便于追踪变更历史维护难度随着项目发展管理多个由commit创建的镜像变得复杂且容易出错更新镜像只需修改Dockerfile并重新构建易于维护安全性可能包含不必要的文件或配置增加潜在的安全风险更精确地控制哪些内容被包含在镜像中减少安全风险团队协作其他人很难理解镜像是如何构建出来的不利于团队协作团队成员可以清晰地了解镜像的构成及其依赖关系便于理解和贡献自动化集成难以与CI/CD 工具无缝集成支持自动化工具可以轻松集成到CI/CD 流程中适用场景适用于快速原型设计、临时任务或简单的更改适用于长期解决方案、生产环境以及需要高度可靠性和一致性的场景学习曲线学习成本低适合初学者需要一定的学习成本来掌握Dockerfile的编写规范和最佳实践四、总结在生产环境中强烈推荐使用Dockerfile来创建和管理Docker 镜像因为它能够提供更高的可靠性、透明度和可维护性