Dokcer 架构/安装/使用/相关资源

Docker 的基础,包含基本概念、基本安装、使用步骤和相关资源,内容主要以 CentOS/Ubuntu/Windows 10、11 为主。

Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker架构

相关的概念:

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

Docker 安装

Docker for Windows

在 Windows 中安装,需要开启虚拟化(一般为默认开启)和 Hyper-V 功能。

![](myimages\Docker\Docker-开启 Hyper-V.png)

在 Docker 官网中下载安装包。下载地址:

如果出现了 WSL 2 的错误,参见:旧版 WSL 的手动安装步骤 | Microsoft Docs

Docker For CentOS

命令执行默认为 root,如果没有请切换或加 sudo

安装 Docker

  1. 查看 CentOS 内核 版本

    1
    uname -r

    Linux 内核:官方建议 3.10 以上。

  2. 使用 root 权限更新 yum 包(生产环境中此步操作需慎重,看自己情况,学习的话随便搞)

    1
    yum -y update

    这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了

    1
    2
    3
    注意 
    yum -y update:升级所有包同时也升级软件和系统内核;
    yum -y upgrade:只升级所有包,不升级软件和系统内核
  3. 卸载旧版本(如果之前安装过的话)

    1
    yum remove docker  docker-common docker-selinux docker-engine
  4. 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

    1
    yum install -y yum-utils device-mapper-persistent-data lvm2
  5. 设置 yum 源(阿里仓库)

    1
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  6. 安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:

    1
    yum install docker-ce docker-ce-cli containerd.io
  7. 查看可用版本有哪些

    1
    yum list docker-ce --showduplicates | sort -r
  8. 通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1。

    1
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

    例如:

    1
    yum install docker-ce-20.10.3 docker-ce-cli-20.10.3 containerd.io
  9. 启动 Docker 并设置开机自启

    1
    systemctl start docker
    1
    systemctl enable docker
  10. 通过运行 hello-world 映像来验证。

    1
    run hello-world

卸载 Docker

  1. 删除安装包:

    1
    yum remove docker-ce
  2. 删除镜像、容器、配置文件等内容:

    1
    rm -rf /var/lib/docker

参考:

Docker For Ubuntu

  1. 卸载旧版本

    1
    apt-get remove docker docker-engine docker.io containerd runc
  2. 使用 Docker 仓库进行安装,使用 Docker 仓库进行安装。

    更新 apt 包索引。

    1
    apt-get update
  3. 安装 apt 依赖包,用于通过HTTPS来获取仓库:

    1
    apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  4. 添加 Docker 的官方 GPG 密钥:

    1
    curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

    9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。

    1
    apt-key fingerprint 0EBFCD88
  5. 使用以下指令设置稳定版仓库

    1
    add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
  6. 安装 Docker Engine-Community

    更新 apt 包索引。

    1
    apt-get update
  7. 安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:

    1
    apt-get install docker-ce docker-ce-cli containerd.io
  8. 要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

    1
    apt-cache madison docker-ce

    使用第二列中的版本字符串安装特定版本,例如 5:18.09.13-0ubuntu-xenial。

    1
    apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
  9. 测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:

    1
    docker run hello-world

Docker For MacOS

emmmm…等我有💴了吧…

Docker 加速

原文见:Docker 镜像加速 | 菜鸟教程 (runoob.com)

Ubuntu/CentOS

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://94mv0tmt.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

阿里云容器镜像服务 (aliyun.com)

Docker 使用

Docker 镜像

显示本地镜像

使用 docker images 来列出本地主机上的镜像。

1
docker images

输出中各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为 15.10 的ubuntu系统镜像来运行容器时,命令如下:

1
docker run -t -i ubuntu:15.10 /bin/bash 

参数说明:

  • -i: 交互式操作。
  • -t: 终端。

显示镜像信息

返回镜像信息

1
docker images -q
  • q - 它告诉docker命令仅返回镜像的ID。

输出将显示有关镜像的详细信息。

1
docker inspect Repository
  • Repository - 这是镜像的名称。

下载镜像

使用 docker pull 命令来下载新的镜像。

