一 安装部署

配置软件仓库并安装docker-ce

#利用阿里云部署软件仓库
[root@docker-node1 ~]# cat > /etc/yum.repos.d/docker.repo << EOF
[docker1]
name = docker
baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/
gpgcheck = 0
EOF

[root@docker-node1 ~]# dnf makecache
刷新本地的 YUM/DNF 软件源缓存,让系统知道最新的软件列表。

[root@docker-node1 ~]# dnf search  docker
[root@docker-node1 ~]# dnf install docker-ce -y

[root@docker-node1 ~]# vim /lib/systemd/system/docker.service
15   ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
--iptables=true 是强制让 Docker 管理防火墙规则,解决容器无法上网、端口映射失败的问题。

开机自动加载 br_netfilter 内核模块
[root@docker10 yum.repos.d]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
立即加载模块(不用重启)
[root@docker10 yum.repos.d]# modprobe -a br_netfilter

让系统「立即、永久」加载所有目录下的内核参数配置文件,不用重启服务器就能生效。
[root@docker10 yum.repos.d]# sysctl --system


[root@docker10 yum.repos.d]# 
[root@docker10 yum.repos.d]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@docker10 yum.repos.d]# 

二.docker常用命令

[root@docker10 ~]# ls
anaconda-ks.cfg  busy-latest.tar  game2048-latest.tar  mario-latest.tar  nginx-1.26.tar
[root@docker10 ~]# docker load -i game2048-latest.tar
Loaded image: timinglee/game2048:latest
[root@docker10 ~]# docker load -i busy-latest.tar
docker load -i mario-latest.tar
docker load -i nginx-1.26.tar
Loaded image: busybox:latest
Loaded image: timinglee/mario:latest
Loaded image: nginx:1.26
[root@docker10 ~]# docker images
                                                                                                                                                                             i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
busybox:latest              b3255e7dfbcd        6.7MB         2.22MB        
nginx:1.26                  41b194461e4b        279MB         75.2MB        
timinglee/game2048:latest   8a34fb9cb168       77.2MB         17.8MB        
timinglee/mario:latest      7758988210df        298MB         73.7MB    
    
#将外部的端口80映射到容器的8080
[root@docker10 ~]# docker run -d -p 80:80 timinglee/game2048:latest
d333e906c948ed6c920c7ba17143d239eda490aea13e5e0b32731a01c1a7e1d5
[root@docker10 ~]# 
#查看容器的端口信息
[root@docker10 ~]# docker history timinglee/mario:latest
IMAGE          CREATED        CREATED BY                                       SIZE      COMMENT
7758988210df   10 years ago   /bin/sh -c #(nop) CMD ["python3" "-m" "http.…   0B        
<missing>      10 years ago   /bin/sh -c #(nop) EXPOSE 8080/tcp                0B        
<missing>      10 years ago   /bin/sh -c #(nop) WORKDIR /app                   0B        
<missing>      10 years ago   /bin/sh -c #(nop) COPY dir:02930d36f63824e72…   10.1MB    
<missing>      10 years ago   /bin/sh -c apt-get install -y python3            0B        
<missing>      10 years ago   /bin/sh -c #(nop) MAINTAINER Pavel 'PK' Kami…   0B        
<missing>      10 years ago   /bin/sh -c #(nop) CMD ["/bin/bash"]              0B        
<missing>      10 years ago   /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   4.1kB     
<missing>      10 years ago   /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli…   229kB     
<missing>      10 years ago   /bin/sh -c #(nop) ADD file:5a3f9e9ab88e725d6…   214MB     
[root@docker10 ~]# 

# 查看正在运行的容器
[root@docker10 ~]# docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED          STATUS          PORTS                                          NAMES
d333e906c948   timinglee/game2048:latest   "/bin/sh -c 'sed -i …"   49 minutes ago   Up 49 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp, 443/tcp   dreamy_lewin
[root@docker10 ~]# docker rm -f d333e906c948
d333e906c948

[root@docker10 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker10 ~]# 
#镜像查看
[root@docker-node1 ~]# docker images                                                      IMAGE   ID             DISK USAGE   CONTENT SIZE   EXTRA

#搜索镜像
[root@docker-node1 ~]# docker search  nginx
NAME    DESCRIPTION               STARS         OFFICIAL
nginx   Official build of Nginx.   21206

#下载镜像
[root@docker-node1 ~]# docker pull nginx

