2021Docker容器技术全解-自定义镜像Docker(4)
一手工制作自定义镜像:
1先创建一个读写层(即容器):
[root@web01 ~]#docker run -it centos:latest
[root@72d5b8ad9c9b /]#
2进入容器配置yum源:
[root@72d5b8ad9c9b /]# # yum install wget
[root@b8e5ea757de4 ~]# mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo.backup
[root@b8e5ea757de4 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
[root@b8e5ea757de4 ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@b8e5ea757de4 ~]# yum makecache
3安装常用工具
[root@72d5b8ad9c9b yum.repos.d]# yum install net-tools iproute psmisc vim bash-completion tree
4清理缓存
[root@b8e5ea757de4 ~]# rm -f *.cfg
[root@b8e5ea757de4 ~]# yum clean all
[root@b8e5ea757de4 ~]# exit
5把容器打包成一个新的容器和标签:
[root@web01 ~]#docker commit b8e5ea757de4 mycentos8:v20211229
sha256:7a7a68dd2bb82db0cfc276ee58b7f351de3ff4a58652f6c7837c671418deec46
[root@web01 ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos8 v20211229 7a7a68dd2bb8 28 seconds ago 277MB
centos latest 5d0da3dc9764 3 months ago 231MB
6查看一下我们制作的镜像一共有几层:
[root@web01 ~]#docker history mycentos8:v20211229 IMAGE CREATED CREATED BY SIZE COMMENT 7a7a68dd2bb8 5 minutes ago /bin/bash 46.1MB 5d0da3dc9764 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:805cb5e15fb6e0bb0… 231MB
7验证:
[root@web01 ~]#docker run -it mycentos8:v20211229 [root@11537d3da383 /]# 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 696 (696.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 [root@11537d3da383 /]# [root@11537d3da383 /]# yum repolist Failed to set locale, defaulting to C.UTF-8 Repository extras is listed more than once in the configuration repo id repo name AppStream CentOS-8 - AppStream - mirrors.aliyun.com appstream CentOS Linux 8 - AppStream base CentOS-8 - Base - mirrors.aliyun.com extras CentOS-8 - Extras - mirrors.aliyun.com [root@11537d3da383 /]#
二使用脚本文件制作镜像(dockerfile)
Dockerfile语法:
FROM:基础镜像
RUN:制作镜像时执行的命令,可以有多个
ADD:复制文件到镜像,自动解压
COPY:复制文件到镜像,不解压
CMD:容器启动时执行的命令,仅可以有一条CMD
1查看我们手动自定义镜像的历史:
[root@web01 ~/aa]#docker run -it mycentos8:v20211229
[root@d886612177c2 /]# history
1 cd /etc/repos.d
2 cd /etc/repos.d/
3 cd /etc/yum.repos.d/
4 yum install -y wget
5 pwd
6 cd ~
7 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
8 ls /etc/yum.repos.d/
9 mv /etc/yum.repos.d/CentOS-Linux-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
10 mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo.backup
11 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
12 sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
13 yum makecache
14 yum install net-tools iproute psmisc vim bash-completion tree
15 ls
16 rm -f *.cfg
17 yum clean all
18 exit
19 history
[root@d886612177c2 /]# exit
exit
2编写dockerfile文件:
[root@web01 ~]#mkdir aa
[root@web01 ~]#cd aa
[root@web01 ~/aa]#touch Dockerfile
[root@web01 ~/aa]#vim Dockerfile
FROM centos:latest
RUN cd /etc/yum.repos.d/ && yum install -y wget && wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && yum makecache && yum install net-tools iproute psmisc vim bash-completion tree -y && rm -f *.cfg && yum clean all
3使用脚本构建镜像
[root@web01 ~/aa]#docker build -t newcentos8:v20211229 .
4测试:
[root@web01 ~]#docker run -it newcentos8:v20211229 [root@3654e40c242d /]# 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 9 bytes 766 (766.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 [root@3654e40c242d /]# exit exit [root@web01 ~]#