docker

docker安装

linux安装

#1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ,通过 uname -r 命令查看你当前的内核版本:
$ uname -r

#2.使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update

#3.卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker  docker-common docker-selinux docker-engine

#4.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#5.设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#6.可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r

#7.安装docker
$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce
yum install docker-ce -y # 安装最新版本
#显示已安装,完毕 安装完成

#8.启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker

#9.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version

[!WARNING]

注意事项:

#1.因为之前已经安装过旧版本的docker,在安装的时候报错如下:
Transaction check error:
  file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

#2.卸载旧版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

#3.再次安装docker
$ sudo yum install docker-ce

离线安装部署docker

#先下载docker安装包
#下载地址:https://download.docker.com/linux/static/stable/x86_64/
d2ee36bf614d2104e72d612e5df39983 *./docker-20.10.22.tgz
dcccb711f981286cce767a56dbc7e044 *./docker.service
c052af2d53231cd5c23dca8e7cfc575f *./docker.socket
#上传到目的服务器再解压安装
#解压
tar xzvf docker-20.10.22.tgz
#拷贝
cp docker/* /usr/bin/
#临时启动检查服务是否正常
dockerd &
#安装系统服务
cp docker.socket /etc/systemd/system
cp docker.service /etc/systemd/system
systemctl daemon-reload
systemctl start docker
systemctl enable docker

在线部署docker

# 服务器下载 docker,并启动服务
yum install -y docker
systemctl daemon-reload
systemctl restart docker.service

windos安装docker-desktop

[!WARNING]

win11没有hyper-v

# 以下文件保存记事本,然后重命名为*.bat

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
# 然后右键,以管理员身份运行:
# 1、BIOS开启虚拟化
# 2、控制面板,windos更新程序,启用Hyper-V&子系统&虚拟机平台
# 3、下载 适用于 x64 计算机的 WSL2 Linux 内核更新包,下载完成后,双击打开安装即可
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
# 4、下载docker-desktop安装包:
https://www.docker.com/products/docker-desktop/
https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe

# 更改安装位置:1.可以设置代理文件夹,2.cmd执行安装

start /w "" "Docker Desktop Installer.exe" install --installation-dir=E:\Docker

start /w "" "Docker_Desktop_Installer.exe" install --installation-dir=E:\application\docker

# 24年4月,新版安装后第一次打开需要开科技,否则会很慢

# 安装完成后可以修改镜像源为阿里源
在国内从官方的DockerHub拉取镜像经常会比较感人,所以我们需要利用国内的镜像源或者加速器
科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
Docker Engine:
{
  "registry-mirrors": [
      "https://hub-mirror.c.163.com",
      "https://mirror.baidubce.com",
      "https://registry.hub.docker.com",
      "https://docker.mirrors.ustc.edu.cn",
      "https://registry.docker-cn.com"
  ],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}

# 默认 安装完成的两个wsl镜像位置C:\Users\wuchaozhi\AppData\Local\Docker\wsl\distro

# 安装完成后可以修改默认安装位置
# 1、清空方法:Docker右上角小虫子(Troubleshoot)- Clean / Purge data,弹出窗口全部打勾
# 清空后Docker内所有镜像消失,之前的hello-world也消失,此时先选择好自己想要迁移到哪里,比如D盘,然后新建文件夹,比如DockerImages,打开以后在里面继续创建两个文件夹:docker-desktop和docker-desktop-data,名字不用完全一致,只是为了好区分。创建这两个文件夹的原因是在Terminal中之前看到的docker-desktop和docker-desktop-data一个存放程序,一个存放镜像,路径不能一样。然后把Docker完全退出!否则会出问题!
 wsl --list --verbose
# 2、接下来在Terminal操作:
wsl --export docker-desktop docker-desktop.tar
wsl --export docker-desktop-data docker-desktop-data.tar

# 然后注销docker的wsl子系统
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
# 再在新位置重新创建
wsl --import docker-desktop E:\DockerImages\docker-desktop docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\DockerImages\docker-desktop-data docker-desktop-data.tar --version 2
# 修改容器保存位置完成


## 注意:docker-desktop镜像好像没有办法迁移了,试了多次一启动,C盘就会自动恢复镜像,后面观察


安装过程注意事项

[!WARNING]

日志位置:%LOCALAPPDATA%\Docker\log

整体应用相关文件路径:

C:\ProgramData\DockerDesktop\pki

C:\Users<user_name>\AppData\Local\Docker\pki

部署指南2:(没有验证过)

以下是在Windows 10上使用WSL安装Kubernetes的步骤:

  1. 启用WSL:

    • 打开PowerShell(管理员)
    • 运行 wsl --install
  2. 安装Linux发行版(如Ubuntu):

    • 在Microsoft Store中搜索并安装Linux发行版(如Ubuntu)
    • 启动已安装的发行版(例如,通过Microsoft Store或搜索Ubuntu并运行它)
  3. 更新Linux系统并安装Docker:

    • 更新软件包列表:sudo apt-get update
    • 安装Docker:sudo apt-get install docker.io
  4. 安装kubectl:

  5. 安装Minikube:

    • 下载Minikube二进制文件:

      curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

    • 使Minikube可执行:chmod +x minikube

    • 移动Minikube到PATH:sudo mv minikube /usr/local/bin/

  6. 启动Minikube:

    • 运行 minikube start

请注意,这只是一个基本的安装指南。在实际生产环境中,Kubernetes通常运行在由多个Linux服务器组成的集群上,而不是在单个Windows系统上。

docker使用

docker常用命令

启动docker [root@localhost ~]# systemctl start docker

开机启动docker [root@localhost ~]# systemctl enable docker

停止docker [root@localhost ~]# systemctl stop docker

查看docker的版本

[root@localhost ~]# docker -v

Docker version 1.13.1, build 64e9980/1.13.1

查看全部环境里镜像

docker images

搜索镜像 [root@localhost ~]# docker search 关键字

拉取镜像(去docker hub上检索镜像的详细信息 :tag是可选的,tag表示标签,多为软件的版本,默认是latest) [root@localhost ~]# docker pull 镜像名:tag

搜索镜像 [root@localhost ~]# docker search 关键字

拉取镜像(去docker hub上检索镜像的详细信息 :tag是可选的,tag表示标签,多为软件的版本,默认是latest) [root@localhost ~]# docker pull 镜像名:tag

根据镜像创建一个容器 --name:后面接要给容器取的名字,以此为例,如果不写--name tomcat01,系统会自动取名 :last是默认版本,不写也可以 [root@localhost ~]# docker run --name tomcat01 -d tomcat:latest

启动容器(CONTAINER-ID:指定容器的id) [root@localhost ~]# docker start CONTAINER-ID

停止运行中的容器 [root@localhost ~]# docker stop CONTAINER-ID

删除指定容器 [root@localhost ~]# docker rm CONTAINER-ID

查看运行中的容器 [root@localhost ~]# docker ps

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

查看指定容器的错误日志(CONTAINER-ID:指定容器的id) [root@localhost ~]# docker logs CONTAINER-ID

为容器做端口映射(以tomcat为例,运行以下命令后可以访问linux的IP地址:8888) -d:后台运行 -p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口 [root@localhost ~]# docker run -d -p 8888:8080 tomcat

查看防火墙状态

[root@localhost ~]# service firewalld status

关闭防火墙

[root@localhost ~]# service firewalld stop

进入容器

docker exec -it 容器ID bashShell

从容器拷贝文件到宿主机

docker cp 容器ID:容器内路径 目的主机路径

导出容器

docker export 容器ID > 文件名.tar

导入容器

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

创建容器并映射宿主机文件

docker run -d --name prometheus -p 9090:9090 -v /宿主机路径:/容器路径

docker部署示例

docker部署监控服务来springboot项目

1.Spring Boot 工程集成 Micrometer

1.1引入依赖
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
1.2配置
management.server.port=9003
management.endpoints.web.exposure.include=*
management.endpoint.metrics.enabled=true
management.endpoint.health.show-details=always
management.endpoint.health.probes.enabled=true
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
management.metrics.tags.application=voice-qc-backend

这里 management.endpoints.web.exposure.include=* 配置为开启 Actuator 服务,因为Spring Boot Actuator 会自动配置一个 URL 为 /actuator/Prometheus 的 HTTP 服务来供 Prometheus 抓取数据,不过默认该服务是关闭的,该配置将打开所有的 Actuator 服务。

management.metrics.tags.application 配置会将该工程应用名称添加到计量器注册表的 tag 中去,方便后边 Prometheus 根据应用名称来区分不同的服务。

1.3监控jvm信息

然后在工程启动主类中添加 Bean 如下来监控 JVM 性能指标信息:

@SpringBootApplication
public class GatewayDatumApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayDatumApplication.class, args);
    }

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(
            @Value("${spring.application.name}") String applicationName) {
        return (registry) -> registry.config().commonTags("application", applicationName);
    }

}

在浏览器访问 http://127.0.0.1:9001/actuator/prometheus ,就可以看到服务的一系列不同类型 metrics 信息,例如jvm_memory_used_bytes gaugejvm_gc_memory_promoted_bytes_total countergo_api_report_dial_request_count

到此,Spring Boot 工程集成 Micrometer 就已经完成,接下里就要与 Prometheus 进行集成了。

2.集成 Prometheus

2.1安装
docker pull prom/prometheus
mdkir /usr/local/prometheus
vi prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
    - targets: ["localhost:9090"]
  - job_name: "metricsLocalTest"
    metrics_path: "/actuator/prometheus"
    static_configs:
    - targets: ["localhost:8080"]
# 运行Prometheus容器
docker run -d --name prometheus -p 9090:9090 -v /usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

3.使用 Grafana Dashboard 展示监控项

3.1安装grafana
docker pull grafana/grafana
docker run -d --name grafana -p 3000:3000 -v /usr/local/grafana:/var/lib/grafana grafana/grafana

默认用户名/密码 admin/admin

配置prometheus数据源

最后注意:各个容器里面配置的是ip而不是localhost,因为localhost代表的是容器本身,注意这点

镜像仓库

网易:http://hub-mirror.c.163.com
中科大镜像地址:http://mirrors.ustc.edu.cn/
中科大github地址:https://github.com/ustclug/mirrorrequest
Azure中国镜像地址:http://mirror.azure.cn/
Azure中国github地址:https://github.com/Azure/container-service-for-azure-china
DockerHub镜像仓库: https://hub.docker.com/ 
阿里云镜像仓库: https://cr.console.aliyun.com 
google镜像仓库: https://console.cloud.google.com/gcr/images/google-containers/GLOBAL (如果你本地可以翻墙的话是可以连上去的 )
coreos镜像仓库: https://quay.io/repository/ 
RedHat镜像仓库: https://access.redhat.com/containers

国外搜索镜像的地址:https://hub.docker.com/

阿里加速镜像地址:https://ojfmpo6q.mirror.aliyuncs.com

C:\ProgramData\Docker\config\daemon.json

   {
     "registry-mirrors": ["https://<your_mirror>.mirror.aliyuncs.com"]
   }



docker pull ojfmpo6q.mirror.aliyuncs.com/obsidiandynamics/kafdrop:3.30.0
{
  "registry-mirrors": [
    "https://docker.hpcloud.cloud",
    "https://docker.m.daocloud.io",
     "https://docker.unsee.tech",
    "https://docker.1panel.live",
    "http://mirrors.ustc.edu.cn",
    "https://docker.chenby.cn",
    "http://mirror.azure.cn",
    "https://dockerpull.org",
    "https://dockerhub.icu",
    "https://hub.rat.dev"
    
  ]
}

制作容器镜像

运行一个基础镜像,并且保持运行不退出

docker run -d --name my-alpine-container alpine tail -f /dev/null

使用 commit 制作镜像

制作基础镜像

[!TIP]

在 commit 方法中,为了制作镜像,需要先利用基础镜像创建一个容器。接下来使用 docker run 创建容器 ubuntu-commit。

除此之外,再使用docker inspect 命令查看基础容器镜像的层信息。

docker run -itd --name ubuntu-commit ubuntu 
docker inspect -f "{{json .RootFS.Layers}}"  ubuntu | jq

查看容器修改内容

接下来对容器的内容进行修改,在容器中执行 apt-get update 命令修改容器中的文件。在文件修改之后,可以通过 docker diff 命令查看文件的修改详情,该命令格式为 docker diff 容器名

docker exec ubuntu-commit apt-get update 
docker diff ubuntu-commit

生成新的镜像

在前面的实验中,容器镜像的是以只读分层的方式进行存储的。当通过镜像创建容器之后,每一个容器都会生成一个可以编写的存储层,所有用户对容器的文件修改,都会记录在容器存储层中。当把容器镜像的只读层和容器存储层叠加起来之后,就得到了容器的完整存储内容。而 docker diff 命令查看的,正是容器存储层所保存的内容。

在了解容器存储层的相关知识之后,就可以执行 docker commit 命令生成新的镜像,其命令的格式为 docker commit 容器名 新镜像名。镜像生成之后使用 docker images 进行验证。

docker commit ubuntu-commit ub/commit 
docker images

使用 build 制作镜像

除了通过 docker commit 命令,Docker还提供了另一种 docker build 的方式来构建容器镜像。

1、制作 Dockerfile 文件

要使用 docker build 的方式制作容器,需要先制作 Dockerfile 文件。Dockerfile 是纯文本文件,使用 vim 等纯文本文件编辑工具进行编写。接下来使用 vim 命令生成Dockerfile。注意使用 vim 编辑器时:

  • 需要先按i键进入编辑模式。
  • 编辑完成之后按esc退出编辑模式。
  • 然后按大写的ZZ保存并退出vim。
vim Dockerfile

然后将下面的内容复制到Dockerfile中:

FROM ubuntu:latest  
RUN apt-get update

2、制作容器镜像

Dockerfile 文件编写完毕后,就可以根据该文件,使用 docker build 命令来制作容器镜像,该命令的格式为docker build -t 容器镜像名 Dockerfile所在路径。命令的第三个参数用于指定 Dockerfile 文明的位置,如果Dockerfile 文件就在控制台的当前目录下,一般使用 . 来设置。

docker build -t ub/build . 
docker images

Dockerfile 命令列表

Dockerfile文件的格式于脚本文件,每一行是一条命令,每行的格式为命令 参数。Dockerfile主要支持的命令如下表,因篇幅的原因,本实验中我们无法具体演示每一条指令的用法,只会讲解一些重要的命令,。

FROM指定基础镜像,必须为第一个命令
LABEL为镜像添加标签
RUN构建时执行的命令行指令
ADD将本地文件添加到容器中,如果为tar类型文件,则会自动解压,可以访问网络资源,类似wget(网络资源不会被解压)
COPY将本地文件添加到容器中,不会解压,也不可以访问网络资源
CMD容器启动时执行的命令,只有最后一条可以生效,可以被docker run的启动命令覆盖。
ENTRYPOINT容器启动时执行的入口,只有最后一条可以生效,一定会被执行,不可以被覆盖。
EXPOSE设置默认开放的网络端口(后面的实验会涉及到)
VOLUME设置默认加载的VOLUME卷(后面的实验会涉及到)
ENV设置环境变量。
WORKDIR设置默认的工作目录。
USER设置容器运行时的用户。
ONBUILD构建触发器,当此镜像被其他镜像用作基础镜像时,触发器会被执行。
ARG设置构建参数,可以通过docker build --build-arg将参数从外部传到到Dockerfile构建过程中。

通过docker save和docker load命令构建

[!WARNING]

注意:docker save的镜像都不能导出对容器里文件的操作

docker save用来将镜像保存为一个 tar 文件,docker load用来将 tar 格式的镜像文件加载到当前机器上,例如:

# 在 A 机器上执行,并将 nginx-v1.0.0.tar.gz 复制到 B 机器
$ docker save nginx | gzip > nginx-v1.0.0.tar.gz

# 在 B 机器上执行
$ docker load -i nginx-v1.0.0.tar.gz

通过docker export和docker import命令构建

通过docker export 保存容器的镜像,再通过docker import 加载镜像,具体命令如下:

# 在 A 机器上执行,并将 nginx-v1.0.0.tar.gz 复制到 B 机器
$ docker export nginx > nginx-v1.0.0.tar.gz

# 在 B 机器上执行
$ docker import - nginx:v1.0.0 nginx-v1.0.0.tar.gz
12345

通过docker export导出的镜像和通过docker save保存的镜像相比,会丢失掉所有的镜像构建历史。在实际生产环境中,我不建议你通过docker save和docker export这两种方式来创建镜像。

较推荐的方式是:在 A 机器上将镜像 push 到镜像仓库,在 B 机器上从镜像仓库 pull 该镜像。

部署私人镜像仓库

在 Docker 中推送镜像的命令是 docker push,但是默认的 docker push 命令会将镜像推送到 docker 公共仓库。为了能将镜像推送到私人仓库,首先要使用 docker tag 命令为镜像设置需要推送的仓库信息。其命令的参数为docker tag [本地镜像名] [私有仓库的URL][私有仓库的镜像名称]。在标记镜像之后,使用 docker images 命令查看会发现,为本地镜像设置 tag 之后,会在本地镜像列表中生成一个新的镜像。

1、部署私人镜像仓库

首先学习如何启动docker私人镜像仓库。docker的默认私人镜像仓库 registry 应用也提供了镜像的部署方式。也就是说可以像启动其他容器一样的方式,本机用docker来启动默认的私有镜像仓库。当默认的私有镜像仓库启动之后,会使用http接口方式对外提供服务。

此处使用 --network=host 参数,指定容器在启动时使用Host网络模型。

docker run -d  --network=host --name registry-1 registry 

验证网络服务

当使用 Host网络模型 创建容器后,容器会和宿主机共享网络设置,这也就意味着容器中启动网络服务,同样可以在宿主机中使用127.0.0.1的网络地址访问。关于Host网络模型的详细用法,在后面的实验中还会有讲解。 当仓库容器启动后,会在 5000端口 启动服务。我们可以在宿主机中使用 netstat 命令验证。

netstat -tunple | grep 5000

img

测试服务

接下来验证私人仓库的http服务接口是否可用,通过 curl 命令验证仓库的运行,常用的验证地址为 [私人仓库IP]:5000/v2/_catalog 。通过验证我们发现私人镜像仓库服务已经启动。

curl 127.0.0.1:5000/v2/_catalog

img

向私有仓库中推送镜像

如何将本地 docker 中的镜像推送到私有仓库中。

为镜像设置仓库信息

默认的 docker push 命令会将容器推送到docker公共仓库,为了能将镜像推送到私人仓库,要使用 docker tag 命令为镜像设置需要推送的仓库信息。其命令的参数为 docker tag [本地镜像名] [私有仓库的URL][私有仓库的镜像名称]。标记镜像之后,使用 docker images 命令查看会发现,为本地镜像设置 tag 之后,会在本地镜像列表中生成一个新的镜像。

docker tag ub/commit 127.0.0.1:5000/ub/commit 
docker images

img

向仓库推送镜像

通过 docker tag 命令生成新的镜像之后,就可以使用 docker push 将已经标记过的镜像,直接推送到私人仓库中。命令的参数为 docker push tag后的镜像名:镜像版本

docker push 127.0.0.1:5000/ub/commit:latest

img

通过私有仓库API验证推送

当镜像上传到私人仓库之后。可以通过访问 curl [私人仓库IP]:5000/v2/_catalog 列出仓库中的镜像信息。同时还可以通过 curl [私人仓库IP]:5000/v2/[镜像名称]/list 来查看镜像的版本信息。

curl 127.0.0.1:5000/v2/_catalog 
curl 127.0.0.1:5000/v2/ub/commit/tags/list

img

从私有仓库中拉取镜像

1、删除本地镜像

为了验证从私有仓库下载镜像,先通过 docker rmi 命令删除本地的容器镜像。

docker rmi ub/commit  
docker rmi 127.0.0.1:5000/ub/commit

img

2、从私有仓库中拉取镜像

当通过 docker push 将镜像推送到私人仓库之后。其他人就可以通过 docker pull 命令将其拉取到本地。拉取私有仓库镜像的命令格式为 docker pull [私有仓库的URL][私有仓库的镜像名称]

docker pull 127.0.0.1:5000/ub/commit 
docker images

3、查看本地镜像信息

对于已经拉取到本地的容器镜像,可以通过 docker inspcet 来查看镜像的仓库信息和 repo tag 信息。在使用docker inspcet命令时,可以使用 -f 参数进行信息过滤,具体的过滤语法会在后面的实验中详细讲解。

docker inspect -f \ "{\"RepoTags\":{{json .RepoTags}}, \"RepoDigests\":{{json .RepoDigests}}}" \ 127.0.0.1:5000/ub/commit | jq

docker-compose

docker-compose命令

// 启动一个docker组
docker-compose -p {name} up -d
---- 重新部署docker组
// 停止docker
docker-compose -p {name} down 
docker-compose -p {name} up -d
// 查看运行状态
docker-compose ps
// 查看实时日志
docker-compose logs -f
// 停止并移除所有服务
docker-compose down -v

Docker--harbor私有仓库部署

# 从国内源拉取镜像
docker pull registry.docker-cn.com/library/harbor:2.5.0

# 标记镜像为你的 Harbor 实例
docker tag registry.docker-cn.com/library/harbor:2.5.0 your-harbor-host/library/harbor:2.5.0

# 推送镜像到你的 Harbor 实例
docker push your-harbor-host/library/harbor:2.5.0

阿里私有镜像仓库

# 登录命令
docker login --username=1634255313abc crpi-p8k0mnyihsth1omv.cn-beijing.personal.cr.aliyuncs.com
# 从镜像仓库拉取镜像
docker pull crpi-p8k0mnyihsth1omv.cn-beijing.personal.cr.aliyuncs.com/seeyon1/work:[镜像版本号]
# 推送镜像仓库到远程
$ docker login --username=1634255313abc crpi-p8k0mnyihsth1omv.cn-beijing.personal.cr.aliyuncs.com
$ docker tag [ImageId] crpi-p8k0mnyihsth1omv.cn-beijing.personal.cr.aliyuncs.com/seeyon1/work:[镜像版本号]
$ docker push crpi-p8k0mnyihsth1omv.cn-beijing.personal.cr.aliyuncs.com/seeyon1/work:[镜像版本号]