1
docker pull

查找镜像

可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

1
docker search httpd

输出说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

删除镜像

删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

1
$ docker rmi hello-world

创建/更新镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

更新镜像

使用镜像来创建一个容器。

1
docker run -t -i ubuntu:15.10 /bin/bash

在运行的容器内使用 apt-get update命令进行更新。

在完成操作之后,输入 exit 命令来退出这个容器。

此时 ID 为 e218edb10161 的容器,是按需求更改的容器。可以通过命令 docker commit 来提交容器副本。

1
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
  • -m: 提交的描述信息

  • -a: 指定镜像作者

  • e218edb10161:容器 ID

  • runoob/ubuntu:v2: 指定要创建的目标镜像名

可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2

1
docker images

使用新镜像 runoob/ubuntu 来启动一个容器

1
docker run -t -i runoob/ubuntu:v2 /bin/bash

创建镜像

使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

1
2
3
4
5
6
7
8
9
10
11
runoob@runoob:~$ cat Dockerfile 
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"

RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

1
2
3
4
5
6
7
8
9
10
11
12
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---&gt; d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---&gt; Using cache
---&gt; 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---&gt; Using cache
---&gt; 0397ce2fbd0a
Step 4 : RUN useradd runoob
......

参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用 docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

1
2
3
runoob@runoob:~$ docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/centos 6.7 860c279d2fec About a minute ago 190.6 MB

我们可以使用新的镜像来创建容器

1
2
3
runoob@runoob:~$ docker run -t -i runoob/centos:6.7  /bin/bash
[root@41c28d18b5fb /]# id runoob
uid=500(runoob) gid=500(runoob) groups=500(runoob)

从上面看到新镜像已经包含创建的用户 runoob。

设置镜像标签

可以使用 docker tag 命令,为镜像添加一个新的标签(dev)。

1
runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev
  • 860c279d2fec 镜像ID
  • runoob/centos:dev 用户名称/镜像源名(repository name):新的标签名(tag)。

使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

1
2
3
4
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/centos 6.7 860c279d2fec 5 hours ago 190.6 MB
runoob/centos dev 860c279d2fec 5 hours ago 190.6 MB

Docker 容器

运行一个容器内的应用程序

例如 Hello World:

1
docker run ubuntu:15.10 /bin/echo "Hello world"
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令。

Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。


通过 docker 的两个参数 -i -t,让 docker 运行的容器实现交互式的能力:

1
docker run -i -t ubuntu /bin/bash
  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。


创建一个以进程方式运行的容器

1
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

docker ps 来查看是否容器有在运行。

1
docker ps

docker ps默认列出正在运行的容器,docker ps -a会显示所有状态的容器。

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running 或 Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

1
docker logs 2b1b7a428627

使用 docker stop 命令来停止容器:

1
docker stop 2b1b7a428627

docker history ImageID

使用此命令,您可以通过容器查看通过映像运行的所有命令。

1
docker history ImageID

输出的内容包含以下属性:

  • IMAGE - 镜像
  • CREATED - 构建的时间
  • CREATED BY - 构建时候运行的命令
  • SIZE - 大小
  • COMMENT - 注释

Docker 使用容器

查看容器

查看所有的容器命令如下:

1
docker ps -a

使用 docker top 命令,您可以查看容器中的顶级进程。

1
docker top ContainerID

输出的内容包含以下属性:

  • UID - 运行容器的用户
  • PID - 进程id
  • PPID - 父进程id
  • C -
  • STIME - 上次运行的时刻
  • TTY - 运行的终端
  • TIME -
  • CMD - 运行的命令

命令 docker stats 用于提供正在运行的容器的统计信息。

1
docker rm ContainerID

成功运行输出:容器运行时候内存和 CPU 使用率等信息

  • CONTAINER ID - 容器id
  • NAME - 名称
  • CPU % - CPU使用率
  • MEM USAGE / LIMIT - 内存使用/内存限制
  • MEM % - 内存使用率
  • NET I/O - 网络IO情况
  • BLOCK I/O - 硬盘IO情况
  • PIDS - 进程id数

