在本教程中,我们将介绍如何安装 Docker Desktop for Windows 并进行 CentOS 虚拟环境的设置

安装Docker Desktop for Windows并设置CentOS虚拟环境的初学者教程。

由于Docker版本19.03.2已经过时,因此我在2019年09月时基于这个版本进行了描述。但是现在为了更新,我在本次修订中选择了基于Docker版本19.03.13进行修改。

最近,当我们想使用Linux环境时,可以方便地使用免费的Docker Desktop(适用于Mac和Windows)来使用Linux容器。
这次,我们将详细介绍在Windows 10笔记本电脑上安装Docker Desktop for Windows并构建CentOS虚拟环境的步骤。

另外,在途中还会详细介绍Docker命令等内容,所以如果你是初学者并且希望构建一个CentOS虚拟环境,务必参考一下,非常感谢。

    • 前提条件

 

    • 事前準備

 

    • Docker Desktop for Windows のインストール

 

    • CentOS コンテナ (仮想環境) の構築

 

    • CentOS コンテナ (仮想環境)の整備

 

    作業済み CentOS コンテナ (仮想環境)の保存

请参考「【入门】安装首次 Docker Desktop for Mac 和设置 CentOS 的虚拟环境搭建」,了解在 macOS 上安装 Docker Desktop for Mac 和设置 CentOS 的虚拟环境的步骤。

前提条件

请参阅此处以获取有关系统要求的详细信息。

这次的Docker Desktop for Windows将使用Windows原生的Hyper-V虚拟化和网络。要在Windows 10上使用Hyper-V,需要Windows 10 Professional或更高版本。如果在Windows 10 Home上使用WSL2后端,则可以进行安装。请参考此处获取更多详细信息。

另外,本次安装设备的规格以及Windows的规格如下:

    • プロセッサ Intel(R) COre(TM) i5-6300U CPU @ 2.40GHz 2.50DHz

 

    • 実装RAM 8.00 GB

 

    • システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ-

 

    エディション Windows 10 Pro

事前准备

为了准备安装本次的Docker Desktop for Windows,需要先启用安装Windows机器上的Hyper-V。值得注意的是,以前需要在Docker官方网站上注册一个名为Docker ID的账户,但现在不再需要了。

启用Hyper-V

为了在本次使用中启用 Docker Desktop for Windows ,如果 Hyper-V 处于禁用状态,则需将其启用。
有多种方法可以启用 Hyper-V。在这里,我们将使用“控制面板\所有控制面板项目\程序和功能”的方法进行启用。

启用 Hyper-V 角色的设置。

    1. 在Windows上,右键点击Windows按钮,选择”应用和功能”。

 

    1. 在”相关设置”下选择”程序和功能”。

 

    1. 选择”启用或关闭Windows功能”。

 

    选择”Hyper-V”,点击”确定”。

需要重新启动 Windows 机器才能生效。

获取Docker ID

create-a-docker-id.PNG

安装适用于Windows的Docker桌面版。

安装

下载安装程序

您可以通过以下网站下载并安装Docker for Windows安装程序:

Docker Desktop

キャプチャ2.PNG

到这里为止,已经完成了对Windows机器的下载。

安装到Windows计算机

config.PNG
unpacking.PNG
instsuccess-1.PNG

请注意

setting3.PNG

确认行动

尝试检查 Docker 的版本

首先,让我们确认已安装的 Docker 版本。
启动 Windows PowerShell,并使用 docker version 命令来显示版本信息。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

> docker version
Client: Docker Engine - Community
 Cloud integration: 1.0.4
 Version:           20.10.0
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        7287ab3
 Built:             Tue Dec  8 18:55:31 2020
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.0
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       eeddea2
  Built:            Tue Dec  8 18:58:04 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
>

让我们尝试运行Hello World。

那么,让我们马上来尝试一下程序员熟悉的”你好,世界”。

docker run命令是从镜像中启动容器的命令。

> docker run hello-world

