『现学现忘』Docker基础 — 35、实战:自定义CentOS镜像
1)目标:自定义镜像
wokong_centos
。2)所用到的保留字指令:
FROM
:基础镜像,当前新镜像是基于哪个镜像的。MAINTAINER
:镜像维护者的姓名和邮箱地址。RUN
:容器构建时需要运行的命令。EXPOSE
:当前容器对外暴露出的端口(端口映射)。WORKDIR
:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点,也就是pwd
的位置。ENV
:用来在构建镜像过程中设置环境变量。CMD
:指定一个容器启动时要运行的命令。3)新Docker命令:
docker history
,查看镜像的变更历史。
1、前提说明
我们运行官方的CentOS镜像。
# 1.查看本地Docker镜像
[root@192 home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB
# 2.查看正确运行的Docker容器,此时没有容器正在运行。
[root@192 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 3.启动centos镜像
[root@192 home]# docker run -it centos
[root@ed92adeebf72 /]#
# 4.在容器中执行如下操作
# 4.1 查看容器当前工作目录,在根目录
[root@ed92adeebf72 /]# pwd
/
# 4.2 使用vim命令编辑文件,发现没有vim命令
[root@ed92adeebf72 /]# vim abc.txt
bash: vim: command not found
# 4.3 查看Docker容器的IP地址,发现无法使用ifconfig命令。
[root@ed92adeebf72 /]# ifconfig
bash: ifconfig: command not found
出现以上问题是因为,CentOS方镜像为了保证镜像的大小,是使用最小启动系统的精简版Linux系统,其中会有很多命令没有。
所以,自定义wokong_centos
镜像的目的,使我们自己的镜像具备如下:
- 登陆后的默认路径为
/tmp
。 - 可以使用
vim
编辑器。 - 支持查看网络配置
ifconfig
命令。
2、编写Dockerfile文件
在宿主机的home
目录中创建mydockerfile
文件夹,用于存放我们编写的Dockerfile文件。
# 创建mydockerfile文件夹
[root@192 home]# ll
总用量 0
[root@192 home]# mkdir mydockerfile
[root@192 home]# ll
总用量 0
drwxr-xr-x. 2 root root 6 3月 20 14:59 mydockerfile
# 创建dockerfile文件:Dockerfile_centos
# 作为wokong_centos镜像的dockerfile文件。
[root@192 mydockerfile]# vim Dockerfile_centos
提示:Dockerfile文件可以自定义。
Dockerfile文件内容如下:
FROM centos # 继承了本地的centos镜像
MAINTAINER wukong<wukong6688@126.com> # 镜像作者的名字和邮箱信息
ENV MYPATH /tmp # 配置环境变量,是一个key:value模式的键值对存储。也可以用=号。
WORKDIR $MYPATH # 定义容器初始工作目录,并引用了上边的ENV变量。
RUN yum -y install vim # 容器构建时需要运行的命令。
RUN yum -y install net-tools
EXPOSE 80 # 暴露80端口到服务器
CMD echo "success---------ok"
CMD /bin/bash
说明:
我自定义的
wokong_centos
镜像是以CentOS官方镜像为基础进行修改的。而CentOS官方镜像的Base镜像是
FROM scratch
。Docker Hub中99%的镜像都是通过
scratch
镜像,作为最底层的镜像,然后安装和配置出所需要的软件,最后得到我们需要的镜像。(
scratch
镜像是一个空的镜像,可以真正的从零开始构建属于自己的镜像。)
3、构建镜像
执行命令:docker build -f Dockerfile文件路径 -t 新镜像名字:TAG .
安装过程如下:
# 完整安装过程
[root@192 mydockerfile]# docker build -f /home/mydockerfile/Dockerfile_centos \
> -t wokong_centos:1.6 .
Sending build context to Docker daemon 2.048kB
Step 1/9 : FROM centos
---> 300e315adb2f
Step 2/9 : MAINTAINER wukong<wukong6688@126.com>
---> Running in 38481c4819a3
Removing intermediate container 38481c4819a3
---> 96a9036d8cad
Step 3/9 : ENV MYPATH /tmp
---> Running in bb236291ff01
Removing intermediate container bb236291ff01
---> 6cf48c1a740a
Step 4/9 : WORKDIR $MYPATH
---> Running in 15ce861a59c1
Removing intermediate container 15ce861a59c1
---> 537898233556
Step 5/9 : RUN yum -y install vim
---> Running in 99f06b342bf8
CentOS Linux 8 - AppStream 1.8 MB/s | 6.3 MB 00:03
CentOS Linux 8 - BaseOS 1.7 MB/s | 2.3 MB 00:01
CentOS Linux 8 - Extras 13 kB/s | 9.2 kB 00:00
Last metadata expiration check: 0:00:01 ago on Sat Mar 20 08:10:25 2021.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 157 kB/s | 39 kB 00:00
(2/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 3.0 MB/s | 1.4 MB 00:00
(3/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 181 kB/s | 48 kB 00:00
(4/5): which-2.21-12.el8.x86_64.rpm 122 kB/s | 49 kB 00:00
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 5.7 MB/s | 6.3 MB 00:01
--------------------------------------------------------------------------------
Total 1.5 MB/s | 7.8 MB 00:05
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64
Complete!
Removing intermediate container 99f06b342bf8
---> c58485da8447
Step 6/9 : RUN yum -y install net-tools
---> Running in a5e4191e9fb2
Last metadata expiration check: 0:00:19 ago on Sat Mar 20 08:10:25 2021.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 1.7 MB/s | 322 kB 00:00
--------------------------------------------------------------------------------
Total 195 kB/s | 322 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Installed:
net-tools-2.0-0.52.20160912git.el8.x86_64
Complete!
Removing intermediate container a5e4191e9fb2
---> 5e7dba859606
Step 7/9 : EXPOSE 80
---> Running in e5b3c11088d3
Removing intermediate container e5b3c11088d3
---> 5d8199d84409
Step 8/9 : CMD echo "success---------ok"
---> Running in 0d8b83e6008b
Removing intermediate container 0d8b83e6008b
---> 94ff44f5e94c
Step 9/9 : CMD /bin/bash
---> Running in 31a13253e359
Removing intermediate container 31a13253e359
---> 6441f63090d4
Successfully built 6441f63090d4
Successfully tagged wokong_centos:1.6
# 查看本地Docker镜像。
[root@192 mydockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wokong_centos 1.6 6441f63090d4 10 seconds ago 291MB
centos latest 300e315adb2f 3 months ago 209MB
我们可以看到新构建的wokong_centos
镜像,比官方CentOS镜像多了80多M。
说明:
docker build
命令最后有一个.
,这个.
有的说表示当前目录,有的说表示将当前目录的上下文路径中使用Dockerfile构建。安装后一种说法,上面的构建命令中,
.
也可以替换成/home/mydockerfile/
。(我尝试了,可行)但你就记住是固定写法就好了。
4、运行镜像
我们把刚刚构建的wokong_centos
镜像启动起来。
# 启动进入wokong_centos容器
[root@192 mydockerfile]# docker run -it wokong_centos:1.6
[root@55e0b688c9fb tmp]#
# 1.查看默认工作路径
[root@55e0b688c9fb tmp]# pwd
/tmp
# 2.查看当前容器IP
[root@55e0b688c9fb tmp]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 8 bytes 656 (656.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 3.查看是否可以使用vim编辑器
[root@55e0b688c9fb tmp]# vim --help
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 18 2020 15:49:08)
usage: vim [arguments] [file ..] edit specified file(s)
or: vim [arguments] - read text from stdin
or: vim [arguments] -t tag edit file where tag is defined
or: vim [arguments] -q [errorfile] edit file with first error
我们可以看到,进入容器的默认工作目录变成了/tmp
目录了,而不是之前根目录了。
同时ifconfig
命令,和vim编辑器都可以使用了。
5、列出镜像的变更历史
命令:docker history 镜像名/ID
。
作用:可以列出本地镜像的变更历史。
示例:
# 查看本地Docker镜像
[root@192 mydockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wokong_centos 1.6 6441f63090d4 17 minutes ago 291MB
centos latest 300e315adb2f 3 months ago 209MB
# 查看wokong_centos镜像的变更历史
[root@192 mydockerfile]# docker history wokong_centos:1.6
IMAGE CREATED CREATED BY SIZE COMMENT
6441f63090d4 18 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
94ff44f5e94c 18 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
5d8199d84409 18 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
5e7dba859606 18 minutes ago /bin/sh -c yum -y install net-tools 23.3MB
c58485da8447 18 minutes ago /bin/sh -c yum -y install vim 58MB
537898233556 18 minutes ago /bin/sh -c #(nop) WORKDIR /tmp 0B
6cf48c1a740a 18 minutes ago /bin/sh -c #(nop) ENV MYPATH=/tmp 0B
96a9036d8cad 18 minutes ago /bin/sh -c #(nop) MAINTAINER wukong<wukong6… 0B
300e315adb2f 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB
『现学现忘』Docker基础 — 35、实战:自定义CentOS镜像的更多相关文章
- 『现学现忘』Docker基础 — 41、将本地镜像推送到阿里云
目录 1.准备工作 2.阿里云容器镜像仓库的使用 (1)创建命名空间 (2)创建容器镜像 (3)查看阿里云镜像仓库的信息 3.将本地Docker镜像推送到阿里云 (1)登陆阿里云 (2)给镜像生成版本 ...
- 『现学现忘』Docker基础 — 9、Docker简介
目录 1.什么是Docker? 2.Docker的出现解决了什么问题? 3.Docker的特别之处 4.Docker相关网站 1.什么是Docker? 2010年dotCloud公司在旧金山成立,PA ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- 『现学现忘』Docker基础 — 27、Docker镜像的commit操作
目录 1.commit命令作用 2.commit命令说明 3.示例演示 1.commit命令作用 在运行的容器中,并在镜像的基础上做了一些修改,我们希望保存起来,封装成一个新的镜像,方便我们以后使用, ...
- 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...
- 『现学现忘』Docker基础 — 34、DockerFile文件详解
目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...
- 『现学现忘』Docker基础 — 10、Docker的安装
目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...
- 『现学现忘』Docker基础 — 29、Docker容器数据卷的应用
目录 1.验证容器和宿主机之间数据共享 2.容器停止退出后,主机修改后数据是否同步 3.带只读权限的挂载数据卷 1.验证容器和宿主机之间数据共享 通过上面的操作,接下来我们演示一下通过数据卷的挂载,实 ...
- 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理
目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...
随机推荐
- JMM之Java中锁概念的分类总结
在Java的并发编程中不可避免的涉及到锁.从不同维护可以将锁进行不同的分类,如下: 1.乐观锁和悲观锁(根据读写操作的比例划分) 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数 ...
- 从命令模式的维度理解Spring 之Application Event
Spring的事件(Application Event)为Bean与Bean之间的信息通讯提供了支持.当一个Bean处理完一个任务之后,希望另一Bean指定并能做相应的处理,这时我们就需要让另外一个B ...
- 当gitlab的数据库坏了,或者其他的组件坏了,修复教程。
一般企业的gitlab都承载着多个项目的源码和提交记录 如果gitlab的数据库 PostgreSQL 坏掉了,基本很难修复,那这是不是意味着源码丢失了呢. 本文章只针对 gitlab传统存储方式的修 ...
- python3爬取中国药学科学数据
今天我表弟说帮忙爬一下中国药学科学数据,导出json格式给他.一共18万条数据. 看了一下网站http://pharm.ncmi.cn/dataContent/admin/index.jsp?subm ...
- python中继承的语法及案列
案例: 1 class Chinese: # 类的创建,类名首字母大写 2 eye = 'black' # 类属性的创建 3 4 def eat(self): # 实例方法创建 5 print('吃饭 ...
- IP网络主动测评系统
一.IT网络运维面临的挑战 1. 网络性能可视化 • 与公有云和SaaS平台连接的可靠性 • 广域网线路性能 • 互联网专线性能 2.诊断工具 • 现场无IT工程师覆盖 • 诊断的人力费用 • 网络与 ...
- Dashboard究竟是什么,它在数据展示上的优势何在?
相信很多人在做数据分析工作的时候都遇到这种情况,辛辛苦苦做出来的数据报表老板看了嫌弃不够直观.生动,客户看了嫌弃不够高大上.这个时候不妨尝试一下使用Dashboard来展示报表数据,可能有些人对Da ...
- Windows操作下各种工具常用快捷键
目录 Windows快捷键 谷歌浏览器快捷键 Nodepad++快捷键 Mobaxterm快捷键 Markdown快捷键 Windows快捷键 Win + E打开文件系统 Win + L锁屏 谷歌浏览 ...
- C# CLR简介
(一)CLR介绍 CLR是一个可以由多编程语言使用的运行时,CLR的核心功能:内存管理,程序集加载,安全性,异常处理,线程同步等等.可以被很多属于微软系列的开发语言使用. 事实上,在运行时,CLR根 ...
- Service层抽象规范
Service层是整个web系统的负责业务逻辑一块,最有必要实现抽象,Service层要达到复用性,低耦合性.那么该如何抽象呢?一般遵循以下原则 1.单一职责(SRP) 2.开放-封闭(OCP) 3. ...