[步骤] Docker 本地镜像的导出和导入

注意:在导入和导出本地 Docker 镜像之前,要先安装 Docker

正文:

步骤一:导出 Docker 本地镜像
# docker save centos:latest > centos.tar

(补充:将 latest 版本的 centos Docker 镜像导出为 centos.tar)

步骤二:导入 Docker 本地镜像
# docker load

(补充:导入 centos.tar)

[步骤] 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.3 将 yum 的从库文件放到镜像配置文件的目录
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

1.4 将刚刚创建的容器转换成新镜像
# docker commit d5cd7496a72c newos:v1 

1.5 测试刚刚创建的新镜像是否可用
# docker run -it newos

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

2.2 创建镜像配置文件
# touch ~/newhttpd/Dockerfile

2.3 将 yum 的从库文件放到镜像配置文件的目录
# cp /etc/yum.repos.d/local.repo ~/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

2.6 测试刚刚创建的新镜像是否可用
# docker run -d newos:http

[步骤] 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 <镜像的 ID 或镜像名>

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

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

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

1.1.1.2 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令
1.1.1.2.1 在非交互模式下在前台加载并启动 Docker 镜像同时执行命令的格式
# docker run <镜像的 ID 或镜像名> <镜像里的命令>

(
补充:
(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 <镜像的 ID 或镜像名>

(
补充:
(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 <镜像的 ID 或镜像名>

(
补充:
(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 <宿主机的端口号>:<容器的端口号> -it <镜像的 ID 或镜像名>

(
补充:
(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 <宿主机上的文件或目录>:<容器上的文件或目录> -it <镜像的 ID 或镜像名>

(
补充:
(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 <镜像的 ID 或镜像名>

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

5.2 查看容器的 IP 地址
# docker inspect -f '{{.NetworkSettings.IPAddress}}' <镜像的 ID 或镜像名>

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

5.3 查看容器的 MAC 地址
# docker inspect -f '{{.NetworkSettings.MacAddress}}' <镜像的 ID 或镜像名>

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

步骤六:连接某一个容器
6.1 连接某一个容器但是退出时会关闭这个容器
# docker attach <镜像的 ID 或镜像名>

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

6.2 连接某一个容器且退出时不会关闭这个容器
# docker exec -it <镜像的 ID 或镜像名> /bin/bash

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

6.3 以非交互的形式连接一个容器
# docker exec -t <镜像的 ID 或镜像名> <要执行的命令>

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

步骤七:重启某一个容器
# docker restart <容器的 ID 或镜像名>

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

步骤八:启动某一个已经停止的容器
# docker stop <容器的 ID 或镜像名>

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

步骤九:删除某一个容器
# docker rm <容器的 ID 或镜像名>

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