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 ~]#

 

posted @ 2021-12-29 15:02  linuxTang  阅读(76)  评论(0编辑  收藏  举报