在上述命令中,创建并启动容器的意思是从名为hello-world的镜像中创建并启动。然而,由于本地没有hello-world镜像,因此Docker守护进程会从Docker Hub(由Docker公司运营的,在互联网上发布和共享镜像的Docker注册服务)下载hello-world镜像,并从该镜像启动容器。通常情况下,镜像由文件系统、应用程序、中间件和运行时所需的参数组成。

这个容器会打印以下标准输出并结束。

> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete                                                                                                                          Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

>
>  docker ps --all
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                     PORTS                NAMES
ad92e9623edb        hello-world              "/hello"                 7 minutes ago       Exited (0) 7 minutes ago                        cranky_carson

请注意

如果发生以下错误,则可能是与代理等网络相关设置有关的问题。

>  docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: no such host.
See 'docker run --help'.

请在Docker Desktop菜单中选择[设置],然后在[设置]对话框的[资源]选项卡中的[代理]下进行代理设置。

proxy1.PNG

構築 CentOS 容器(虛擬環境)。

在之前的 hello-world 示例中,你应该能够看到可以通过命令行轻松获取镜像并创建、启动、执行容器。
现在,让我们获取 CentOS 镜像,并创建、启动 CentOS 容器(虚拟环境)来进入正题。

获取 CentOS 的映像。

获取图像

在Docker Hub的CentOS仓库中,CentOS容器镜像也按照CentOS的不同版本进行标记和管理。

那么,让我们获取 CentOS7 的 Docker 镜像吧。通过使用 docker pull 命令来获取 Docker 镜像。

> docker pull centos:centos7
centos7: Pulling from library/centos
75f829a71a1c: Pull complete                                                                                                                          Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7

下载CentOS镜像已经完成。根据环境的不同,可能需要几十秒来完成下载。值得注意的是,pull命令中的”centos:centos7″表示从CentOS仓库中下载带有centos7标签的镜像。一旦理解了这个概念,就可以从各种不同的仓库下载各种不同的镜像。

确认获取的图像

您可以使用docker images命令来列出所获取的Docker镜像。

> docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
centos                   centos7             7e6257c9f8d8        2 months ago        203MB
hello-world              latest              bf756fb1ae65        10 months ago       13.3kB

这表明 CentOS 存储库中带有 CentOS7 标签的镜像的图像ID为 67fa590cfc1c,而使用 hello-world 存储库的最新标签的图像ID为 fce289e99eb9,并且这些图像用于运行 Hello World。

创建并启动 CentOS 容器。

创建并启动容器

如果可以获取到CentOS7的镜像,那么我们立即创建并启动CentOS容器来尝试。

要从Docker镜像创建和启动容器,可以使用docker run命令。我们执行以下docker run命令来创建和启动容器。在这里,我们给新创建的容器取名为”centos7f”。从CentOS7镜像中创建一个CentOS7容器,并同时启动容器,在这个时机自动登录,并连接到bash shell上。

> docker run -it --name="centos7f" centos:centos7 /bin/bash
#

这样一来,Centos容器会立即启动并进入登录状态。只需执行exit命令,容器就会停止。

# exit
exit
>

确认启动或存在的容器。

请尝试运行 docker ps 命令。
docker ps 命令可用于显示和获取容器列表。它会列出当前正在运行或存在的容器。如果没有指定选项,则会显示当前正在运行的容器。

> docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES

由于本次停机,目前没有正在运行的容器。

如果加上-a、–all选项,将显示包括停止的容器在内的所有容器。

> docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                          PORTS                NAMES
1f7f96f02acf        centos:centos7           "/bin/bash"              2 minutes ago       Exited (0) About a minute ago                        centos7f
ad92e9623edb        hello-world              "/hello"                 15 minutes ago      Exited (0) 15 minutes ago                            cranky_carson
ea26a0b635a

使用 CentOS:CentOS 7 的映像创建并启动一个名为 “CentOS7f” 的容器,执行 bin/sh 命令,并当前处于停止状态。

重新启动和连接Centos容器(虚拟环境)。

恢复停止中的容器。

您可以使用docker start命令重新启动停止的容器。
重新启动”centos7f”容器。

> docker start centos7f
centos7f

让我们使用docker ps命令确认容器”centos7f”已经成功重新启动。

> docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES
1f7f96f02acf        centos:centos7           "/bin/bash"              3 minutes ago       Up 20 seconds                            centos7f

连接到正在启动的容器

如果要连接并操作已启动的容器,请使用docker attach命令或docker exec命令。

对于docker attach命令,可参考以下方式:

> docker attach centos7f
#

然而,在使用 docker attach 命令连接到容器后,如果使用 exit 命令断开连接,容器将会停止运行。如果想要保持容器继续运行,需要连续按下 Ctrl + P,Ctrl + Q 来断开连接。

在这里,我们会持续按下 Ctrl + P、Ctrl + Q,然后退出容器并保持其运行状态。将会显示以下类似的消息。

# read escape sequence
>

现在,我们用docker ps命令来确认一下容器的状态。
CentOS容器”centos7f”正在运行。

> docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                      PORTS                NAMES
1f7f96f02acf        centos:centos7           "/bin/bash"              4 minutes ago       Up About a minute                                centos7f
ad92e9623edb        hello-world              "/hello"                 17 minutes ago      Exited (0) 17 minutes ago                        cranky_carson

>

如果处于此状态,您可以再次连接到 CentOS 容器 (centos7f)。

让我们使用docker exec命令而不是docker attach命令来连接并操作容器。但是要注意,它们之间有一些微妙的差别。

> docker exec -it centos7f /bin/bash
#

以下是`docker attach`命令和`docker exec`命令的操作区别:

– `docker attach`命令用于附加到正在运行的容器的主进程上,可以查看容器的标准输出和错误输出,但无法执行新命令。
– `docker exec`命令用于在运行的容器中执行新的命令,可以执行复杂的操作,例如启动其他进程或访问容器内部的文件系统。

(请注意,以下回答仅用于参考,因为AI模型在生成中文文本时可能存在一些不确定性。)

attach コマンドexec コマンド稼働中のコンテナで起動している PID=1 のプロセスの標準入出力 (STDIN/STDOUT) に接続 (attach) する。コンテナ内でシェルが動作していなければ接続することができない。attachコマンドで抜けるとコンテナが停止してしまうexitコマンドで抜けるてもコンテナは停止しない

创建和启动CentOS容器(虚拟环境)(在后台运行)。

创建并在后台启动容器

开始另一个Windows PowerShell实例。
使用以下的docker run命令以-d选项执行,并在命令提示符的后台创建并启动容器。
在这里,我们将新创建的容器命名为”centos7b”。
从centos7镜像中创建并在后台启动容器。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

> docker run -it -d --name="centos7b" centos:centos7 /bin/bash
5ba3a2a223414a5c06af543550a3abbd49b179b7b0b49804c42dd1275dc4219a
>

停止和删除 CentOS 容器(虚拟环境)。

要删除容器,首先需要停止正在运行的容器,然后再进行删除。

那么,我们可以使用docker ps命令来确认正在运行的容器。

> docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES
5ba3a2a22341        centos:centos7           "/bin/bash"              30 seconds ago      Up 29 seconds                            centos7b
1f7f96f02acf        centos:centos7           "/bin/bash"              7 minutes ago       Up 4 minutes                             centos7f

只需要一种选项:连续按下 Ctrl + P、Ctrl + Q,然后你应该能够确认正在运行中的容器 “centos7f” 和刚刚在后台启动的容器 “centos7b”。

停止正在运行的容器。

那么,您可以使用docker stop命令来停止正在运行的容器。

> docker stop centos7b centos7f
centos7b
centos7f

使用docker ps命令可以确认当前容器的运行状态。
正如先前提到的,如果添加了-a、–all选项,它将显示包括停止的容器在内的所有容器。

> docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                        PORTS                NAMES
5ba3a2a22341        centos:centos7           "/bin/bash"              2 minutes ago       Exited (137) 12 seconds ago                        centos7b
1f7f96f02acf        centos:centos7           "/bin/bash"              8 minutes ago       Exited (137) 12 seconds ago                        centos7f
ad92e9623edb        hello-world              "/hello"                 22 minutes ago      Exited (0) 22 minutes ago                          cranky_carson

