docker容器

一 安装部署

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

bash 复制代码
#利用阿里云部署软件仓库
[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常用命令

bash 复制代码
[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 ~]# 
bash 复制代码
# 查看正在运行的容器
[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 ~]# 
bash 复制代码
#镜像查看
[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

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

bash 复制代码
#建立构建目录
[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 不可覆盖

bash 复制代码
[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镜像(自己配置软件仓库的镜像)

bash 复制代码
[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:

bash 复制代码
[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:

bash 复制代码
[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.登录
bash 复制代码
#登陆官方仓库
[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.上传镜像
bash 复制代码
[root@docker ~]# docker tag gcr.io/distroless/base-debian11:latest  timinglee/base-debian11:latest
[root@docker ~]# docker push  timinglee/base-debian11:latest
3.下载
bash 复制代码
docker search 仓库名称

docker pull 名称/镜像

搭建docker的私有仓库

2.搭建简单的Registry仓库

1.下载Registry镜像

bash 复制代码
[root@docker ~]# docker pull registry

下载不了用压缩包导入

bash 复制代码
-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

bash 复制代码
[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.上传镜像到仓库中

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

bash 复制代码
[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认证需要的认证文件所以会报错

bash 复制代码
[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 ~]# 

#配置非加密端口

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

#上传镜像

bash 复制代码
[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 ~]# 

#查看

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

3.为Registry添加密传输

1.还原环境

bash 复制代码
[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.创建证书

bash 复制代码
[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仓库

bash 复制代码
--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.在两台主机添加域名解析

bash 复制代码
[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建立证书

bash 复制代码
[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 ~]# 

上传测试

bash 复制代码
[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.建立认证文件

bash 复制代码
[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容器中

bash 复制代码
[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.测试

bash 复制代码
[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:我信任这个仓库

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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.解压安装包到指定目录

bash 复制代码
[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.复制安装要用的文件

bash 复制代码
[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.复制之前创造的证书到指定目录

bash 复制代码
[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]# 

(没有证书重新创建)

bash 复制代码
[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.编辑安装要用的文件

bash 复制代码
[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 端口(避免端口冲突)

bash 复制代码
[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.安装

bash 复制代码
[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.服务的开启,删除和关闭

bash 复制代码
[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.上传镜像

查看所有镜像

bash 复制代码
[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        

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

bash 复制代码
[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

加标签上传

bash 复制代码
[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

bash 复制代码
[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]# 

查看可安装的版本

bash 复制代码
[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]# 

安装

bash 复制代码
[root@docker10 harbor]# dnf install docker-ce-3:28.5.2-1.el9 -y

修改配置文件

bash 复制代码
[root@docker10 harbor]# vim /lib/systemd/system/docker.service 

15   ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true

重新加载并设置开机自启

bash 复制代码
[root@docker10 harbor]# systemctl daemon-reload 
[root@docker10 harbor]# systemctl enable --now docker.service

导入镜像

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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]# 

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

检测

bash 复制代码
[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加速器

bash 复制代码
[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

下载镜像

bash 复制代码
[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.加载实验镜像

bash 复制代码
[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网络

bash 复制代码
[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.开启混杂模式
bash 复制代码
[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.配置自建网络
bash 复制代码
[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.测试
bash 复制代码
[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
​

四. 数据的备份和迁移

bash 复制代码
[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
bash 复制代码
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 / 按原来的路径原样恢复
相关推荐
wewowilling2 小时前
认识微服务
java·运维·微服务·springcloud
玖石书2 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
VIP_CQCRE3 小时前
给团队搭一个 AI 工作台:Open WebUI 接入 Ace Data Cloud 实战
docker·ai·rag·open webui·ace data cloud
weifont3 小时前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏4 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Mikko75 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
光依旧5 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
yichengerp6 小时前
电子行业常用erp系统有哪些?推荐适合中小电子厂的易呈erp软件,操作简单,易落地
大数据·运维·人工智能·云计算·制造
天国梦6 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
程序员老赵7 小时前
Docker 部署 Portainer CE:轻松搭建容器管理平台
docker·容器·开源