[root@docker-node1 ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
61dfb50712f5: Pull complete
96cfb76e59bd: Download complete
Digest: sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

#查看镜像提交历史
[root@docker-node1 ~]# docker history busybox:latest
IMAGE          CREATED         CREATED BY                          SIZE      COMMENT
b3255e7dfbcd   17 months ago   BusyBox 1.37.0 (glibc), Debian 13   4.49MB

[root@docker-node1 ~]# docker images
                                                                                                i Info →   U  In Use
IMAGE            ID             DISK USAGE   CONTENT SIZE   EXTRA
busybox:latest   b3255e7dfbcd        6.7MB         2.22MB
nginx:1.26       41b194461e4b        279MB         75.2MB


#导出镜像
[root@docker-node1 ~]# docker save -o game2048-latest.tar timinglee/game2048:latest

#删除镜像
[root@docker-node1 ~]# docker rmi timinglee/mario:latest

#导入镜像
[root@docker-node1 ~]# docker load  -i game2048-latest.tar

#运行镜像
[root@docker-node1 ~]# docker run -d   --name web nginx:1.26
f3e369725fab95d48779eaa556941b735aae841efe09bb1d28bca89923c44ee4

#查看运行容器
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED         STATUS         PORTS     NAMES
f3e369725fab   nginx:1.26   "/docker-entrypoint.…"   2 seconds ago   Up 2 seconds   80/tcp    web

#查看所有容器
[root@docker-node1 ~]# docker ps -a

#交互模式运行容器
[root@docker-node1 ~]# docker run  -it --name busybox busybox:latest

#交互运行容器默认退出后会停止
[root@docker-node1 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND                   CREATED              STATUS                      PORTS     NAMES
d1b27167a247   busybox:latest   "sh"                      50 seconds ago       Exited (0) 19 seconds ago             busybox


#运行停止的容器
[root@docker-node1 ~]# docker start  busybox
root@docker-node1 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND                   CREATED         STATUS         PORTS     NAMES
d1b27167a247   busybox:latest   "sh"                      2 minutes ago   Up 1 second              busybox


#退出交互容器不对其停止
[root@docker-node1 ~]# docker attach busybox
/ # [ctrl]+[p]+[q]   #按键
[root@docker-node1 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND                   CREATED         STATUS              PORTS     NAMES
d1b27167a247   busybox:latest   "sh"                      3 minutes ago   Up About a minute             busybox

#查看容器信息
#docker inspect + 镜像名称查看镜像的基本信息
[root@docker-node1 ~]# docker inspect busybox

#容器控制
[root@Docker-node1 ~]# docker stop busybox			#停止容器
[root@Docker-node1 ~]# docker kill busybox			#杀死容器,可以使用信号
[root@Docker-node1 ~]# docker start busybox			#开启停止的容器


#在已经运行的容器中执行指定命令
[root@docker-node1 ~]# docker exec busybox touch /root/haha		#非交互
[root@docker-node1 ~]# docker exec  busybox  ls /root
file1
file2
haha

[root@docker-node1 ~]# docker exec  -it  web /bin/bash			#交互的
root@f3e369725fab:/#

#容器删除
[root@docker-node1 ~]# docker rm -f busybox
busybox
[root@docker-node1 ~]# docker stop web
web
[root@docker-node1 ~]# docker rm  web
web

#内容提交
[root@docker-node1 ~]# docker run  -it --name test busybox:latest
/ # touch /root/file
/ # ls /root/
file
ctrl+qp 退出当前环境并继续运行容器
#-m 添加备注
[root@docker-node1 ~]# docker commit -m "add file" test  busybox-file:latest
sha256:31a32089d241d025a5a54f144f15319cc6fb55be1b41d049f8905a472d5a028e
[root@docker-node1 ~]# docker images
                                                                                                i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
busybox-file:latest         31a32089d241       6.71MB         2.21MB

[root@docker-node1 ~]# docker run  -it --name test busybox-file:latest


#文件在镜像中的复制
[root@docker-node1 ~]# docker run  -it --name test busybox-file:latest
root@docker-node1 ~]# docker cp  test:/root/file  /mnt
Successfully copied 1.54kB to /mnt
[root@docker-node1 ~]# ls /mnt/
file  hgfs


[root@docker-node1 ~]# docker cp   /etc/passwd  test:/root/
Successfully copied 3.07kB to test:/root/
[root@docker-node1 ~]# docker exec test  ls /root
file
passwd

三.熟悉镜像构建是用到的参数

#建立构建目录
[root@docker-node1 ~]# mkdir docker
[root@docker-node1 ~]# cd docker/

#编写构建规则文件
[root@docker-node1 docker]# vim Dockerfile

#FROM
FROM busybox:latest

#COPY
[root@docker-node1 docker]# echo timinglee > timinglee
[root@docker-node1 docker]# cat timinglee
timinglee

[root@docker-node1 docker]# vim Dockerfile
FROM busybox:latest
COPY timinglee /root

#如果构建文件名不是Dockerfile,用-f 指定文件
#构建命令
[root@docker-node1 docker]# docker build -t timinglee:v1 .
[+] Building 0.2s (7/7) FINISHED                                                          docker:default
 => [internal] load build definition from Dockerfile                                                0.0s
 => => transferring dockerfile: 78B                                                                 0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                                   0.0s
 => [internal] load .dockerignore                                                                   0.0s
 => => transferring context: 2B                                                                     0.0s
 => [internal] load build context                                                                   0.0s
 => => transferring context: 46B                                                                    0.0s
 => [1/2] FROM docker.io/library/busybox:latest@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac9  0.0s
 => => resolve docker.io/library/busybox:latest@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac9  0.0s
 => [2/2] COPY timinglee /root                                                                      0.0s
 => exporting to image                                                                              0.1s
 => => exporting layers                                                                             0.0s
 => => exporting manifest sha256:3e240075ea92a386ccc7b8249faf4fbc049465ac3e490ddb9c0b6c759a35a2be   0.0s
 => => exporting config sha256:16a6f0015605d0df6a11f1c609afba2c28bdf3d984305922b440e52cd76f9dc2     0.0s
 => => exporting attestation manifest sha256:74b85b3b7cbdaa72964271d4d7c0fc371c7e267bbf6070df2628f  0.0s
 => => exporting manifest list sha256:0a7e32bc130bf9dbfc457442d8bc653987c1a642f86858f6bc233dc120d6  0.0s
 => => naming to docker.io/library/timinglee:v1                                                     0.0s
 => => unpacking to docker.io/library/timinglee:v1   

ENV定义变量

ENTRYPOINT 不可覆盖

[root@docker10 ~]# mkdir docker
[root@docker10 ~]# cd docker/
[root@docker10 docker]# vim Dockerfile
[root@docker10 docker]# vim Dockerfile

FROM busybox:latest
MAINTAINER lee@timinglee.org
ENV NAME xier
ENTRYPOINT echo $NAME
[root@docker10 docker]# vim Dockerfile

#.表示当前目录
[root@docker10 docker]# docker build -t xier:v1 .
[+] Building 0.3s (5/5) FINISHED                                                            docker:default
 => [internal] load build definition from Dockerfile                                                  0.0s
 => => transferring dockerfile: 122B                                                                  0.0s
 => WARN: MaintainerDeprecated: Maintainer instruction is deprecated in favor of using label (line 2  0.0s
 => WARN: LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" for  0.0s
 => WARN: JSONArgsRecommended: JSON arguments recommended for ENTRYPOINT to prevent unintended behav  0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                                     0.0s
 => [internal] load .dockerignore                                                                     0.0s
 => => transferring context: 2B                                                                       0.0s
 => [1/1] FROM docker.io/library/busybox:latest@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98c  0.0s
 => => resolve docker.io/library/busybox:latest@sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98c  0.0s
 => exporting to image                                                                                0.1s
 => => exporting layers                                                                               0.0s
 => => exporting manifest sha256:832633de31c7350218dc60b1e42adcf7e9e5a810d69ad927a1ed1352630ee995     0.0s
 => => exporting config sha256:2c546b9a12f10fd2bd150ba2246146959d58fe30074427ee01d30b790f18ecd1       0.0s
 => => exporting attestation manifest sha256:7379cc57e8585dd51b26fceb6fefeb0c9d608436b6590d0c341aa0f  0.0s
 => => exporting manifest list sha256:362ce22053cde3a99392af4a1f9ef855a4cb88a2ab85eff2c281c727cc4e7e  0.0s
 => => naming to docker.io/library/xier:v1                                                            0.0s
 => => unpacking to docker.io/library/xier:v1                                                         0.0s

 3 warnings found (use docker --debug to expand):
 - JSONArgsRecommended: JSON arguments recommended for ENTRYPOINT to prevent unintended behavior related to OS signals (line 4)
 - MaintainerDeprecated: Maintainer instruction is deprecated in favor of using label (line 2)
 - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 3)
[root@docker10 docker]# docker run --rm xier:v1 
xier
[root@docker10 docker]# docker run --rm xier:v1 echo 521
xier
[root@docker10 docker]# 

搭建centos7镜像(自己配置软件仓库的镜像)

[root@docker10 yum.repos.d]# cd /root/docker/
[root@docker10 docker]# vim docker.repo
[docker]
name = docker
baseurl = https://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/
gpgcheck = 0

[root@docker10 docker]# vim Dockerfile 
[root@docker10 docker]# vim Dockerfile 
   2 FROM centos:7
   1 MAINTAINER xierxier
3    RUN ["/bin/bash" , "-c" , "rm -rf /etc/yum.repos.d/*"]
   1 COPY docker.repo /etc/yum.repos.d/docker.repo


[root@docker10 docker]# docker build -t centos7 .
[+] Building 0.5s (8/8) FINISHED                                                                                                                                                   docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                         0.0s
 => => transferring dockerfile: 174B                                                                                                                                                         0.0s
 => WARN: MaintainerDeprecated: Maintainer instruction is deprecated in favor of using label (line 2)                                                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                                  0.0s
 => [internal] load .dockerignore                                                                                                                                                            0.0s
 => => transferring context: 2B                                                                                                                                                              0.0s
 => CACHED [1/3] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4                                                                     0.0s
 => => resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4                                                                            0.0s
 => [internal] load build context                                                                                                                                                            0.0s
 => => transferring context: 32B                                                                                                                                                             0.0s
 => [2/3] RUN ["/bin/bash" , "-c" , "rm -rf /etc/yum.repos.d/*"]                                                                                                                             0.2s
 => [3/3] COPY docker.repo /etc/yum.repos.d/docker.repo                                                                                                                                      0.0s
 => exporting to image                                                                                                                                                                       0.2s
 => => exporting layers                                                                                                                                                                      0.1s
 => => exporting manifest sha256:d5d87910f5cde33ed121b95e98e144f73e836d2719314380aeca732254b14174                                                                                            0.0s
 => => exporting config sha256:8a3c1bda769beb73f439e0c55a79afcafbeab72bfaf36612179e115d32a1de5c                                                                                              0.0s
 => => exporting attestation manifest sha256:b84f5fa971d52457d0783894a14bf1b85f6c8df4e59ba6b5b4cb2453da9ac47a                                                                                0.0s
 => => exporting manifest list sha256:fa2313c1d74908ee7dfe642a41ecf13bcb466a6c2589894a059402658fe20b38                                                                                       0.0s
 => => naming to docker.io/library/centos7:latest                                                                                                                                            0.0s
 => => unpacking to docker.io/library/centos7:latest                                                                                                                                         0.0s

 1 warning found (use docker --debug to expand):
 - MaintainerDeprecated: Maintainer instruction is deprecated in favor of using label (line 2)
[root@docker10 docker]# docker run -it --rm centos7 
[root@32ea777d87dc /]# ll /etc/yum.repos.d/
total 4
-rw-r--r-- 1 root root 108 Mar 15 03:51 docker.repo
[root@32ea777d87dc /]# dnf install gcc -y
bash: dnf: command not found
[root@32ea777d87dc /]# yum install gcc -y
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
docker                                                                                                                                                                     | 3.6 kB  00:00:00     
(1/2): docker/group_gz                                                                                                                                                     | 153 kB  00:00:00     
(2/2): docker/primary_db                                                                                                                                                   | 6.1 MB  00:00:01     
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-44.el7 will be installed
--> Processing Dependency: libgomp = 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: cpp = 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libmpfr.so.4()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libmpc.so.3()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libgomp.so.1()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Running transaction check
---> Package cpp.x86_64 0:4.8.5-44.el7 will be installed
---> Package glibc-devel.x86_64 0:2.17-317.el7 will be installed
--> Processing Dependency: glibc-headers = 2.17-317.el7 for package: glibc-devel-2.17-317.el7.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.17-317.el7.x86_64
---> Package libgomp.x86_64 0:4.8.5-44.el7 will be installed
---> Package libmpc.x86_64 0:1.0.1-3.el7 will be installed
---> Package mpfr.x86_64 0:3.1.1-4.el7 will be installed
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.17-317.el7 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.17-317.el7.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.17-317.el7.x86_64
--> Running transaction check
---> Package kernel-headers.x86_64 0:3.10.0-1160.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================================================================================================================
 Package                                           Arch                                      Version                                              Repository                                 Size
==================================================================================================================================================================================================
Installing:
 gcc                                               x86_64                                    4.8.5-44.el7                                         docker                                     16 M
Installing for dependencies:
 cpp                                               x86_64                                    4.8.5-44.el7                                         docker                                    5.9 M
 glibc-devel                                       x86_64                                    2.17-317.el7                                         docker                                    1.1 M
 glibc-headers                                     x86_64                                    2.17-317.el7                                         docker                                    690 k
 kernel-headers                                    x86_64                                    3.10.0-1160.el7                                      docker                                    9.0 M
 libgomp                                           x86_64                                    4.8.5-44.el7                                         docker                                    159 k
 libmpc                                            x86_64                                    1.0.1-3.el7                                          docker                                     51 k
 mpfr                                              x86_64                                    3.1.1-4.el7                                          docker                                    203 k

Transaction Summary
==================================================================================================================================================================================================
Install  1 Package (+7 Dependent packages)

Total download size: 33 M
Installed size: 60 M
Downloading packages:
cpp-4.8.5-44.el7.x86_64.rpm    FAILED                                          
https://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/Packages/cpp-4.8.5-44.el7.x86_64.rpm: [Errno 14] curl#6 - "Could not resolve host: mirrors.aliyun.com; Unknown error"0 B  --:--:-- ETA 
Trying other mirror.
gcc-4.8.5-44.el7.x86_64.rpm    FAILED                                          
https://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/Packages/gcc-4.8.5-44.el7.x86_64.rpm: [Errno 14] curl#6 - "Could not resolve host: mirrors.aliyun.com; Unknown error"0 B  --:--:-- ETA 
Trying other mirror.
(1/8): glibc-devel-2.17-317.el7.x86_64.rpm                                                                                                                                 | 1.1 MB  00:00:00     
(2/8): glibc-headers-2.17-317.el7.x86_64.rpm                                                                                                                               | 690 kB  00:00:00     
(3/8): kernel-headers-3.10.0-1160.el7.x86_64.rpm                                                                                                                           | 9.0 MB  00:00:00     
(4/8): libgomp-4.8.5-44.el7.x86_64.rpm                                                                                                                                     | 159 kB  00:00:00     
(5/8): libmpc-1.0.1-3.el7.x86_64.rpm                                                                                                                                       |  51 kB  00:00:00     
(6/8): mpfr-3.1.1-4.el7.x86_64.rpm                                                                                                                                         | 203 kB  00:00:00     


Error downloading packages:
  gcc-4.8.5-44.el7.x86_64: [Errno 256] No more mirrors to try.
  cpp-4.8.5-44.el7.x86_64: [Errno 256] No more mirrors to try.

[root@32ea777d87dc /]# 

添加虚拟机20并部署docker

10:

[root@docker10 docker]# scp /etc/modules-load.d/docker_mod.conf  root@172.25.254.20:/etc/modules-load.d/docker_mod.conf
docker_mod.conf                                                                                                                                                 100%   13     9.1KB/s   00:00    
[root@docker10 docker]# scp /etc/sysctl.d/docker.conf root@172.25.254.20:/etc/sysctl.d/docker.conf
docker.conf                                                                                                                                                     100%  103   123.9KB/s   00:00    
[root@docker10 docker]# scp /etc/yum.repos.d/docker1.repo root@172.25.254.20:/etc/yum.repos.d/docker1.repo
docker1.repo                                                                                                                                                    100%  114   191.5KB/s   00:00    
[root@docker10 docker]# 

20:

[root@docker20 ~]# cat /etc/modules-load.d/docker_mod.conf 
br_netfilter
[root@docker20 ~]# modprobe -a br_netfilter 
[root@docker20 ~]# 
[root@docker20 ~]# sysctl --system 

[root@docker20 ~]# dnf install docker-ce -y
[root@docker20 ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@docker20 ~]# 

四 docker 镜像仓库的管理

1 docker hub

Docker Hub Docker 官方提供的一个公共的镜像仓库服务。

docker hub的使用方法

1.登录
#登陆官方仓库
[root@docker ~]# docker login -u timinglee
Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/

Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores

Login Succeeded

#登陆信息保存位置
[root@docker ~]# cd .docker/
[root@docker .docker]# ls
config.json
[root@docker .docker]# cat config.json
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "dGltaW5nbGVlOjY3NTE1MTVtaW5nemxu"
                }
        }
