一、准备工作

准备一个用来制作镜像的容器。这里我们使用centos安装apache的容器。容器的制作方法如下

# 1.使用centos启动一个交互式容器

docker run -it centos:latest /bin/bash

# 2.安装apache

yum -y install httpd

# 3.退出容器

exit

操作步骤如下:

[root@localhost ~]# docker run -it centos:latest /bin/bash

[root@a554ba6ed056 /]# yum -y install httpd

Failed to set locale, defaulting to C.UTF-8

...

mod_http2-1.11.3-3.module_el8.2.0+307+4d18d695.x86_64

Complete!

[root@a554ba6ed056 /]# exit

[root@localhost ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

a554ba6ed056 centos:latest "/bin/bash" About a minute ago Exited (0) 33 seconds ago musing_wilson

这里能看到我们的容器ID为a554ba6ed056,就是用该容器,制作一个自己的镜像。

二、使用docker commit制作镜像

语法如下:

docker commit

示例如下:

[root@localhost ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

a554ba6ed056 centos:latest "/bin/bash" About a minute ago Exited (0) 33 seconds ago musing_wilson

[root@localhost ~]# docker commit a554ba6ed056 centos:apache

sha256:9cb1f6b6242fd29032772b9507505ed6fc953fbc31adf90e550af93b07823eed

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos apache 9cb1f6b6242f 9 seconds ago 255 MB

docker.io/centos latest 831691599b88 6 weeks ago 215 MB

[root@localhost ~]# docker run -it centos:apache /bin/bash

[root@61d98f417e87 /]# rpm -qa httpd

httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64

当前的镜像ID为a554ba6ed056,新的镜像的名称为centos:apache。

镜像创建成功后,进入镜像内部执行rpm -qa httpd,能正确的查询该软件包。

三、使用docker build制作镜像

使用docker build创建镜像时,需要使用Dockerfile文件自动化制作镜像。Dockerfile的执行过程,很像源码编译时./configure后产生的Makefile。

创建工作目录

# 1.创建并进入目录

mkdir /docker-build && cd /docker-build

# 2.创建自动化构建文件

touch Dockerfile

make 自动化编译时需要Makefile文件,自动化创建镜像时,也需要Dockerfile

[root@localhost ~]# mkdir /docker-build && cd /docker-build

[root@localhost docker-build]# touch Dockerfile

[root@localhost docker-build]# ls -a

. .. Dockerfile

编辑Dockerfile文件

在Dockerfile文件中编辑自己的自定义镜像的操作,可以包含用户指定软件的依赖等。

使用vim将下列内容写入到Dockerfile文件中。

FROM centos:latest

MAINTAINER

RUN yum -y install httpd

ADD start.sh /usr/local/bin/start.sh

ADD template /var/www/html/

CMD /usr/local/bin/start.sh

注释:

关键词

说明

FROM

基于哪个镜像

MAINTAINER

MAINTAINER镜像创建者

RUN

yum -y install httpd安装软件用

ADD

将文件[src]拷贝到新产生的镜像的文件系统对应的路径[dest]。所有拷贝到新镜像中的文件和文件夹权限为 0755,uid 和 gid 为 0

CMD

docker实例启动成功后,会执行CMD后面的命令。所以CMD后面一般跟需要开机启动的服务或脚本。一个Dockerfile 中只能有一条CMD命令,多条则只执行最后一条CMD

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

设置脚本

# 1. 设置启动脚本

echo "/usr/sbin/httpd -DFOREGROUND" > start.sh

# 2. 给启动脚本添加运行权限

chmod a+x start.sh

默认首页文件

# 创建模板目录

mkdir template

之后,将自己的index.html文件放置到template文件夹里面,我的index.html内容是hello world。

使用命令build来创建新的image

语法如下

docker build -t [父镜像名]:[镜像的tag] [Dockerfile文件所在路径]

-t:表示tag,镜像名

实例

docker build -t centos:httpd ./

[root@localhost docker-build]# docker build -t centos:httpd ./

Sending build context to Docker daemon 4.608 kB

Step 1/6 : FROM centos:latest

---> 831691599b88

Step 2/6 : MAINTAINER

---> Running in 01ae32a4e2fd

---> acf758c5234d

Removing intermediate container 01ae32a4e2fd

Step 3/6 : RUN yum -y install httpd

---> Running in d3ecdcc793d5

...

Step 4/6 : ADD start.sh /usr/local/bin/start.sh

---> 05d06ac82917

Removing intermediate container 4e5992822142

Step 5/6 : ADD template /var/www/html/

---> b7b8b4efdc5b

Removing intermediate container 9cf72dd07cf8

Step 6/6 : CMD /usr/local/bin/start.sh

---> Running in 17973309cca9

---> 7e03de04b894

Removing intermediate container 17973309cca9

Successfully built 7e03de04b894

[root@localhost docker-build]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos httpd 7e03de04b894 4 minutes ago 255 MB

docker.io/centos latest 831691599b88 6 weeks ago 215 MB

执行成功。内容挺多的,只保留了关键的步骤。列出所有的镜像后,能看到自己的TAG为httpd的镜像。

四、本地镜像

保存镜像到本地

保存镜像到tar包,语法:

docker save -o [导出的镜像名.tar] [本地镜像名]:[镜像标签]

实例

docker save -o docker-centos-httpd-image.tar centos:httpd

[root@localhost ~]# docker save -o docker-centos-httpd-image.tar centos:httpd

[root@localhost ~]# ls -a

. abc.txt .bash_history .bash_profile .cshrc docker-centos-httpd-image.tar .tcshrc .viminfo

.. anaconda-ks.cfg .bash_logout .bashrc def.txt .pki test.txt

保存成功,能看到本地的tar包docker-centos-httpd-image.tar。

使用本地镜像

语法:

docker load -i [本地tar包文件]

实例

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos httpd 7e03de04b894 20 minutes ago 255 MB

docker.io/centos latest 831691599b88 6 weeks ago 215 MB

[root@localhost ~]# docker rmi 7e03de04b894

Untagged: centos:httpd

Deleted: sha256:7e03de04b894cff137074740df18ac967e681ce022636707890b2ad1e896364d

...

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/centos latest 831691599b88 6 weeks ago 215 MB

[root@localhost ~]# docker load -i docker-centos-httpd-image.tar

d25caed0fdbe: Loading layer [==================================================>] 39.81 MB/39.81 MB

805e763ef330: Loading layer [==================================================>] 3.584 kB/3.584 kB

b1f7a1e7f61a: Loading layer [==================================================>] 3.584 kB/3.584 kB

Loaded image: centos:httpd

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos httpd 7e03de04b894 22 minutes ago 255 MB

docker.io/centos latest 831691599b88 6 weeks ago 215 MB

我这里使用的是同一个系统操作的。所以需要把之前的镜像删除,然后加载自己的本地镜像。加载后,可以成功看到显示了自己的加载后的镜像。

五、发布镜像

这里将镜像发布到hub.docker.com,docker的官方仓库。

需要到https://hub.docker.com/注册账号。

使用命令行登录到docker hub。

docker login -u houxin -p 123456

实例

[root@localhost ~]# docker login -u houxin -p 123456

Login Succeeded

发布镜像

docker push houxin/centos:httpd

如果直接这样发布,命令行可能提示找不到本地镜像。我们需要对我们发布的镜像加标签,标签为houxin/centos:httpd。然后再发布就行了。

docker tag centos:httpd houxin/centos:httpd

实例

[root@localhost ~]# docker tag centos:httpd houxin/centos:httpd

[root@localhost ~]# docker push houxin/centos:httpd

The push refers to a repository [docker.io/houxin/centos:httpd]

b1f7a1e7f61a: Pushed

805e763ef330: Pushed

d25caed0fdbe: Pushed

eb29745b8228: Mounted from library/centos

latest: digest: sha256:6c17e3ace7397a56f023bbc322e404bd6a4aa44492e3f5dd9b8852f312e9348e size: 1155

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

houxin/centos httpd 7e03de04b894 About an hour ago 255 MB

centos-httpd latest 7e03de04b894 About an hour ago 255 MB

centos httpd 7e03de04b894 About an hour ago 255 MB

docker.io/centos latest 831691599b88 6 weeks ago 215 MB

能看到自己的houxin/centos下的TAG为httpd的镜像。

下载镜像

docker pull houxin/centos:httpd

示例:

[root@localhost ~]# docker pull houxin/centos:httpd

Trying to pull repository docker.io/houxin/centos ...

httpd: Pulling from docker.io/houxin/centos

Digest: sha256:6c17e3ace7397a56f023bbc322e404bd6a4aa44492e3f5dd9b8852f312e9348e

Status: Downloaded newer image for docker.io/houxin/centos:httpd

docker 制作本地镜像_docker如何制作自己的镜像相关推荐

  1. docker公共存储库_Docker入门(2)——镜像结构和私有镜像库

    前面一篇教程里面,我们操练了一下如何在一台服务器上实际安装和使用docker.接下来我们来讨论一下和镜像有关的话题. Docker镜像的分层结构 前面我们也提到过,docker在宿主机上面并不是以一个 ...

  2. docker挂载本地目录_Docker:使用本地卷和tmpfs挂载

    卷是为Docker容器保留数据的首选方法. 在本文中,将展示如何创建和使用卷来实现持久性,以及如何使用tmpfs来实现临时存储. 最简单的说,创建和安装由本地目录支持的卷如下所示: # make ho ...

  3. linux 制作本地yum源

    一.需求: 因安装快速安装系统,选择了简易安装,确实系统软包,进入系统后手动根据需要安装. 二.制作本地yum源 2.1 把系统镜像中的Packages 目录下的rpm包拷贝到系统制定目录,这里放在/ ...

  4. docker 制作本地镜像_Docker系列-(2) 镜像制作与发布

    上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图 ...

  5. 系统制成docker镜像_Docker学习以及镜像制作流程

    一.何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  6. 系统制成docker镜像_docker 制作自己的镜像

    查看 docker的服务状态 systemctl status docker 如果没有启动的话,要先启动 docker 服务 systemctl start docker 制作自己的镜像 1.从远程仓 ...

  7. 系统制成docker镜像_docker镜像原理 镜像制作 dockerfile

    为什么一个centos镜像只有两百多兆,而tomcat镜像五百多兆 1.先说说操作系统 操作系统组成部分: 进程调度子系统 进程通信子系统 内存管理子系统 设备管理子系统 文件管理子系统 网络通信子系 ...

  8. Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像

    文章目录 Docker的安装 Docker的使用:docker run命令 查看本地存在的镜像:docker images命令 编写Dockerfile,制作容器镜像 docker build制作镜像 ...

  9. 使用rpm包制作本地镜像仓库和使用httpd发布镜像服务实现内网使用yum命令

    记录:313 场景:在CentOS 7.9操作系统,使用reposync命令下载rpm包:使用createrepo把rpm包制作成本地镜像仓库:使用httpd发布本地镜像服务:实现内网环境使用yum命 ...

最新文章

  1. Binary Tree Inorder Traversal
  2. C++ Opengl绘制3D源码
  3. SAP S/4HANA OData Mock Service 介绍
  4. 人类一败涂地邀请好友一直显示连接服务器,人类一败涂地怎么邀请好友 局域网创建房间方法图文教学-游侠网...
  5. 2021年中国独角兽企业发展研究报告
  6. VForum07之四:布道中国 解读本地化策略
  7. 带注释源码php,php的注释方法
  8. 路由映射-route-map之一路由再发布
  9. 响应头中content-type常用的类型有哪些?
  10. (日常搬砖)之environment.yml的使用
  11. ❤️❤️固高运动控制卡的相关知识点
  12. Unity 使用谷歌内购的密钥( license key )
  13. CodeForces 961G Partitions 题解
  14. 关于被3个搞物理的“颠覆”了且数学天才陶哲轩“开始压根不相信”的数学常识的算法实现与理解
  15. 惯性力偶矩公式中j_理论力学(I)习题详解达朗贝尔原理.pdf
  16. 几种将将虚幻引擎内容流送到多个平台的推流方案比较
  17. 恭喜元宇宙产业委秘书长何超、执行秘书长武艳芳成为南京河西CBD发展大使
  18. UEFI学习2-OVMF的制作和使用
  19. 小米校招编程题:数组乘积、异形数、朋友圈
  20. 普中科技51单片机的ADC采样电位器功能实现以及特点

热门文章

  1. 【工具】福昕阅读器快捷键
  2. indesign如何画弧线_indesign如何画弧线_动漫人物衣服怎么画?教你各种动漫服饰的画法...
  3. 计算机在职研究生学什么专业好就业工资高,就业率较高的六大在职研究生专业,你知道几个?...
  4. IDEA安装过程(2019 3.3版本)
  5. 拼多多无货源————新店的运营和上货助手
  6. Mac OS 磁盘空间不释放(删除文件空间不恢复)
  7. 巴别鸟是如何用2个月时间让上市公司“爱上”它的?
  8. 前端微信签名验证工具_微信JSSDK签名
  9. 什么是MT4平台?手机MT4平台软件操作说明介绍
  10. 学术论文查重经验分享