现在可以确认存在三个容器:”centos7b”、”centos7f”和”cranky_carson”。”cranky_carson”容器的名称是从镜像hello-world创建并启动容器时唯一地、偶然决定的。所以可能显示不同的名称。

让我们使用”docker rm”命令来删除三个容器。

删除容器(虚拟环境)。

使用docker rm命令同时删除3个容器。

> docker rm centos7b centos7f laughing_lehmann
centos7b
centos7f
cranky_carson

当删除完成时,将输出要删除的容器名称。

> docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES

这样一来,所有的容器都已被删除。

删除图像

要删除Docker镜像,使用docker rmi命令。
在此之前,可以使用docker images命令来列出获取到的Docker镜像。

> docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
centos                   centos7             7e6257c9f8d8        2 months ago        203MB
hello-world              latest              bf756fb1ae65        10 months ago       13.3kB

使用docker rmi命令,尝试删除获取的Docker镜像。

> docker rmi centos:centos7 hello-world:latest
Untagged: centos:centos7
Untagged: centos@sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Deleted: sha256:7e6257c9f8d8d4cdff5e155f196d67150b871bbe8c02761026f803a704acb3e9
Deleted: sha256:613be09ab3c0860a5216936f412f09927947012f86bfa89b263dfa087a725f81
Untagged: hello-world:latest
Untagged: hello-world@sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63
> docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE

通过这个操作,所有的镜像已经从Docker中删除了。

CentOS容器(虚拟环境)的配置与维护

由于CentOS:CentOS7映像似乎是在最小配置下安装的CentOS7环境,因此在实际使用中,需要在构建的CentOS容器上进行必要的安装和环境设置工作。为了参考,下面介绍一下使sudo命令可用的步骤。

首先,由于删除了Centos7的容器和镜像等,为了复习,我将再次在Windows上的Docker中建立CentOS容器(虚拟环境)。

構築 CentOS 的容器(虛擬環境),進行復習。

获取 CentOS 的 Docker 镜像

> docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
>
>
> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       centos7   8652b9f0cb4c   6 weeks ago   204MB
>

创建并启动CentOS容器

> docker run -it --name="centos7" centos:centos7 /bin/bash
#

安装命令包。

在输入sudo、java、git、ant、wget、unzip等命令后,输出了类似于”未找到该命令”的消息。

# sudo
bash: sudo: command not found
#

首先,使用yum update命令将CentOS的软件包更新至最新状态。