2.上传镜像
[root@docker ~]# docker tag gcr.io/distroless/base-debian11:latest  timinglee/base-debian11:latest
[root@docker ~]# docker push  timinglee/base-debian11:latest
3.下载
docker search 仓库名称

docker pull 名称/镜像

搭建docker的私有仓库

2.搭建简单的Registry仓库

1.下载Registry镜像

[root@docker ~]# docker pull registry

下载不了用压缩包导入

-rw-r--r--  1 root root 18860032  3月 16 01:25 registry.tar
[root@docker10 ~]# docker load -i registry.tar
Loaded image: registry:latest
[root@docker10 ~]# 

2.开启Registry

[root@docker10 ~]# docker history registry:latest 
IMAGE          CREATED       CREATED BY                                       SIZE      COMMENT
6c5666b861f3   6 weeks ago   CMD ["/etc/distribution/config.yml"]             0B        buildkit.dockerfile.v0
<missing>      6 weeks ago   ENTRYPOINT ["/entrypoint.sh"]                    0B        buildkit.dockerfile.v0
<missing>      6 weeks ago   COPY entrypoint.sh /entrypoint.sh # buildkit     4.1kB     buildkit.dockerfile.v0
<missing>      6 weeks ago   EXPOSE map[5000/tcp:{}]                          0B        buildkit.dockerfile.v0
<missing>      6 weeks ago   VOLUME [/var/lib/registry]                       0B        buildkit.dockerfile.v0
<missing>      6 weeks ago   COPY ./config-example.yml /etc/distribution/…   4.1kB     buildkit.dockerfile.v0
<missing>      6 weeks ago   RUN /bin/sh -c set -eux;  version='3.0.0';  …   49.3MB    buildkit.dockerfile.v0
<missing>      6 weeks ago   RUN /bin/sh -c apk add --no-cache ca-certifi…   946kB     buildkit.dockerfile.v0
<missing>      6 weeks ago   CMD ["/bin/sh"]                                  0B        buildkit.dockerfile.v0
<missing>      6 weeks ago   ADD alpine-minirootfs-3.21.6-x86_64.tar.gz /…   8.14MB    buildkit.dockerfile.v0
[root@docker10 ~]# docker run -d -p 5000:5000 --restart=always --name registry registry:latest 
d5bc7a2f04582eadf797042aa003f6331a0793fdc7cb5c2f58db3c4413b2dd83
[root@docker10 ~]#

3.上传镜像到仓库中

#给要上传的经镜像打标签

[root@docker10 ~]# docker images
                                                                                                                                                                             i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
