[步骤] Docker 私有镜像仓库的搭建

注意:

在搭建私有 Docker 镜像仓库之前,要先安装 Docker

正文:

内容目录:

内容一:搭建私有 Dokcer 镜像仓库
1.1 下载 registry 镜像
1.2 加载并启动 registry 镜像
1.3 确认 Docker 镜像仓库搭建成功

内容二:私有 Dokcer 镜像库的使用方法
2.1 将现有的 Docker 镜像上传到私有 Docker 镜像库
2.1.1 给现有的 Docker 镜像在私有 Docker 镜像库中打上一个新的标签
2.1.2 将现有的 Docker 镜像上传到私有 Docker 镜像库
2.2 显示私有的 Docker 镜像库
2.2.1 显示私有的 Docker 镜像库中有那些镜像
2.2.2 显示私有的 Docker 镜像库中某个镜像有哪些版本
2.3 从私有的 Docker 镜像库中下载镜像

具体的内容:

内容一:搭建私有 Dokcer 镜像仓库
1.1 下载 registry 镜像

# docker pull registry

1.2 加载并启动 registry 镜像

# docker run -d -p 5000:5000 registry
43c6b8c581e9039c8b7df12bb11a89dbdc9ff0b7e00fd6d345068aa9b5af7d9f

(补充:这里以使用宿主机的 5000 端口为例)

1.3 确认 Docker 镜像仓库搭建成功

# curl 127.0.0.1:5000/v2/
{}

(补充:这里以显示 127.0.0.1:5000/v2/ 为例,出现大括号 “{}” 则表示搭建成功)

内容二:私有 Dokcer 镜像库的使用方法
2.1 将现有的 Docker 镜像上传到私有 Docker 镜像库
2.1.1 给现有的 Docker 镜像在私有 Docker 镜像库中打上一个新的标签

# docker tag centos:latest 127.0.0.1:5000/v2/centos:latest

(补充:这里以将现有的 centos:latest 镜像打成 127.0.0.1:5000/v2/centos:latest 标签为例)

2.1.2 将现有的 Docker 镜像上传到私有 Docker 镜像库

# docker push 127.0.0.1:5000/centos:latest
The push refers to repository [127.0.0.1:5000/centos]
291f6e44771a: Pushed 
latest: digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 size: 529

(补充:这里以上传 127.0.0.1:5000/v2/centos:latest 为例)

2.2 显示私有的 Docker 镜像库
2.2.1 显示私有的 Docker 镜像库中有那些镜像

# curl  http://127.0.0.1:5000/v2/_catalog
{"repositories":["centos"]}

(补充:这里以显示 127.0.0.1:5000/v2/ 为例)

2.2.2 显示私有的 Docker 镜像库中某个镜像有哪些版本

# curl  http://127.0.0.1:5000/v2/centos/tags/list
{"name":"centos","tags":["latest"]}

(补充:这里以显示 http://127.0.0.1:5000/v2 上 centos 镜像的版本为例)

2.3 从私有的 Docker 镜像库中下载镜像

# docker pull 127.0.0.1:5000/v2/centos:latest
latest: Pulling from v2/centos
Digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
Status: Image is up to date for 127.0.0.1:5000/v2/centos:latest
127.0.0.1:5000/v2/centos:latest

(补充:这里以下载 127.0.0.1:5000/v2/centos:latest 为例)

[步骤] Docker 自定义镜像的创建

注意:

在创建 Docker 自定义镜像之前,要先安装 Docker

正文:

步骤目录:

步骤一:基于现有的镜像进行手动配置后再创建

1.1 加载并启动 Docker 镜像
1.2 对镜像里的系统进行操作并退出
1.3 显示刚刚创建的容器
1.4 将刚刚创建的容器转换成新镜像
1.5 测试刚刚创建的新镜像是否可用

步骤二:基于现有的镜像使用配置文件修改后在创建
2.1 创建使用镜像配置文件的目录
2.2 创建镜像配置文件
2.4 编辑镜像配置文件
2.5 使用刚刚创建的镜像配置文件创建新的镜像
2.6 测试刚刚创建的新镜像是否可用

具体的操作步骤:
步骤一:基于现有的镜像进行手动配置后再创建
1.1 加载并启动 Docker 镜像

# docker run -it centos


补充:
1) 这里以加载并启动 centos 镜像为例
2) -t 代表要开启一个伪终端
3) -i 代表要保持打开并且可以进行标准输入