# yum update
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
base                                                                                             | 3.6 kB  00:00:00
extras                                                                                           | 2.9 kB  00:00:00
updates                                                                                          | 2.9 kB  00:00:00
(1/4): base/7/x86_64/group_gz                                                                    | 153 kB  00:00:00
(2/4): extras/7/x86_64/primary_db                                                                | 222 kB  00:00:00
(3/4): updates/7/x86_64/primary_db                                                               | 4.7 MB  00:00:06
(4/4): base/7/x86_64/primary_db                                                                  | 6.1 MB  00:00:06
Resolving Dependencies
--> Running transaction check
---> Package bind-license.noarch 32:9.11.4-26.P2.el7 will be updated
---> Package bind-license.noarch 32:9.11.4-26.P2.el7_9.3 will be an update
---> Package centos-release.x86_64 0:7-9.2009.0.el7.centos will be updated
---> Package centos-release.x86_64 0:7-9.2009.1.el7.centos will be an update
---> Package coreutils.x86_64 0:8.22-24.el7 will be updated
---> Package coreutils.x86_64 0:8.22-24.el7_9.2 will be an update
---> Package curl.x86_64 0:7.29.0-59.el7 will be updated
---> Package curl.x86_64 0:7.29.0-59.el7_9.1 will be an update
---> Package device-mapper.x86_64 7:1.02.170-6.el7 will be updated
---> Package device-mapper.x86_64 7:1.02.170-6.el7_9.3 will be an update
---> Package device-mapper-libs.x86_64 7:1.02.170-6.el7 will be updated
---> Package device-mapper-libs.x86_64 7:1.02.170-6.el7_9.3 will be an update
---> Package glib2.x86_64 0:2.56.1-7.el7 will be updated
---> Package glib2.x86_64 0:2.56.1-8.el7 will be an update
---> Package kpartx.x86_64 0:0.4.9-133.el7 will be updated
---> Package kpartx.x86_64 0:0.4.9-134.el7_9 will be an update
---> Package libcurl.x86_64 0:7.29.0-59.el7 will be updated
---> Package libcurl.x86_64 0:7.29.0-59.el7_9.1 will be an update
---> Package openssl-libs.x86_64 1:1.0.2k-19.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.2k-21.el7_9 will be an update
---> Package python.x86_64 0:2.7.5-89.el7 will be updated
---> Package python.x86_64 0:2.7.5-90.el7 will be an update
---> Package python-libs.x86_64 0:2.7.5-89.el7 will be updated
---> Package python-libs.x86_64 0:2.7.5-90.el7 will be an update
---> Package systemd.x86_64 0:219-78.el7 will be updated
---> Package systemd.x86_64 0:219-78.el7_9.2 will be an update
---> Package systemd-libs.x86_64 0:219-78.el7 will be updated
---> Package systemd-libs.x86_64 0:219-78.el7_9.2 will be an update
---> Package vim-minimal.x86_64 2:7.4.629-7.el7 will be updated
---> Package vim-minimal.x86_64 2:7.4.629-8.el7_9 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                         Arch                Version                                 Repository            Size
========================================================================================================================
Updating:
 bind-license                    noarch              32:9.11.4-26.P2.el7_9.3                 updates               91 k
 centos-release                  x86_64              7-9.2009.1.el7.centos                   updates               27 k
 coreutils                       x86_64              8.22-24.el7_9.2                         updates              3.3 M
 curl                            x86_64              7.29.0-59.el7_9.1                       updates              271 k
 device-mapper                   x86_64              7:1.02.170-6.el7_9.3                    updates              297 k
 device-mapper-libs              x86_64              7:1.02.170-6.el7_9.3                    updates              325 k
 glib2                           x86_64              2.56.1-8.el7                            updates              2.5 M
 kpartx                          x86_64              0.4.9-134.el7_9                         updates               81 k
 libcurl                         x86_64              7.29.0-59.el7_9.1                       updates              223 k
 openssl-libs                    x86_64              1:1.0.2k-21.el7_9                       updates              1.2 M
 python                          x86_64              2.7.5-90.el7                            updates               96 k
 python-libs                     x86_64              2.7.5-90.el7                            updates              5.6 M
 systemd                         x86_64              219-78.el7_9.2                          updates              5.1 M
 systemd-libs                    x86_64              219-78.el7_9.2                          updates              418 k
 vim-minimal                     x86_64              2:7.4.629-8.el7_9                       updates              443 k

Transaction Summary
========================================================================================================================
Upgrade  15 Packages