busybox:latest              b3255e7dfbcd        6.7MB         2.22MB        
centos7:latest              fa2313c1d749        299MB         76.1MB        
centos:7                    be65f488b776        299MB         76.1MB        
nginx:1.26                  41b194461e4b        279MB         75.2MB        
registry:latest             6c5666b861f3       77.3MB         18.8MB    U   
timinglee/game2048:latest   8a34fb9cb168       77.2MB         17.8MB        
timinglee/mario:latest      7758988210df        298MB         73.7MB        
xier:v1                     362ce22053cd        6.7MB         2.21MB        
[root@docker10 ~]# docker tag centos:7 172.25.254.10:5000/centos7:v1

#docker在上传的过程中默认使用https,但是我们并没有建立https认证需要的认证文件所以会报错

[root@docker10 ~]# docker push 172.25.254.10:5000/centos7:v1
The push refers to repository [172.25.254.10:5000/centos7]
2d473b07cdd5: Unavailable 
failed to do request: Head "https://172.25.254.10:5000/v2/centos7/blobs/sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9": http: server gave HTTP response to HTTPS client
[root@docker10 ~]# 

#配置非加密端口

[root@docker10 ~]# vim /etc/docker/daemon.json
{
  "insecure-registries" : ["http://172.25.254.100:5000"]
}
[root@docker10 ~]# systemctl restart docker
[root@docker10 ~]# 

#上传镜像

[root@docker10 ~]# docker push 172.25.254.10:5000/centos7:v1
The push refers to repository [172.25.254.10:5000/centos7]
2d473b07cdd5: Pushed 
v1: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529

i Info → Not all multiplatform-content is present and only the available single-platform image was pushed
          sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 -> sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f
[root@docker10 ~]# 

#查看

[root@docker10 ~]# curl 172.25.254.10:5000/v2/_catalog
{"repositories":["centos7"]}
[root@docker10 ~]# 
/v2/_catalog
这是 Docker Registry v2 版本的固定 API 地址

3.为Registry添加密传输

1.还原环境

[root@docker10 ~]# docker rm -f registry 
registry
[root@docker10 ~]# vim /etc/docker/daemon.json 
[root@docker10 ~]# cat /etc/docker/daemon.json 
[root@docker10 ~]# systemctl restart docker
[root@docker10 ~]# 

2.创建证书

[root@docker10 ~]# mkdir /etc/docker/certs
[root@docker10 ~]# openssl req -newkey rsa:4096 \
> -nodes -sha256 -keyout /etc/docker/certs/timinglee.org.key \
> -addext "subjectAltName = DNS:reg.timinglee.org" \
> -x509 -days 365 -out /etc/docker/certs/timinglee.org.crt