1.2 对镜像里的系统进行操作并退出

(步骤略)

1.3 显示刚刚创建的容器

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d5cd7496a72c        centos              "/bin/bash"              37 seconds ago      Exited (0) 14 seconds ago                       ecstatic_bassi

(补充:这里以显示到的容器 ID 是 d5cd7496a72c)

1.4 将刚刚创建的容器转换成新镜像

# docker commit d5cd7496a72c newos:v1 

(补充:这里以通过 d5cd7496a72c 生成 v1 版本的 newos 为例)

1.5 测试刚刚创建的新镜像是否可用

# docker run -it newos

(补充:这里以运行 newos 镜像为例)

步骤二:基于现有的镜像使用配置文件修改后在创建
2.1 创建使用镜像配置文件的目录

# mkdir -p ~/newhttpd

(补充:这里以创建 newhttpd 目录为例)

2.3 将 yum 的从库文件放到镜像配置文件的目录

# cp /etc/yum.repos.d/local.repo ~/newhttpd

(补充:这里以将在次环境里可用的 yum 配置文件 /etc/yum.repos.d/local.repo 拷贝到 ~/newhttpd/ 为例)

2.3 创建镜像配置文件

# touch ~/newhttpd/Dockerfile

(补充:这里以创建 ~/newhttpd/Dockerfile 文件为例)

2.4 编辑镜像配置文件

# vim ~/newhttpd/Dockerfile

创建以下内容:

FROM centos:latest
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/
RUN echo "test" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]


补充:
1) FROM 要从哪一个镜像克隆而来,这里以从 centos:latest 克隆为例
2) MAINTAINER 要说明的信息
3) ENV 要设置的环境变量,这里以使用以下文件作为配置文件为例:

/etc/sysconfig/httpd

4) WORKDIR 要设置的工作目录,这里以使用以下目录作为工作目录为例:
/var/www/html/
5) RUN 在生成镜像时要执行的命令,可以有多条,这里以执行以下命令为例:

echo "test" > /var/www/html/index.html

6) CMD 容器启动时要执行的命令,只能有一条,这里以执行以下命令为例:

"/usr/sbin/httpd", "-DFOREGROUND"

7) ADD 要复制的文件
8) EXPOSE 要开放的端口,这里以使用 80 端口为例

2.5 使用刚刚创建的镜像配置文件创建新的镜像

# docker build -t newos:httpd ~/newhttpd

(补充:这里以通过 ~/newhttpd 里的配置信息生成为名 newos 版本为 httpd 的容器为例)

2.6 测试刚刚创建的新镜像是否可用

# docker run -d newos:http

(补充:这里以测试名为 newos 版本为 httpd 的容器为例)

[步骤] Docker 虚拟网桥的创建

注意:

在创建 Docker 虚拟网桥之前,要先安装 Docker

正文:

步骤一:创建 Docker 的虚拟网桥

# docker network create --subnet=172.16.0.0/24 dockernetwork

(补充:这里以创建网段为 172.16.0.0/24 名为 dockernetwork 为例)

步骤二:显示创建的虚拟网桥

# docker network list

步骤三:使用创建的虚拟网桥加载并启动 Docker 镜像

# docker run --network=dockernetwork -id nginx

(补充:这里以使用 dockernetwork 开启 nginx 镜像为例)

步骤四:创建端口映射

# docker run -p 8080:80 -id nginx

(补充:这里以将宿主机的 8080 端口映射到 nginx 容器的 80 端口为例)

步骤五:显示端口映射是否实现

# curl 127.0.0.1:8080

(补充:这里以显示宿主机的 8080 端口为例)

[步骤] Docker 容器的使用

注意:

在使用 Docker 容器之前,要先安装 Docker

正文:

内容目录:

内容一:加载并启动 Docker 镜像
1.1 在前台启动 Docker 镜像
1.1.1 在非交互模式下在前台加载并启动 Docker 镜像
1.1.1.1 在非交互模式下在前台加载并启动 Docker 镜像但不执行命令
1.1.1.1.1 在非交互模式下在前台加载并启动 Docker 镜像但不执行命令的格式
1.1.1.1.2 在非交互模式下在前台加载并启动 Docker 镜像但不执行命令的案例
1.1.1.2 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令
1.1.1.2.1 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令的格式
1.1.1.2.2 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令的案例
1.1.2 在交互模式下在前台加载并启动 Docker 镜像
1.1.2.1 在交互模式下在前台加载并启动 Docker 镜像的格式
1.1.2.2 在交互模式下在前台启动 Docker 镜像的案例
1.2 在后台启动 Docker 镜像
1.2.1 在后台启动 Docker 镜像的格式
1.2.2 在后台启动 Docker 镜像的案例

步骤二:将容器的端口号映射宿主机的端口号
2.1 将容器的端口号映射宿主机的端口号的格式
2.2 将容器的端口映射宿主机的端口的案例

步骤三:将宿主机上的文件或目录映射到容器的文件或目录里
3.1 将宿主机上的文件或目录映射到容器的文件或目录里的格式
3.2 将宿主机上的文件或目录映射到容器的文件或目录里的案例

步骤四:显示容器列表
4.1 显示正在运行的容器列表
4.2 显示所有加载并运行过或正在运行的容器列表

步骤五:显示容器的信息
5.1 显示容器在运行的进程
5.2 显示容器的 IP 地址
5.3 显示容器的 MAC 地址

步骤六:连接某一个容器
6.1 连接接某一个容器但是退出时会关闭这个容器
6.2 连接某一个容器且退出时不会关闭这个容器
6.3 以非交互的形式连接一个容器

步骤七:重启某一个容器

步骤八:启动某一个已经停止的容器

步骤九:删除某一个容器

具体的内容:

内容一:加载并启动 Docker 镜像
1.1 在前台启动 Docker 镜像
1.1.1 在非交互模式下在前台加载并启动 Docker 镜像
1.1.1.1 在非交互模式下在前台加载并启动 Docker 镜像但不执行命令
1.1.1.1.1 在非交互模式下在前台加载并启动 Docker 镜像但不执行命令的格式

# docker run <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像
3) 镜像启动了之后就变成容器了

1.1.1.1.2 在非交互模式下在前台加载并启动 Docker 镜像但不执行命令的案例

# docker run centos

(补充:这里以非交互式加载并启动 centos 镜像 为例)

1.1.1.2 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令
1.1.1.2.1 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令的格式

# docker run <image ID or image name> <command in image>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像
3) 镜像启动了之后就变成容器了

1.1.1.2.2 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令的案例

# docker run centos /bin/echo 'Hello world'
Hello world

(补充:这里以非交互式加载并启动 centos 镜像,并执行 /bin/echo ‘Hello world’ 为例)

1.1.2 在交互模式下在前台加载并启动 Docker 镜像
1.1.2.1 在交互模式下在前台加载并启动 Docker 镜像的格式

# docker run centos -t -i <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像
3) 镜像启动了之后就变成容器了
4) -i 代表要保持打开并且可以进行标准输入
5) -t 代表要开启一个伪终端

1.1.2.2 在交互模式下在前台启动 Docker 镜像的案例

# docker run -t -i centos
[root@1a7d6f4fd45c /]# exit
exit


补充:
1) 这里以交互式加载并启动 centos 镜像,再退出为例
2) -i 代表要保持打开并且可以进行标准输入
3) -t 代表要开启一个伪终端
4) 默认会进入 bash 环境

或者:

# docker run -it centos
 bash
[root@1a7d6f4fd45c /]# exit
exit


补充:
1) 这里以交互式加载并启动 centos 镜像,再退出为例
2) -i 代表要保持打开并且可以进行标准输入
3) -t 代表要开启一个伪终端
4) bash 代表通过 bash 命令来进入 bash 环境

