[步骤] Docker 容器的使用

注意:

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

正文:

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

1.2.2 在后台启动 Docker 镜像的案例
# docker run -itd centos


补充:
1) 这里以在后台加载并启动 centos 镜像为例
2) -i 代表要保持打开并且可以进行标准输入
3) -t 代表要开启 1 个伪终端
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 代表要开启 1 个伪终端

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 代表要开启 1 个伪终端

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 只有 1 个 9 开头,那就只用使用 9 ,如果有 94 和 95 开头的镜像,就需要使用 94 或 95,反正需要保证它们的唯一性,否则会一次性操作所有相关的镜像

5.3 显示容器的 MAC 地址

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


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

步骤六:连接某 1 个容器

6.1 连接某 1 个容器但是退出时会关闭这个容器

# docker attach <image ID or image name>


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

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

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


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

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

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


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

步骤七:重启某 1 个容器

# docker restart <container ID or container name>


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

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

# docker stop <container ID or container name>


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

步骤九:删除某 1 个容器

# docker rm <container ID or container name>


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

[步骤] Docker 官方镜像的下载

注意:

在下载 Docker 官方镜像之前,要先安装 Docker

正文:

步骤一:使用 Docker 官方的代理加速器

1.1 修改 Docker 的配置文件

# vim /etc/docker/daemon.json

将以下内容:

......
}

修改为:

......
  "registry-mirrors": ["https://registry.docker-cn.com"],
}


补充:
1) 此步骤是为了避免因网络问题导致下载官方 Docker 镜像不成功的情况
2) 主要目的是为了将 “registry-mirrors”: [“https://registry.docker-cn.com”], 放在大括号 “{}” 内

1.2 重启 Docker 服务

# systemctl restart docker

步骤二:显示本地已有的 Docker 镜像

# docker images

步骤三:查找某 1 个官方库里的 Docker 镜像

3.1 查找某 1 个官方库里的 Docker 镜像的格式

# docker search <image> 

3.2 查找某 1 个官方库里的 Docker 镜像名的案例

# docker search centos


补充:
1) 这里以查找 centos 镜像为例
2) 这里默认会从公网 docker.io 的官方镜像库里查找
3) 如果在查找的 DESCRIPTION 里出现了类似 The official build 的字样,则表示这个镜像是由官方制作的

步骤四:下载某 1 个官方库里的 Docker 镜像

4.1 下载某 1 个官方库里的 Docker 镜像的格式

4.1.1 下载某 1 个官方库里最新版的 Docker 镜像的格式
# docker pull <image>

或者:

# docker pull <image>:latest
4.1.2 下载某 1 个官方库里旧的指定版的 Docker 镜像的格式
# docker pull <image>:<version>

4.2 下载某 1 个官方库里的 Docker 镜像的案例

4.2.1 下载某 1 个官方库里最新版的 Docker 镜像的案例
# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete 
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest


补充:
1) 这里以下载 centos 镜像为例
2) 这里默认会从公网 docker.io 的官方镜像库里下载

4.2.2 下载某 1 个官方库里旧的指定版的 Docker 镜像的案例
# docker pull nginx:1
1: Pulling from library/nginx
d121f8d1c412: Downloading [============>                                      ]  6.728MB/27.09MB
ebd81fc8c071: Downloading [===============>                                   ]  8.289MB/26.4MB
655316c160af: Download complete                                                                                                                                 d121f8d1c412: Pull complete 
ebd81fc8c071: Pull complete 
655316c160af: Pull complete 
d15953c0e0f8: Pull complete 
2ee525c5c3cc: Pull complete 
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:1
docker.io/library/nginx:1


补充:
1) 这里以下载 nginx 的 1 版本为例
2) 这里默认会从公网 docker.io 的官方镜像库里下载

步骤五:显示官方库里 Docker 镜像是否成功下载到本地

# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
centos                                        latest              0d120b6ccaa8        7 weeks ago         215MB
nginx                                         1                   7e4d58f0e5f3        3 weeks ago         133MB

步骤六:删除 Docker 本地镜像

# docker rmi <image>

步骤七:上传 Docker 本地镜像

# docker push <image>

(补充:这里默认会往公网 docker.io 的官方镜像库里上传)

[步骤] Docker 的安装

步骤一:系统环境要求

服务器系统要配置好可用的软件源

步骤二:安装 Docker

2.1 CentOS&RHEL 安装 Docker

# yum -y install docker

2.2 openSUSE&SUSE 安装 Docker

# zypper -n install docker

(注意:从 CentOS&RHEL 8 开始,CentOS&RHEL 将用 podman 替代 Docker,所以 CentOS&RHEL 官方库中不再包含 Docker 的软件包)

步骤三:启动 Docker

# systemctl start docker

步骤四:显示 Docker 的信息

# docker info

Docker 容器简介

章节一:什么是容器

Docker 主要是由 Linux 内核的三个部分组成:
1) namesapce 用于将各个服务隔离开,并按需求分成一个个隔离组,每个隔离组就可以看作一个容器,各个隔离组之间相互隔离
2) CGroup 用于限制各个隔离组的可用资源,避免各个隔离组之间进行硬件资源争抢
3) SELinux 用于安全,也可以不要让资源裸奔

章节二:容器和虚拟机

容器和虚拟机类似,但是容器有很多部分公用着宿主机系统的环境和软件,而虚拟机系统和宿主机系统之间是完全隔离的