Total download size: 20 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
warning: /var/cache/yum/x86_64/7/updates/packages/centos-release-7-9.2009.1.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for centos-release-7-9.2009.1.el7.centos.x86_64.rpm is not installed
(1/15): centos-release-7-9.2009.1.el7.centos.x86_64.rpm                                          |  27 kB  00:00:00
(2/15): bind-license-9.11.4-26.P2.el7_9.3.noarch.rpm                                             |  91 kB  00:00:00
(3/15): curl-7.29.0-59.el7_9.1.x86_64.rpm                                                        | 271 kB  00:00:00
(4/15): device-mapper-1.02.170-6.el7_9.3.x86_64.rpm                                              | 297 kB  00:00:00
(5/15): coreutils-8.22-24.el7_9.2.x86_64.rpm                                                     | 3.3 MB  00:00:02
(6/15): device-mapper-libs-1.02.170-6.el7_9.3.x86_64.rpm                                         | 325 kB  00:00:01
(7/15): python-2.7.5-90.el7.x86_64.rpm                                                           |  96 kB  00:00:00
(8/15): libcurl-7.29.0-59.el7_9.1.x86_64.rpm                                                     | 223 kB  00:00:02
(9/15): openssl-libs-1.0.2k-21.el7_9.x86_64.rpm                                                  | 1.2 MB  00:00:01
(10/15): systemd-libs-219-78.el7_9.2.x86_64.rpm                                                  | 418 kB  00:00:00
(11/15): kpartx-0.4.9-134.el7_9.x86_64.rpm                                                       |  81 kB  00:00:03
(12/15): glib2-2.56.1-8.el7.x86_64.rpm                                                           | 2.5 MB  00:00:04
(13/15): vim-minimal-7.4.629-8.el7_9.x86_64.rpm                                                  | 443 kB  00:00:02
(14/15): systemd-219-78.el7_9.2.x86_64.rpm                                                       | 5.1 MB  00:00:06
(15/15): python-libs-2.7.5-90.el7.x86_64.rpm                                                     | 5.6 MB  00:00:07
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   2.0 MB/s |  20 MB  00:00:09
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : systemd-libs-219-78.el7_9.2.x86_64                                                                  1/30
  Updating   : 1:openssl-libs-1.0.2k-21.el7_9.x86_64                                                               2/30
  Updating   : coreutils-8.22-24.el7_9.2.x86_64                                                                    3/30
  Updating   : libcurl-7.29.0-59.el7_9.1.x86_64                                                                    4/30
  Updating   : python-libs-2.7.5-90.el7.x86_64                                                                     5/30
  Updating   : centos-release-7-9.2009.1.el7.centos.x86_64                                                         6/30
  Updating   : systemd-219-78.el7_9.2.x86_64                                                                       7/30