启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

1
docker run -it ubuntu /bin/bash
  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

1
exit

启动已经停止的容器

1
docker start b750bbbcfd88 
  • b750bbbcfd88 是容器的 ID

后台运行容器

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

1
docker run -itd --name ubuntu-test ubuntu /bin/bash

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec

暂停容器

命令 docker pause 用于暂停正在运行的容器。

1
docker pause ContainerID

命令 docker unpause 用于取消暂停的容器。

1
docker unpause ContainerID

停止容器

停止容器的命令如下:

1
docker stop <容器 ID>

停止的容器可以通过 docker restart 重启:

1
docker restart <容器 ID>

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

1
docker attach
1
docker exec

推荐使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

导入/导出容器

导出

如果要导出本地某个容器,可以使用 docker export 命令。

1
docker export 1e560fca3906 > ubuntu.tar

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar

导入

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

1
cat docker/ubuntu.tar | docker import - test/ubuntu:v1

也可以通过指定 URL 或者某个目录来导入,例如:

1
docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器

删除容器使用 docker rm 命令:

1
docker rm -f 1e560fca3906

下面的命令可以清理掉所有处于终止状态的容器。

1
docker container prune

终止容器中的进程

1
docker kill ContainerID

容器生命周期

容器生命周期

  • 最初,Docker容器将处于创建状态。
  • 然后,当使用docker run命令时,Docker容器进入运行状态。
  • docker kill命令用于终止现有的Docker容器。
  • docker pause命令用于暂停现有的Docker容器。
  • docker stop命令用于暂停现有的Docker容器。
  • docker run命令用于将容器从停止状态恢复到运行状态。

Web 应用容器

创建 web 容器

在docker容器中运行一个 Python Flask 应用来运行一个 web 应用。

1
docker pull training/webapp
1
docker run -d -P training/webapp python app.py
  • **-d:**让容器在后台运行。
  • **-P:**将容器内部使用的网络端口随机映射到我们使用的主机上。

查看 web 容器

使用 docker ps 来查看我们正在运行的容器:

1
2
3
runoob@runoob:~#  docker ps
CONTAINER ID IMAGE COMMAND ... PORTS
d3d5e39ed9d3 training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp

这里多了端口信息。0.0.0.0:32769->5000/tcp。可在浏览器中通过32769端口访问。

查询最后一次创建的容器:

1
docker ps -l 

设置端口号

也可以通过 -p 参数来设置不一样的端口:

1
docker run -d -p 5000:5000 training/webapp python app.py

使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。

1
docker port <容器ID/容器名字>

查看日志

1
docker logs <容器ID/容器名字>

查看 web 应用中的进程

1
docker top <容器ID/容器名字>

检查 web 程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

1
docker inspect <容器ID/容器名字>

停止 web 容器

1
docker stop <容器ID/容器名字>

重启 web 容器

已停止的容器

1
docker start <容器ID/容器名字>

正在运行的容器

1
docker restart <容器ID/容器名字>

删除 web 容器

1
docker rm

删除容器时,容器必须是停止状态,否则会报如下错误

1
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove

Docker 网络

列出所有Docker网络

1
docker network ls

检查 Docker网络

如果要查看与Docker关联的网络的更多详细信息,可以使用 docker network inspect 命令。

1
docker network inspect networkname
  • networkname - 需要检查的网络的名称。

创建新网络

可以在启动容器之前在Docker中创建网络。这可以使用以下命令完成

1
docker network create --driver drivername name
  • drivername - 这是用于网络驱动程序的名称。
  • name - 这是给网络的名称。

返回值:该命令将输出新网络的长ID。

网络端口映射

使用 -P 绑定端口号,也可以使用 -p 标识来指定容器端口绑定到主机端口。

两种方式的区别是:

  • -P :是容器内部端口随机映射到主机的端口。
  • -p : 是容器内部端口绑定到指定的主机端口。

使用 docker ps 来查看我们正在运行的容器,即可检查。

另外,可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

1
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

这样就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp

1
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

Docker 容器连接

容器命名

当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 –name 标识来命名容器,例如:

1
ocker run -d -P --name runoob training/webapp python app.py

容器连接

【例 1】

  1. 创建 Docker 网络

    1
    docker network create -d bridge test-net

    -d:参数指定 Docker 网络类型,有 bridge、overlay。

    其中 overlay 网络类型用于 Swarm mode。

  2. 连接容器

    运行一个容器并连接到新建的 test-net 网络:

    1
    docker run -itd --name test1 --network test-net ubuntu /bin/bash

    打开新的终端,再运行一个容器并加入到 test-net 网络:

    1
    docker run -itd --name test2 --network test-net ubuntu /bin/bash
  3. 通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。

    如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)。

    1
    apt-get update
    1
    apt install iputils-ping

    如果你有多个容器之间需要互相连接,推荐使用 Docker Compose

【例 2】

Container Linking允许多个容器相互链接。这是比暴露端口更好的选择。

  1. 使用 pull 命令下载 Jenkins 镜像。

    1
    docker pull jenkins
  2. 运行容器

    1
    docker run --name=jenkinsa -d jenkins
  3. 启动目标容器

    1
    docker run --name=reca --link=jenkinsa:alias-src -it ubuntu:latest /bin/bash

    Ctrl+P 然后 Ctrl+Q 退出目标容器,然后 sudo docker ps 可以看到有两个容器正在运行。

  4. 连接到接收容器

    1
    docker attach reca

    然后运行env命令。您会注意到与源容器链接的新变量(以ALIAS_SRC_为前缀的变量)。

Docker 仓库管理

公共仓库 Docker Hub

仓库(Repository)是集中存放镜像的地方。以下介绍一下 Docker Hub。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

登录/退出

登录

1
docker login

退出

1
docker logout

搜索镜像

1
docker search <镜像名>

拉取镜像

1
docker pull <镜像名>

推送镜像

1
docker push Repositoryname

镜像标记

1
docker tag imageID Repositoryname

私有仓库

您可能需要拥有自己的私有存储库。您可能不想在Docker Hub上托管存储库。为此,Docker中有一个存储库容器。让我们看看如何下载和使用容器进行注册。

  1. 使用docker run命令下载私有注册表。这可以使用以下命令完成。

    1
    sudo docker run -d -p 5000:5000 --name registry registry:2

    关于上述命令需要注意以下几点:

    • registry 是Docker管理的容器,可用于托管私有存储库。
    • 容器公开的端口号是5000.因此,使用-p命令,我们将相同的端口号映射到本地主机的5000端口号。
    • 我们只是将registry容器标记为“2”,以便在Docker主机上区分它。
    • -d 选项用于运行分离模式的容器。这样容器可以在后台运行
  2. 标记一个现有镜像,以便我们可以将它推送到我们的本地存储库。以 Ubuntu 为例。将其标记为私有存储库并添加标记名称ubantu。

    1
    sudo docker tag 3556258649b2 localhost:5000/ubuntu

    关于上述命令需要注意以下几点

    • 3556258649b2指的是centos图像的镜像ID 。
    • localhost:5000是我们的私有存储库的位置。
    • 我们在我们的私有存储库中将存储库名称标记为ubuntu。
  3. docker push 命令将存储库推送到我们的私有存储库。

    1
    sudo docker push localhost:5000/ubuntu
  4. docker rmi 命令删除 Ubuntu 设置的本地镜像。

    1
    sudo docker rmi ubuntu
    1
    sudo docker rmi 3556258649b2
  5. 现在我们的本地机器上没有任何 Ubuntu 镜像,现在我们可以使用以下docker pull命令从我们的私有存储库中提取 Ubuntu 镜像。

    1
    sudo docker pull localhost:5000/ubuntu

Docker Dockerfile

Docker Compose

Docker Machine

Swarm 集群管理

相关资源

Docker 资源

Docker 国内镜像

阿里云的加速器:https://help.aliyun.com/document_detail/60750.html

网易加速器:http://hub-mirror.c.163.com

官方中国加速器:https://registry.docker-cn.com

ustc 的镜像:https://docker.mirrors.ustc.edu.cn

daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)

参考