Docker 镜像制作的两种方法

如果曾经做过 VM 管理员,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器;而作为一名研发人员,则可以将镜像理解为类(Class),下面为大家详细讲解一下Docker镜像的制作方法。

Docker Image 的制作两种方法

方法 1:docker commit #保存 container 的当前状态到 image 后,然后生成对应的 image
方法 2:docker build #使用 Dockerfile 文件自动化制作 image

方法一:docker commit

创建一个安装好 apache 工具的容器镜像

[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB
[root@Docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@Docker ~]# docker run -it centos:latest /bin/bash
[root@1b96e68a3cce /]#
[root@1b96e68a3cce /]# yum -y install httpd #在 container 中安装 apache 软件包
[root@1b96e68a3cce /]# exit

查看 images 列表

[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB

根据容器当前状态做一个 image 镜像:创建一个安装了 apache 工具的 centos 镜像

语法: docker commit “container 的 ID” 或 “image_name”

查看容器 ID

[root@Docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
1b96e68a3cce        centos:latest       "/bin/bash"              3 minutes ago       Exited (0) 2 minutes ago                          awesome_hypatia
607752360adf        centos:latest       "/bin/bash -c 'while…"   18 minutes ago      Exited (137) 12 minutes ago                       brave_fermi
0a297ff99af8        centos:latest       "/bin/bash"              22 minutes ago      Exited (1) 20 minutes ago                         ecstatic_yonath
efb4af688330        centos:latest       "/bin/bash"              24 minutes ago      Exited (0) 23 minutes ago                         epic_mcclintock
[root@Docker ~]# docker commit 1b96e68a3cce centos:apache
sha256:b8822ec8a7bbb325793e7908e355180be82a49481cff197661fb5d0da5872e88
[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              apache              b8822ec8a7bb        9 seconds ago       280MB
centos              latest              470671670cac        4 months ago        237MB

使用新创建的 centos:apache 镜像,生成一个容器实例

[root@Docker ~]# docker run -it centos:apache /bin/bash
[root@e4c295d27581 /]# rpm -qa httpd
httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64

看到httpd软件名称说明基于 apache 镜像的容器创建成功

方法二:通过:docker build 创建一个基于 centos 的 httpd web 服务器镜像

使用 docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像 Dockerfile 有点像源码编译时./configure 后产生的 Makefile

1、创建工作目录

[root@Docker ~]# mkdir /docker-build
[root@Docker ~]# cd /docker-build
[root@Docker docker-build]# touch Dockerfile
[root@Docker docker-build]# ls
Dockerfile
注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile

2、编辑 Dockerfile

Dockerfile 用来创建一个自定义的 image,包含了用户挃定的软件依赖等。
[root@Docker docker-build ]# vim Dockerfile
FROM centos:latest
MAINTAINER
RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
CMD echo hello world

注释

FROM centos:latest # FROM 基于哪个镜像
MAINTAINER  # MAINTAINER 镜像创建者
RUN yum -y install httpd #RUN 安装软件用
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
# ADD 将文件拷贝到新产生的镜像的文件系统对应的路径。所有拷贝到新镜像中的
文件和文件夹权限为 0755,uid 和 gid 为 0
CMD echo hello world #container 启动时执行的命令或启动服务,但是一个 Dockerfile 中只能有一条 CMD 命令,有多条则另执行最后一条 CMD

3、创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件

[root@Docker docker-build ]# echo "#!/bin/bash" >> start.sh
[root@Docker docker-build ]# echo "/usr/sbin/httpd -DFOREGROUND" >> start.sh
注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd

[root@Docker docker-build ]# chmod a+x start.sh

创建 index.html
[root@Docker docker-build ]# echo "docker image build  test from jaking" > index.html

4、使用命令 build 来创建新的 image

语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径 -t :表示 tag,镜像名

例:使用命令 docker build 来创建新的 image,并命名为 centos:httpd

[root@Docker docker-build]# ls
Dockerfile  index.html  start.sh
[root@Docker docker-build]# docker build -t centos:httpd ./# 注: ./ 表示当前目录,另外你的当前目录下要包含 Dockerfile
Sending build context to Docker daemon  4.096kB
Step 1/5 : FROM centos:latest
---> 470671670cac
Step 2/5 : MAINTAINER
---> Running in 0180810d2ab3
Removing intermediate container 0180810d2ab3
---> 5b9af0184bcf
Step 3/5 : RUN yum -y install httpd
---> Running in 8f5c114649ed
CentOS-8 - AppStream                            228 kB/s | 7.0 MB     00:31    
CentOS-8 - Base                                 547 kB/s | 2.2 MB     00:04    
CentOS-8 - Extras                               431  B/s | 5.9 kB     00:14    
Dependencies resolved.
================================================================================
Package           Arch   Version                               Repo       Size
================================================================================
Installing:
httpd             x86_64 2.4.37-16.module_el8.1.0+256+ae790463 AppStream 1.7 M
Installing dependencies:
apr               x86_64 1.6.3-9.el8                           AppStream 125 k
apr-util          x86_64 1.6.1-6.el8                           AppStream 105 k
centos-logos-httpd
                  noarch 80.5-2.el8                            AppStream  24 k

...省略部分输出信息...                

Complete!
Removing intermediate container 8f5c114649ed
---> 040b5f229962
Step 4/5 : ADD start.sh /usr/local/bin/start.sh
---> 11a106005031
Step 5/5 : ADD index.html /var/www/html/index.html
---> 85b4a3657ced
Successfully built 85b4a3657ced
Successfully tagged centos:httpd

查看 images 列表

[root@Docker docker-build]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              httpd               85b4a3657ced        45 seconds ago      280MB
centos              apache              b8822ec8a7bb        20 minutes ago      280MB
centos              latest              470671670cac        4 months ago        237MB
# 注:docker 镜像=应用/程序+库

运行新生成的镜像

[root@Docker docker-build]# docker run -it centos:httpd /bin/bash
[root@1188a43a4585 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@1188a43a4585 /]# rpm -qa httpd
httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64
[root@1188a43a4585 /]# exitexit
[root@Docker docker-build]#

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/220375.html<

(0)
运维的头像运维
上一篇2025-04-14 13:16
下一篇 2025-04-14 13:18

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注