Failed to get D-Bus connection: Operation not permitted
  Updating   : 7:device-mapper-libs-1.02.170-6.el7_9.3.x86_64                                                      8/30
  Updating   : 7:device-mapper-1.02.170-6.el7_9.3.x86_64                                                           9/30
  Updating   : kpartx-0.4.9-134.el7_9.x86_64                                                                      10/30
  Updating   : python-2.7.5-90.el7.x86_64                                                                         11/30
  Updating   : curl-7.29.0-59.el7_9.1.x86_64                                                                      12/30
  Updating   : glib2-2.56.1-8.el7.x86_64                                                                          13/30
  Updating   : 2:vim-minimal-7.4.629-8.el7_9.x86_64                                                               14/30
  Updating   : 32:bind-license-9.11.4-26.P2.el7_9.3.noarch                                                        15/30
  Cleanup    : curl-7.29.0-59.el7.x86_64                                                                          16/30
  Cleanup    : kpartx-0.4.9-133.el7.x86_64                                                                        17/30
  Cleanup    : 7:device-mapper-1.02.170-6.el7.x86_64                                                              18/30
  Cleanup    : 7:device-mapper-libs-1.02.170-6.el7.x86_64                                                         19/30
  Cleanup    : systemd-219-78.el7.x86_64                                                                          20/30
  Cleanup    : python-2.7.5-89.el7.x86_64                                                                         21/30
  Cleanup    : centos-release-7-9.2009.0.el7.centos.x86_64                                                        22/30
  Cleanup    : 32:bind-license-9.11.4-26.P2.el7.noarch                                                            23/30
  Cleanup    : python-libs-2.7.5-89.el7.x86_64                                                                    24/30
  Cleanup    : coreutils-8.22-24.el7.x86_64                                                                       25/30
  Cleanup    : 1:openssl-libs-1.0.2k-19.el7.x86_64                                                                26/30
  Cleanup    : libcurl-7.29.0-59.el7.x86_64                                                                       27/30
  Cleanup    : systemd-libs-219-78.el7.x86_64                                                                     28/30
  Cleanup    : glib2-2.56.1-7.el7.x86_64                                                                          29/30
  Cleanup    : 2:vim-minimal-7.4.629-7.el7.x86_64                                                                 30/30
  Verifying  : python-2.7.5-90.el7.x86_64                                                                          1/30
  Verifying  : kpartx-0.4.9-134.el7_9.x86_64                                                                       2/30
  Verifying  : centos-release-7-9.2009.1.el7.centos.x86_64                                                         3/30
  Verifying  : 7:device-mapper-1.02.170-6.el7_9.3.x86_64                                                           4/30
  Verifying  : 32:bind-license-9.11.4-26.P2.el7_9.3.noarch                                                         5/30
  Verifying  : coreutils-8.22-24.el7_9.2.x86_64                                                                    6/30
  Verifying  : libcurl-7.29.0-59.el7_9.1.x86_64                                                                    7/30
  Verifying  : 1:openssl-libs-1.0.2k-21.el7_9.x86_64                                                               8/30
  Verifying  : curl-7.29.0-59.el7_9.1.x86_64                                                                       9/30
  Verifying  : python-libs-2.7.5-90.el7.x86_64                                                                    10/30
  Verifying  : 2:vim-minimal-7.4.629-8.el7_9.x86_64                                                               11/30
  Verifying  : 7:device-mapper-libs-1.02.170-6.el7_9.3.x86_64                                                     12/30
  Verifying  : systemd-libs-219-78.el7_9.2.x86_64                                                                 13/30
  Verifying  : systemd-219-78.el7_9.2.x86_64                                                                      14/30
  Verifying  : glib2-2.56.1-8.el7.x86_64                                                                          15/30
  Verifying  : 2:vim-minimal-7.4.629-7.el7.x86_64                                                                 16/30
  Verifying  : systemd-libs-219-78.el7.x86_64                                                                     17/30
  Verifying  : glib2-2.56.1-7.el7.x86_64                                                                          18/30
  Verifying  : python-2.7.5-89.el7.x86_64                                                                         19/30
  Verifying  : kpartx-0.4.9-133.el7.x86_64                                                                        20/30
  Verifying  : 32:bind-license-9.11.4-26.P2.el7.noarch                                                            21/30
  Verifying  : centos-release-7-9.2009.0.el7.centos.x86_64                                                        22/30
  Verifying  : python-libs-2.7.5-89.el7.x86_64                                                                    23/30
  Verifying  : 7:device-mapper-1.02.170-6.el7.x86_64                                                              24/30
  Verifying  : 7:device-mapper-libs-1.02.170-6.el7.x86_64                                                         25/30
  Verifying  : systemd-219-78.el7.x86_64                                                                          26/30
  Verifying  : coreutils-8.22-24.el7.x86_64                                                                       27/30
  Verifying  : 1:openssl-libs-1.0.2k-19.el7.x86_64                                                                28/30
  Verifying  : libcurl-7.29.0-59.el7.x86_64                                                                       29/30
  Verifying  : curl-7.29.0-59.el7.x86_64                                                                          30/30

Updated:
  bind-license.noarch 32:9.11.4-26.P2.el7_9.3               centos-release.x86_64 0:7-9.2009.1.el7.centos
  coreutils.x86_64 0:8.22-24.el7_9.2                        curl.x86_64 0:7.29.0-59.el7_9.1
  device-mapper.x86_64 7:1.02.170-6.el7_9.3                 device-mapper-libs.x86_64 7:1.02.170-6.el7_9.3
  glib2.x86_64 0:2.56.1-8.el7                               kpartx.x86_64 0:0.4.9-134.el7_9
  libcurl.x86_64 0:7.29.0-59.el7_9.1                        openssl-libs.x86_64 1:1.0.2k-21.el7_9
  python.x86_64 0:2.7.5-90.el7                              python-libs.x86_64 0:2.7.5-90.el7
  systemd.x86_64 0:219-78.el7_9.2                           systemd-libs.x86_64 0:219-78.el7_9.2
  vim-minimal.x86_64 2:7.4.629-8.el7_9

Complete!
#

如果在执行 yum update 命令时没有进行网络等设置,可能会出现以下错误。如果出现错误,请对 yum 的配置文件(如 /etc/yum.conf)进行修正或追加。

# yum update
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
14: curl#52 - "Empty reply from server"


 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64
[root@2619bfaa653b /]# y
bash: y: command not found
[root@2619bfaa653b /]# yum update
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
14: curl#52 - "Empty reply from server"


 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64
#

如果必须通过代理使用yum,请按照以下方式在yum.conf中进行代理配置。