1.2 在后台启动 Docker 镜像
1.2.1 在后台启动 Docker 镜像的格式

# docker run -tid <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像
3) 镜像启动了之后就变成容器了
4) -i 代表要保持打开并且可以进行标准输入
5) -t 代表要开启一个伪终端
6) -d 代表放在后台运行

1.2.2 在后台启动 Docker 镜像的案例

# docker run -itd centos


补充:
1) 这里以在后台加载并启动 centos 镜像为例
2) -i 代表要保持打开并且可以进行标准输入
3) -t 代表要开启一个伪终端
4) -d 代表放在后台运行

步骤二:将容器的端口号映射宿主机的端口号
2.1 将容器的端口号映射宿主机的端口号的格式

# docker run -d -p <the port number of the host>:<the port number of the container> -it <image ID or image name>


补充:
1) 需要在加载并启动镜像时执行此步骤
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的容器,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像
3) 镜像启动了之后就变成容器了
4) -d 代表放在后台运行
5) -p 代表要做端口映射
6) -i 代表要保持打开并且可以进行标准输入
7) -t 代表要开启一个伪终端

2.2 将容器的端口映射宿主机的端口的案例

# docker run -d -p 8080:80 -it nginx

(补充:这里以启动 nginx 镜像,并将宿主机的 8080 端口映射到容器的 80 端口为例)

步骤三:将宿主机上的文件或目录映射到容器的文件或目录里
3.1 将宿主机上的文件或目录映射到容器的文件或目录里的格式

# docker run -d -v <a file or directory on the host>:<a file or directory on the container> -it <image ID or image name>


补充:
1) 需要在加载并启动镜像时执行此步骤
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的容器,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像
3) 镜像启动了之后就变成容器了
4) -d 代表放在后台运行
5) -v 代表要做文件或目录映射
6) -i 代表要保持打开并且可以进行标准输入
7) -t 代表要开启一个伪终端

3.2 将宿主机上的文件或目录映射到容器的文件或目录里的案例

# docker run  -d -v /tmp/web:/var/www/html -it nginx

(补充:这里以启动 nginx 镜像,并将宿主机的目录/tmp/web 映射到容器的目录 /var/www/html 为例)

步骤四:显示容器列表
4.1 显示正在运行的容器列表

# docker ps

4.2 显示所有加载并运行过或正在运行的容器列表

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
e145ad3588ed        centos              "/bin/bash"         19 seconds ago      Exited (0) 17 seconds ago                       thirsty_mcnulty

步骤五:显示容器的信息
5.1 显示容器在运行的进程

# docker top <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

5.2 显示容器的 IP 地址

# docker inspect -f '{{.NetworkSettings.IPAddress}}' <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

5.3 显示容器的 MAC 地址

# docker inspect -f '{{.NetworkSettings.MacAddress}}' <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

步骤六:连接某一个容器
6.1 连接某一个容器但是退出时会关闭这个容器

# docker attach <image ID or image name>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

6.2 连接某一个容器且退出时不会关闭这个容器

# docker exec -it <image ID or image name> /bin/bash


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) -i 代表要保持打开并且可以进行标准输入
3) -t 代表要开启一个伪终端
4) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

6.3 以非交互的形式连接一个容器

# docker exec -t <image ID or image name> <command>


补充:
1) 如果使用镜像名无效就使用镜像的 ID
2) -t 代表要开启一个伪终端
3) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

步骤七:重启某一个容器

# docker restart <container ID or container name>


补充:
1) 如果使用容器名无效就使用容器的 ID
2) 如果容器的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的容器,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

步骤八:启动某一个已经停止的容器

# docker stop <container ID or container name>


补充:
1) 如果使用容器名无效就使用容器的 ID
2) 如果镜像的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的容器,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

步骤九:删除某一个容器

# docker rm <container ID or container name>


补充:
1) 如果使用容器名无效就使用容器的 ID
2) 如果容器的 ID 只有一个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的容器,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像