````
Common Name (eg, your name or your server's hostname) []:reg.timinglee.org
必须和上面设置的一样
````
#查看证书信息
[root@docker10 ~]# openssl x509 -in /etc/docker/certs/timinglee.org.crt -noout -text
Certificate:
    Data:

3.启动registry仓库

--restart=always 开机 / 宕机后自动重启仓库
[root@docker10 ~]# docker run -d -p 443:443 --restart=always --name registry \
> -v /opt/registry:/var/lib/registry \ #宿主机的/opt/registry挂载到→容器里的/var/lib/registry
> -v /etc/docker/certs:/certs \  #同上,宿主机没有自动创建
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/timinglee.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/timinglee.org.key registry
20806f570671a7f87b5da9370d5f7a25d7fec986f69ee203fa77e888b89d7f40
[root@docker10 ~]# 
即
[root@docker10 ~]# docker run -d -p 443:443 --restart=always --name registry -v /opt/registry:/var/lib/registry -v /etc/docker/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/timinglee.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/timinglee.org.key registry
a79bafe96759577ecc5ca6243f68046981fc8c90703b015b0a4206cd7a500590
[root@docker10 ~]#

[root@docker10 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                    
a79bafe96759   registry   "/entrypoint.sh /etc…"   2 minutes ago   Up 2 minutes   0.0.0.0:443->443/tcp, [::]
[root@docker10 ~]# 
 

4.在两台主机添加域名解析

[root@docker10 ~]# vim /etc/hosts
[root@docker10 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.10     docker10
172.25.254.10     reg.timinglee.org

[root@docker20 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.20     docker20
172.25.254.10     reg.timinglee.org

5.测试

给docker建立证书

[root@docker10 ~]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
[root@docker10 ~]# cp /etc/docker/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt
[root@docker10 ~]# systemctl restart docker
[root@docker10 ~]# 

上传测试

[root@docker10 ~]# curl -k  https://172.25.254.10/v2/_catalog
{"repositories":[]}
[root@docker10 ~]# docker tag xier:v1 reg.timinglee.org/xier:v1
[root@docker10 ~]# docker push reg.timinglee.org/xier:v1
The push refers to repository [reg.timinglee.org/xier]
61dfb50712f5: Pushed 
6227ad376dfb: Pushed 
v1: digest: sha256:362ce22053cde3a99392af4a1f9ef855a4cb88a2ab85eff2c281c727cc4e7e7e size: 855
[root@docker10 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.10     docker10
172.25.254.10     reg.timinglee.org
[root@docker10 ~]# curl -k  https://172.25.254.10/v2/_catalog
{"repositories":["xier"]}
[root@docker10 ~]# 

4.添加登录认证

1.安装工具

dnf install httpd-tools -y

2.建立认证文件

[root@docker10 ~]# mkdir /etc/docker/auth
[root@docker10 ~]# htpasswd -Bc /etc/docker/auth/htpasswd xier
New password: 
Re-type new password: 
Adding password for user xier
[root@docker10 ~]# 

3.添加认证到registry容器中

[root@docker10 ~]# docker rm -f registry 
registry
[root@docker10 ~]# docker run -d -p 443:443 --restart=always --name registry -v /opt/registry:/var/lib/registry -v /etc/docker/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/timinglee.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/timinglee.org.key -v /etc/docker/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
6e8b65154ba520295a6e76a6fa25b1e1e9bacb80cb1d38603c6cba8affa0dced
[root@docker10 ~]# 

[root@docker10 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                   CREATED          STATUS                         PORTS     NAMES
f944967b660b   registry   "/entrypoint.sh -v /…"   23 seconds ago   Restarting (0) 7 seconds ago             registry
[root@docker10 ~]# 

4.测试

[root@docker10 ~]# docker login reg.timinglee.org -u xier
Password: 

WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded
[root@docker10 ~]# curl -k https://reg.timinglee.org/v2/_catalog -u xier
Enter host password for user 'xier':
{"repositories":["xier"]}
[root@docker10 ~]# 
[root@docker10 ~]# docker push reg.timinglee.org/xier:v1
The push refers to repository [reg.timinglee.org/xier]
6227ad376dfb: Already exists 
61dfb50712f5: Layer already exists 
v1: digest: sha256:362ce22053cde3a99392af4a1f9ef855a4cb88a2ab85eff2c281c727cc4e7e7e size: 855

20上下载镜像
要把证书放到 /etc/docker/certs.d/域名/ 目录下 = 告诉 Docker:我信任这个仓库

[root@docker10 ~]# scp -r /etc/docker/certs.d/ root@172.25.254.20:/etc/docker/certs.d
ca.crt                                                                                                                                                          100% 2179     1.7MB/s   00:00    
[root@docker10 ~]# 


[root@docker20 ~]# systemctl restart docker

查仓库有什么镜像/v2/_catalog

[root@docker20 ~]#  curl -k https://reg.timinglee.org/v2/_catalog -u xier
Enter host password for user 'xier':
{"repositories":["xier"]}



[root@docker20 ~]# docker login reg.timinglee.org -u xier
Password: 

WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded

[root@docker20 ~]# docker pull reg.timinglee.org/xier:v1
v1: Pulling from xier
61dfb50712f5: Pull complete 
6227ad376dfb: Download complete 
Digest: sha256:362ce22053cde3a99392af4a1f9ef855a4cb88a2ab85eff2c281c727cc4e7e7e
Status: Downloaded newer image for reg.timinglee.org/xier:v1
reg.timinglee.org/xier:v1
[root@docker20 ~]# 

查镜像有什么版本/v2/镜像名/tags/list

[root@docker20 ~]# curl -k https://reg.timinglee.org/v2/xier/tags/list -u xier
Enter host password for user 'xier':
{"name":"xier","tags":["v1"]}
[root@docker20 ~]# 

    5 部署harbor仓库

    安装部署

    1.解压安装包到指定目录

    [root@docker10 ~]# tar zxf harbor-offline-installer-v2.14.0.tgz -C /opt/
    [root@docker10 ~]# cd /opt/
    [root@docker10 opt]# ll
    总用量 0
    drwx--x--x 4 root root  28  3月 14 20:55 containerd
    drwxr-xr-x 2 root root 123  3月 21 17:55 harbor
    drwxr-xr-x 3 root root  20  3月 16 19:01 registry
    [root@docker10 opt]# 
    

    2.复制安装要用的文件

    [root@docker10 opt]# cd harbor/
    [root@docker10 harbor]# ll
    总用量 656308
    -rw-r--r-- 1 root root      3646  9月  9  2025 common.sh
    -rw-r--r-- 1 root root 672014938  9月  9  2025 harbor.v2.14.0.tar.gz
    -rw-r--r-- 1 root root     14688  9月  9  2025 harbor.yml.tmpl
    -rwxr-xr-x 1 root root      1975  9月  9  2025 install.sh
    -rw-r--r-- 1 root root     11347  9月  9  2025 LICENSE
    -rwxr-xr-x 1 root root      2211  9月  9  2025 prepare
    [root@docker10 harbor]# cp -p harbor.yml.tmpl harbor.yml
    
    //  -p 保留文件权限

    3.复制之前创造的证书到指定目录

    [root@docker10 harbor]# mkdir /data/
    [root@docker10 harbor]# ls /data/
    [root@docker10 harbor]# cp -rp /etc/docker/certs /data/
    [root@docker10 harbor]# ll /data/certs/timinglee.org.crt 
    -rw-r--r-- 1 root root 2179  3月 16 14:55 /data/certs/timinglee.org.crt
    [root@docker10 harbor]# ll /data/certs/timinglee.org.key 
    -rw------- 1 root root 3272  3月 16 14:52 /data/certs/timinglee.org.key
    [root@docker10 harbor]# ll /data/certs/
    总用量 8
    -rw-r--r-- 1 root root 2179  3月 16 14:55 timinglee.org.crt
    -rw------- 1 root root 3272  3月 16 14:52 timinglee.org.key
    [root@docker10 harbor]# 
    

    (没有证书重新创建)

    [root@docker10 harbor]# mkdir /opt/harbor/certs
    [root@docker10 harbor]# cd /opt/harbor/
    [root@docker10 harbor]# openssl req -newkey rsa:4096 \
    > -nodes -sha256 -keyout /etc/docker/certs/timinglee.org.key \
    > -addext "subjectAltName = DNS:reg.timinglee.org" \
    > -x509 -days 365 -out certs/timinglee.org.crt
    [root@docker10 harbor]# 

    4.编辑安装要用的文件

    [root@docker harbor]# vim harbor.yml
    
      hostname: reg.timinglee.org
      certificate: /data/certs/timinglee.org.crt
      private_key: /data/certs/timinglee.org.key
      harbor_admin_password: xier

    5.停止并删除旧的 registry 容器,为部署 Harbor 腾出 443 端口(避免端口冲突)

    [root@docker10 harbor]# docker ps
    CONTAINER ID   IMAGE      COMMAND                   CREATED      STATUS          PORTS                                               NAMES
    6e8b65154ba5   registry   "/entrypoint.sh /etc…"   4 days ago   Up 43 minutes   0.0.0.0:443->443/tcp, [::]:443->443/tcp, 5000/tcp   registry
    [root@docker10 harbor]# docker rm -f registry 
    registry
    [root@docker10 harbor]# 
    

    6.安装

    [root@docker10 harbor]# ./install.sh 
    
    ·····                                                                                                                                                1.1s
    ✔ ----Harbor has been installed and started successfully.----
    [root@docker10 harbor]# 
    //查看
    [root@docker10 harbor]# docker ps -a
    CONTAINER ID   IMAGE                                 COMMAND                   CREATED              STATUS                        PORTS                                                                                NAMES
    d34f6b9fcc43   goharbor/harbor-jobservice:v2.14.0    "/harbor/entrypoint.…"   About a minute ago   Up About a minute (healthy)                                                                                        harbor-jobservice
    b4545a8a359a   goharbor/nginx-photon:v2.14.0         "nginx -g 'daemon of…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:80->8080/tcp, [::]:80->8080/tcp, 0.0.0.0:443->8443/tcp, [::]:443->8443/tcp   nginx
    9e83d430b5e7   goharbor/harbor-core:v2.14.0          "/harbor/entrypoint.…"   About a minute ago   Up About a minute (healthy)                                                                                        harbor-core
    bc07960d3e6a   goharbor/registry-photon:v2.14.0      "/home/harbor/entryp…"   About a minute ago   Up About a minute (healthy)                                                                                        registry
    f69704e0dceb   goharbor/redis-photon:v2.14.0         "redis-server /etc/r…"   About a minute ago   Up About a minute (healthy)                                                                                        redis
    a785442f92f7   goharbor/harbor-portal:v2.14.0        "nginx -g 'daemon of…"   About a minute ago   Up About a minute (healthy)                                                                                        harbor-portal
    d797644adb43   goharbor/harbor-registryctl:v2.14.0   "/home/harbor/start.…"   About a minute ago   Up About a minute (healthy)                                                                                        registryctl
    db75efb29793   goharbor/harbor-db:v2.14.0            "/docker-entrypoint.…"   About a minute ago   Up About a minute (healthy)                                                                                        harbor-db
    5bcb28da9948   goharbor/harbor-log:v2.14.0           "/bin/sh -c /usr/loc…"   About a minute ago   Up About a minute (healthy)   127.0.0.1:1514->10514/tcp                                                            harbor-log
    [root@docker10 harbor]# 
    

    使用

    7.服务的开启,删除和关闭

    [root@docker10 harbor]# docker compose stop
    关闭服务,但是不会删除容器
    [+] stop 9/9
     ✔ Container harbor-jobservice Stopped                                                                                                                                                       0.1ss
     ✔ Container registryctl       Stopped                                                                                                                                                       0.1ss
     ✔ Container nginx             Stopped                                                                                                                                                       0.1ss
     ✔ Container harbor-portal     Stopped                                                                                                                                                       0.1ss
     ✔ Container harbor-core       Stopped                                                                                                                                                       0.1ss
     ✔ Container redis             Stopped                                                                                                                                                       0.1ss
     ✔ Container harbor-db         Stopped                                                                                                                                                       0.1ss
     ✔ Container registry          Stopped                                                                                                                                                       0.1ss
     ✔ Container harbor-log        Stopped                                                                                                                                                       10.1s
    [root@docker10 harbor]# docker compose down
    删除容器
    [+] down 10/10
     ✔ Container registryctl       Removed                                                                                                                                                        0.0s
     ✔ Container harbor-jobservice Removed                                                                                                                                                        0.0s
     ✔ Container nginx             Removed                                                                                                                                                        0.0s
     ✔ Container harbor-portal     Removed                                                                                                                                                        0.0s
     ✔ Container harbor-core       Removed                                                                                                                                                        0.0s
     ✔ Container harbor-db         Removed                                                                                                                                                        0.0s
     ✔ Container registry          Removed                                                                                                                                                        0.0s
     ✔ Container redis             Removed                                                                                                                                                        0.0s
     ✔ Container harbor-log        Removed                                                                                                                                                        0.0s
     ✔ Network harbor_harbor       Removed                                                                                                                                                        0.0s
    [root@docker10 harbor]# docker compose up -d
    开启服务
    
    [+] up 10/10
     ✔ Network harbor_harbor       Created                                                                                                                                                        0.0s
     ✔ Container harbor-log        Started                                                                                                                                                        0.2s
     ✔ Container redis             Started                                                                                                                                                        0.5s
     ✔ Container registry          Started                                                                                                                                                        0.4s
     ✔ Container registryctl       Started                                                                                                                                                        0.6s
     ✔ Container harbor-portal     Started                                                                                                                                                        0.5s
     ✔ Container harbor-db         Started                                                                                                                                                        0.5s
     ✔ Container harbor-core       Started                                                                                                                                                        0.8s
     ✔ Container harbor-jobservice Started                                                                                                                                                        1.0s
     ✔ Container nginx             Started                                                                                                                                                        1.1s
    [root@docker10 harbor]# 
    

    8.使用

    直接访问输入设定的admin账号和密码

    9.上传镜像

    查看所有镜像

    [root@docker10 ~]# docker images
                                                                                                                                                                                 i Info →   U  In Use
    IMAGE                                   ID             DISK USAGE   CONTENT SIZE   EXTRA
    172.25.254.10/xier:v1                   362ce22053cd        6.7MB         2.21MB        
    172.25.254.10:5000/centos7:v1           be65f488b776        299MB         76.1MB        
    busybox:latest                          b3255e7dfbcd        6.7MB         2.22MB        
    centos7:latest                          fa2313c1d749        299MB         76.1MB        
    centos:7                                be65f488b776        299MB         76.1MB        
    goharbor/harbor-core:v2.14.0            32fb1bea30a8        412MB          204MB    U   
    goharbor/harbor-db:v2.14.0              257d051f27d7        563MB          278MB    U   
    goharbor/harbor-exporter:v2.14.0        7d050a6cbf58        270MB          134MB        
    goharbor/harbor-jobservice:v2.14.0      317294a42a01        363MB          180MB    U   
    goharbor/harbor-log:v2.14.0             b208a659155f        335MB          166MB    U   
    goharbor/harbor-portal:v2.14.0          f7edc122f9f3        327MB          162MB    U   
    goharbor/harbor-registryctl:v2.14.0     3e4111e0aca6        334MB          166MB    U   
    goharbor/nginx-photon:v2.14.0           a1287393aaa1        309MB          153MB    U   
    goharbor/prepare:v2.14.0                941297444ea3        411MB          202MB        
    goharbor/redis-photon:v2.14.0           a35163ff2720        339MB          168MB    U   
    goharbor/registry-photon:v2.14.0        ba892b6ec307        177MB         88.2MB    U   
    goharbor/trivy-adapter-photon:v2.14.0   c2f4dbf5cad3        790MB          394MB        
    nginx:1.26                              41b194461e4b        279MB         75.2MB        
    reg.timinglee.org/xier:v1               362ce22053cd        6.7MB         2.21MB        
    registry:latest                         6c5666b861f3       77.3MB         18.8MB        
    timinglee/game2048:latest               8a34fb9cb168       77.2MB         17.8MB        
    timinglee/mario:latest                  7758988210df        298MB         73.7MB        
    xier:v1                                 362ce22053cd        6.7MB         2.21MB        
    

    登录(需要主机有域名解析)

    [root@docker10 ~]# docker login reg.timinglee.org
    Authenticating with existing credentials... [Username: xier]
    
    i Info → To login with a different account, run 'docker logout' followed by 'docker login'
    
    
    Stored credentials invalid or expired
    Username (xier): admin
    Password: 
    
    WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/go/credential-store/
    
    Login Succeeded
    

    加标签上传

    [root@docker10 ~]# docker tag nginx:1.26 reg.timinglee.org/library/nginx:1.26
    [root@docker10 ~]# docker push reg.timinglee.org/library/nginx:1.26
    The push refers to repository [reg.timinglee.org/library/nginx]
    5e98d206134b: Unavailable 
    6923759e66ab: Unavailable 
    8a628cdd7ccc: Unavailable 
    d44088bb6ae8: Unavailable 
    9ebfb40fb06b: Unavailable 
    4fd410795c0f: Unavailable 
    7a0654aeb922: Unavailable 
    failed to authorize: failed to fetch oauth token: Post "https://reg.timinglee.org/service/token": tls: failed to verify certificate: x509: certificate signed by unknown authority
    
    

    解决证书不匹配问题(删除docker重新安装低版本的)

    关闭harbor删除docker

    [root@docker10 ~]# 
    [root@docker10 ~]# cd /opt/harbor/
    [root@docker10 harbor]# docker compose down 
    [+] down 10/10
     ✔ Container harbor-jobservice Removed                                                                                                                                                       0.2ss
     ✔ Container registryctl       Removed                                                                                                                                                       0.2ss
     ✔ Container nginx             Removed                                                                                                                                                       0.2ss
     ✔ Container harbor-portal     Removed                                                                                                                                                       0.1ss
     ✔ Container harbor-core       Removed                                                                                                                                                       0.1ss
     ✔ Container redis             Removed                                                                                                                                                       0.1ss
     ✔ Container harbor-db         Removed                                                                                                                                                       0.1ss
     ✔ Container registry          Removed                                                                                                                                                       0.1ss
     ✔ Container harbor-log        Removed                                                                                                                                                       10.1s
     ✔ Network harbor_harbor       Removed                                                                                                                                                       0.1s
    [root@docker10 harbor]# dnf remove docker
    正在更新 Subscription Management 软件仓库。
    无法读取客户身份
    
    本系统尚未在权利服务器中注册。可使用 "rhc" 或 "subscription-manager" 进行注册。
    
    未找到匹配的参数: docker
    没有软件包需要移除。
    依赖关系解决。
    无需任何处理。
    完毕!
    [root@docker10 harbor]# 
    

    查看可安装的版本

    [root@docker10 harbor]# dnf list docker-ce --showduplicates 
    正在更新 Subscription Management 软件仓库。
    无法读取客户身份
    
    本系统尚未在权利服务器中注册。可使用 "rhc" 或 "subscription-manager" 进行注册。
    
    docker                                                                                                                                                            2.7 kB/s | 2.0 kB     00:00    
    docker                                                                                                                                                            4.5 kB/s |  47 kB     00:10    
    epel                                                                                                                                                              6.5 kB/s | 4.0 kB     00:00    
    AppStream                                                                                                                                                         3.1 MB/s | 3.2 kB     00:00    
    BaseOS                                                                                                                                                            2.7 MB/s | 2.7 kB     00:00    
    已安装的软件包
    docker-ce.x86_64                                                                              3:29.3.0-1.el9                                                                              @docker1
    可安装的软件包
    docker-ce.x86_64                                                                              3:25.0.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:25.0.4-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:25.0.5-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.0.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.0.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.0.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.1.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.1.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.1.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.1.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:26.1.4-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.0.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.0.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.0.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.1.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.1.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.1.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.2.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.2.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.3.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.3.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.4.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.4.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.5.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:27.5.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.0.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.0.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.0.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.0.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.0.4-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.1.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.1.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.3.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.3.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.3.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.3.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.4.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.5.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.5.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:28.5.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.0.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.0.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.0.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.0.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.0.4-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.1.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.1.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.1.2-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.1.3-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.1.4-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.1.5-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.2.0-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.2.1-1.el9                                                                              docker1 
    docker-ce.x86_64                                                                              3:29.3.0-1.el9                                                                              docker1 
    [root@docker10 harbor]# 
    

    安装

    [root@docker10 harbor]# dnf install docker-ce-3:28.5.2-1.el9 -y
    
    

    修改配置文件

    [root@docker10 harbor]# vim /lib/systemd/system/docker.service 
    
    15   ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
    

    重新加载并设置开机自启

    [root@docker10 harbor]# systemctl daemon-reload 
    [root@docker10 harbor]# systemctl enable --now docker.service
    

    导入镜像

    [root@docker10 harbor]# docker images
                                                                                                                                                                                 i Info →   U  In Use
    IMAGE   ID             DISK USAGE   CONTENT SIZE   EXTRA
    [root@docker10 harbor]# cd 
    [root@docker10 ~]# ls
    anaconda-ks.cfg  busy-latest.tar  centos7.tar  certs  docker  game2048-latest.tar  harbor-offline-installer-v2.14.0.tgz  mario-latest.tar  nginx-1.26.tar  registry.tar
    
    [root@docker10 ~]# docker load -i busy-latest.tar
    Loaded image: busybox:latest
    
    [root@docker10 ~]# docker load -i  nginx-1.26.tar
    Loaded image: nginx:1.26
    [root@docker10 ~]# docker images
                                                                                                                                                                                 i Info →   U  In Use
    IMAGE            ID             DISK USAGE   CONTENT SIZE   EXTRA
    busybox:latest   af3f0f48a24e       4.43MB             0B        
    nginx:1.26       64e5ac93d424        192MB             0B        
    [root@docker10 ~]# 
    

    检测配置文件重新安装启动harbor

    [root@docker10 ~]# cd /opt/harbor/
    [root@docker10 harbor]# vim harbor.yml
    [root@docker10 harbor]# ./install.sh
    [root@docker10 harbor]# docker compose up -d 
    [+] up 9/9
     ✔ Container harbor-log        Running                                                                                                                                                        0.0s
     ✔ Container redis             Running                                                                                                                                                        0.0s
     ✔ Container registryctl       Running                                                                                                                                                        0.0s
     ✔ Container harbor-portal     Running                                                                                                                                                        0.0s
     ✔ Container harbor-db         Running                                                                                                                                                        0.0s
     ✔ Container registry          Running                                                                                                                                                        0.0s
     ✔ Container harbor-core       Running                                                                                                                                                        0.0s
     ✔ Container nginx             Running                                                                                                                                                        0.0s
     ✔ Container harbor-jobservice Running                                                                                                                                                        0.0s
    [root@docker10 harbor]# 
    

    在网页harbor中创建项目

    打标签上传镜像到harbor

    [root@docker10 ~]# docker tag busybox:latest reg.timinglee.org/timinglee/busybox:latest
    [root@docker10 harbor]# docker push reg.timinglee.org/timinglee/busybox:latest 
    The push refers to repository [reg.timinglee.org/timinglee/busybox]
    495ba00f2547: Pushed 
    latest: digest: sha256:91c66c844e6bba57e92e10e755e73a816d0b99edd17eb5297d9ac519ab3a8c81 size: 527
    [root@docker10 harbor]#

    查看

    客户端下载镜像

    1.删除重装docker

    [root@docker20 ~]# dnf remove docker
    正在更新 Subscription Management 软件仓库。
    无法读取客户身份
    
    本系统尚未在权利服务器中注册。可使用 "rhc" 或 "subscription-manager" 进行注册。
    
    未找到匹配的参数: docker
    没有软件包需要移除。
    依赖关系解决。
    无需任何处理。
    完毕!
    
    [root@docker20 yum.repos.d]# dnf install docker-ce-3:28.5.2-1.el9 -y
    
    [root@docker20 yum.repos.d]# vim /lib/systemd/system/docker.service 
    
    15   ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
    
    [root@docker20 yum.repos.d]# systemctl daemon-reload 
    [root@docker20 yum.repos.d]# systemctl enable --now docker.service
    [root@docker20 yum.repos.d]# 
    

    客户端下载需要证书(必须)(上个实验已经配置完成)

    检测

    [root@docker20 yum.repos.d]# cd /etc/docker/certs.d/
    [root@docker20 certs.d]# ls
    reg.timinglee.org
    [root@docker20 certs.d]# cd reg.timinglee.org/
    [root@docker20 reg.timinglee.org]# ll
    总用量 4
    -rw-r--r-- 1 root root 2179  3月 21 22:47 ca.crt
    [root@docker20 reg.timinglee.org]# ls
    ca.crt
    [root@docker20 reg.timinglee.org]# 
    

    使用短名称需要配置加速器

    设定docker加速器

    [root@docker20 ~]# vim /etc/docker/daemon.json
    
    [root@docker20 ~]# cat /etc/docker/daemon.json 
    {
        "registry-mirrors": ["https://reg.timinglee.org"]
    }
    
    //拉取 Docker Hub 公网镜像时,让 Docker 先去你配置的地址请求,而不是直接访问国外官网
    [root@docker20 ~]# systemctl restart docker

    下载镜像

    [root@docker20 yum.repos.d]# docker pull timinglee/busybox
    Using default tag: latest
    latest: Pulling from timinglee/busybox
    8acfacc0e959: Pull complete 
    Digest: sha256:91c66c844e6bba57e92e10e755e73a816d0b99edd17eb5297d9ac519ab3a8c81
    Status: Downloaded newer image for timinglee/busybox:latest
    docker.io/timinglee/busybox:latest
    
    
    
    
    [root@docker20 reg.timinglee.org]# docker pull reg.timinglee.org/timinglee/busybox:latest
    latest: Pulling from timinglee/busybox
    Digest: sha256:91c66c844e6bba57e92e10e755e73a816d0b99edd17eb5297d9ac519ab3a8c81
    Status: Downloaded newer image for reg.timinglee.org/timinglee/busybox:latest
    reg.timinglee.org/timinglee/busybox:latest
    [root@docker20 reg.timinglee.org]# docker images
                                                                                                                                                                                 i Info →   U  In Use
    IMAGE                                        ID             DISK USAGE   CONTENT SIZE   EXTRA
    reg.timinglee.org/timinglee/busybox:latest   af3f0f48a24e       4.43MB             0B        
    timinglee/busybox:latest                     af3f0f48a24e       4.43MB             0B        
    [root@docker20 reg.timinglee.org]# 
    

    原生的三种网络模式

    (安装好docker后默认的网络模式)

    1.bridge桥接

    通过docker网卡连接宿主机的网络

    2.host仅主机

    直接连接宿主机的网络

    3.none没有网络

    docker的自定义网络

    1.bridge

    默认的网段是172.17.0.0

    新建的在此上递增172.18.0.0 ,172.19.0.0 .。。。。

    个网络间相互隔离

    自定义的桥接在关闭重启后ping容器名还是可以ping通,默认的桥接只能ping变化的ip

    2.overlay

    3.macvian

    join网络实战

    1.加载实验镜像

    [root@docker10 ~]# docker load -i phpmyadmin-latest.tar.gz
    9853575bc4f9: Loading layer [==================================================>]  3.584kB/3.584kB
    Loaded image: phpmyadmin:latest
    [root@docker10 ~]# docker load -i mysql-8.0.tar
    1355aaece24a: Loading layer [==================================================>]  116.9MB/116.9MB
    1.536kB/1.536kB
    Loaded image: mysql:8.0
    [root@docker10 ~]# 
    

    2.运行容器并部署join网络

    [root@docker10 ~]# docker run -d --name php -e PMA_ARBITRARY=1 -p 80:80 phpmyadmin:latest 
    1ae4876ceadb9fe33e3434aa1df29e85a11ae354595dff38f7528fbcbba54777
    [root@docker10 ~]# docker run -d --name mysql -e MYSQL_ROOT_PASSWORD='xier' --network container:php mysql:8.0 
    4ba3c22f3dd573358607b4f29c5b3eab3ee3f63165a9ab49cf5921dc0c8af12e
    [root@docker10 ~]# 

    3.访问测试

    http://172.25.254.10

    容器的内外网访问

    容器访问外网

    做源地址转化(snat)

    外部访问容器

    目的地址转化(dnat)和docker代理两条路(那个先响应走那个)

    docker跨主机网络通信

    macvlan网络方式实现跨主机通信

    1.设定硬件添加网卡

    两台主机添加网卡并设定为host-only

    右键设置中添加

    2.开启混杂模式
    [root@docker10 ~]# ip link set eth1 promisc on
    [root@docker10 ~]# ip a s eth1
    10: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:02:21:66 brd ff:ff:ff:ff:ff:ff
        altname enp11s0
        altname ens192
    [root@docker10 ~]# ip link set up eth1
    
    [root@docker20 ~]# ip link set eth1 promisc on
    [root@docker20 ~]# ip link set up eth1
    [root@docker20 ~]# ip a s eth1
    4: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:93:df:ee brd ff:ff:ff:ff:ff:ff
        altname enp11s0
        altname ens192
    [root@docker20 ~]# 
    3.配置自建网络
    [root@docker10 ~]# docker network create -d macvlan --subnet 1.1.1.0/24 --gateway 1.1.1.1 -o parent=eth1 xier
    0752d535412036c16e7dc3ff2561975f9761cafb4f12bb75418c0b989858b0a3
    [root@docker10 ~]# docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    d544892ae84c   bridge    bridge    local
    7dde1e780a57   host      host      local
    a7c3da154da5   none      null      local
    0752d5354120   xier      macvlan   local
    
    
    
    [root@docker20 ~]# docker network create -d macvlan --subnet 1.1.1.0/24 --gateway 1.1.1.1 -o parent=eth1 xier
    190a8e6498d5d35a01128d445adf149956018dafecd2161cd38075170ffe9cb2
    [root@docker20 ~]#  docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    8e38d7ed488a   bridge    bridge    local
    3650ba207593   host      host      local
    c236bc857eb0   none      null      local
    190a8e6498d5   xier      macvlan   local
     
    
    
    -d macvlan:使用 macvlan 网络驱动
    --subnet 1.1.1.0/24:容器网段设定为 1.1.1.0/24
    --gateway 1.1.1.1:网关 1.1.1.1
    -o parent=eth1:绑定物理网卡 eth1(你刚才开了混杂模式的那张)
    xier:网络名字
    4.测试
    [root@docker10 ~]# docker run -it --name busybox --rm --network xier --ip 1.1.1.100 --rm busybox:latest 
    / # ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    11: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
        link/ether 66:96:8c:89:37:e8 brd ff:ff:ff:ff:ff:ff
        inet 1.1.1.100/24 brd 1.1.1.255 scope global eth0
           valid_lft forever preferred_lft forever
    / # 
    
    
    [root@docker20 ~]# docker run -it --name busybox --rm --network xier --ip 1.1.1.200 --rm timinglee/busybox:latest 
    / # ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    5: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
        link/ether f6:9d:ad:30:8c:ec brd ff:ff:ff:ff:ff:ff
        inet 1.1.1.200/24 brd 1.1.1.255 scope global eth0
           valid_lft forever preferred_lft forever
    / # ping 1.1.1.100
    PING 1.1.1.100 (1.1.1.100): 56 data bytes
    64 bytes from 1.1.1.100: seq=0 ttl=64 time=1.679 ms
    64 bytes from 1.1.1.100: seq=1 ttl=64 time=1.714 ms
    64 bytes from 1.1.1.100: seq=2 ttl=64 time=0.756 ms
    64 bytes from 1.1.1.100: seq=3 ttl=64 time=0.729 ms
    ^C
    --- 1.1.1.100 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 0.729/1.219/1.714 ms
    / # 
    

    Docker 数据卷管理及优化

    一.bind mount 数据卷

    挂载目录到容器,没有自动创建

    [root@docker-node1 ~]# ls -ld /data
    ls: 无法访问 '/data': 没有那个文件或目录
    ​
    [root@docker-node1 ~]# docker run  -it --rm --name test  -v /data:/data -v /data1:/data1:ro  -v /etc/passwd:/passwd:ro  busybox:latest
    ​
    / # ls -ld /data /data1 /etc/passwd
    drwxr-xr-x    2 root     root             6 Mar 22 01:56 /data
    drwxr-xr-x    2 root     root             6 Mar 22 01:58 /data1
    -rw-r--r--    1 root     root           340 May 18  2023 /etc/passwd
    / # touch  /data/file
    / # ls /data
    file
    ​
    / # touch  /data1/file
    touch: /data1/file: Read-only file system
    ​
    / # > passwd
    sh: can't create passwd: Read-only file system
    ​

    二.docker manager 卷

    docker managed volume 不需要指定mount源,docker自动为容器创建数据卷目录
    默认创建的数据卷目录都在 /var/lib/docker/volumes
    如果挂载时指向容器内已有的目录,原有数据会被复制到volume
    清理未使用的数据卷
    [root@docker ~]# docker volume prune
    [root@docker-node1 ~]# docker volume create timinglee
    timinglee
    [root@docker-node1 ~]# docker volume ls
    DRIVER    VOLUME NAME
    local     timinglee
    ​
    [root@docker-node1 volumes]# touch  timinglee/_data/file
    ​
    [root@docker-node1 ~]# docker run  -it --rm -v timinglee:/data:ro busybox:latest
    / # ls
    bin    data   dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
    / # touch  data/file
    touch: data/file: Read-only file system
    / # ls data/
    file
    ​
    ​
    [root@docker-node1 ~]# docker volume rm timinglee
    timinglee
    [root@docker-node1 ~]# docker volume ls
    DRIVER    VOLUME NAME
    ​

    三.数据卷容器

    让两个容器在运行时数据卷情况完全一致

    [root@docker-node1 ~]# docker run  -it --rm --name data -v /etc/hosts:/hosts:ro -v /data:/data busybox:latest
    / # cat /hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    172.25.254.10     docker-node1
    172.25.254.10     reg.timinglee.org
    / # > /hosts
    sh: can't create /hosts: Read-only file system
    / #
    / #
    / # touch  /data/timinglee
    / # ls /data/
    file       timinglee
    ​
    ​
    [root@docker-node1 ~]# docker run -it --rm --name lee --volumes-from data  busybox:latest
    / # ls
    bin    data   dev    etc    home   hosts  lib    lib64  proc   root   sys    tmp    usr    var
    / # cat hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    172.25.254.10     docker-node1
    172.25.254.10     reg.timinglee.org
    / # > hosts
    sh: can't create hosts: Read-only file system
    / # ls /data/
    file       timinglee
    ​

    四. 数据的备份和迁移

    [root@docker-node1 ~]# docker run  -d --name webserver -p 80:80 -v /data:/usr/share/nginx/html nginx:1.23
    
    [root@docker-node1 ~]# docker exec  -it webserver bash
    
    root@23951ce13871:/# cd /usr/share/nginx/html/
    root@23951ce13871:/usr/share/nginx/html# ls
    index.html  timinglee
    root@23951ce13871:/usr/share/nginx/html# touch timinglee{1..10}
    root@23951ce13871:/usr/share/nginx/html# ls
    index.html  timinglee1   timinglee2  timinglee4  timinglee6  timinglee8
    timinglee   timinglee10  timinglee3  timinglee5  timinglee7  timinglee9
    
    
    #数据备份
    [root@docker-node1 ~]# docker run  -it --rm  --volumes-from webserver  -v $(pwd):/backup  busybox:latest
    / # ls
    backup  bin     dev     etc     home    lib     lib64   proc    root    sys     tmp     usr     var
    / # ll /usr/share/nginx/html/
    sh: ll: not found
    / # ls /usr/share/nginx/html/
    index.html   timinglee1   timinglee2   timinglee4   timinglee6   timinglee8
    timinglee    timinglee10  timinglee3   timinglee5   timinglee7   timinglee9
    / # tar zcf /backup/html.tar.gz /usr/share/nginx/
    tar: removing leading '/' from member names
    / # ls
    backup  bin     dev     etc     home    lib     lib64   proc    root    sys     tmp     usr     var
    / # exit
    [root@docker-node1 ~]# ls
    busybox-latest.tar.gz  docker                                mysql-8.0.tar
    busyboxplus.tar        harbor-offline-installer-v2.14.0.tgz  nginx-1.23.tar.gz
    debian11.tar.gz        html.tar.gz                           phpmyadmin-latest.tar.gz
    
    
    #数据恢复
    [root@docker-node1 ~]# rm -fr /data/*
    [root@docker-node1 ~]# docker exec  -it webserver webserverbash
    OCI runtime exec failed: exec failed: unable to start container process: exec: "webserverbash": executable file not found in $PATH
    [root@docker-node1 ~]# docker exec  -it webserver bash
    root@23951ce13871:/# ls
    bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
    boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr
    root@23951ce13871:/# cd /usr/share/nginx/html/
    root@23951ce13871:/usr/share/nginx/html# ls
    root@23951ce13871:/usr/share/nginx/html#
    
    
    [root@docker-node1 ~]# docker run  -d --name webserver -p 80:80 -v /data:/usr/share/nginx/html  -v $(pwd):/backup nginx:1.23
    83a26edb472ecda951e241dc207847111cd4a2712cb349c52205c3d0e2727238
    [root@docker-node1 ~]# docker exec  -it webserver bash
    
    root@83a26edb472e:/# tar zxf /backup/html.tar.gz -C /
    root@83a26edb472e:/# ls /usr/share/nginx/html/
    index.html  timinglee1   timinglee2  timinglee4  timinglee6  timinglee8
    timinglee   timinglee10  timinglee3  timinglee5  timinglee7  timinglee9
    tar zcf /backup/html.tar.gz /usr/share/nginx/
    
    tar zcf 打包后的文件 源文件
    
    z 用gzip压缩
    
    c create创建新包
    
    f 指定包文件名
    
    
    
    tar zxf /backup/html.tar.gz -C /
    
    z 用gzip解压
    
    x extract解压
    
    f 指定压缩包文件
    
    -C / 按原来的路径原样恢复

    更多推荐