如果代理服务器是 yourProxy,代理端口是 proxyPort:

# cd
# pwd
/root
# echo "proxy=http://yourProxy:proxyPort" >> /etc/yum.conf

用yum安装sudo命令。

# yum -y install sudo
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: download.nus.edu.sg
 * updates: mirror.aktkn.sg
Resolving Dependencies
--> Running transaction check
---> Package sudo.x86_64 0:1.8.23-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                  Arch                       Version                             Repository                Size
========================================================================================================================
Installing:
 sudo                     x86_64                     1.8.23-10.el7                       base                     842 k

Transaction Summary
========================================================================================================================
Install  1 Package

Total download size: 842 k
Installed size: 3.0 M
Downloading packages:
sudo-1.8.23-10.el7.x86_64.rpm                                                                    | 842 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : sudo-1.8.23-10.el7.x86_64                                                                            1/1
  Verifying  : sudo-1.8.23-10.el7.x86_64                                                                            1/1

Installed:
  sudo.x86_64 0:1.8.23-10.el7

Complete!
#

现在已经成功安装了 sudo 命令的软件包。

# sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user]
            [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
#

根据需要,除了sudo之外,可以安装java、git、ant、wget、unzip等命令的软件包。(不一定需要全部安装)

# yum -y install java-1.8.0-openjdk-devel java git ant wget unzip

停止并退出CentOS容器”centos7″,该容器内安装了sudo和其他软件包。

# exit
exit
>

已完成的 CentOS 容器(虚拟环境)的存储

这次,我在 CentOS 容器(虚拟环境)上安装了 sudo 命令等包。
可以将进行了设置、更新和其他自定义操作的容器状态保存为镜像。
接下来,我将从进行了自定义操作的 CentOS 容器中创建并保存镜像。

停止保存容器

首先,我们要查看当前正在运行的容器,不需要任何选项。

> docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES

>

这次,CentOS容器”centos7″已经安装了诸如sudo命令等软件包,应该是处于停止状态的,所以当前不存在正在运行的容器。

如果容器在运行状态下未连接到容器,则可以使用docker stop命令停止容器。

然后,使用-a选项,显示包括停止的容器在内的所有容器。

> docker ps -a
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS                      PORTS     NAMES
2619bfaa653b   centos:centos7   "/bin/bash"   32 minutes ago   Exited (0) 29 seconds ago             centos7

执行了安装unzip命令等操作,显示了当前已停止的CentOS容器”centos7″。

将停止的容器保存为镜像。

使用docker images命令来确认已创建的镜像。

> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       centos7   8652b9f0cb4c   6 weeks ago   204MB
>

使用docker commit命令,将实施了自定义操作的CentOS容器“centos7”保存为Docker镜像“centos:gahoh”。

> docker commit centos7 centos:gahoh
sha256:117cf19ad19486755646f5802f2323236088ffc880ec1282be3dbeb264548e37

另外,在不暂停容器的情况下创建Docker镜像时,请使用”–pause=false”选项。

使用docker images命令来确认是否创建了Docker镜像。

> docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       gahoh     117cf19ad194   32 seconds ago   663MB
centos       centos7   8652b9f0cb4c   6 weeks ago      204MB

我们发现新增了一个名为”centos:gahoh”的Docker镜像。

确认已创建的图像内容

我们来确认一下刚才的工作内容是否正确地反映出来了。

使用docker rm命令,删除容器”centos7″。

> docker rm centos7
centos7
> docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES

现在,所有的容器都已经没有了。

那么,让我们使用docker run命令从镜像”centos:gahoh”创建并启动一个名为”centos7″的容器。

> docker run -it --name="centos7" centos:gahoh /bin/bash
#

我尝试执行 sudo 命令。

# sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user]
            [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
#

最后

我这次在Windows 10的笔记本电脑上安装了Doker Desktop for Windows,并详细描述了搭建、配置和保存CentOS虚拟环境的一系列步骤。如果有任何错误或疑问,请在编辑请求或评论中给予反馈,谢谢。

广告
将在 10 秒后关闭
bannerAds