在本教程中,我们将介绍如何安装 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 角色的设置。
-
- 在Windows上,右键点击Windows按钮,选择”应用和功能”。
-
- 在”相关设置”下选择”程序和功能”。
-
- 选择”启用或关闭Windows功能”。
- 选择”Hyper-V”,点击”确定”。
需要重新启动 Windows 机器才能生效。
获取Docker ID
安装适用于Windows的Docker桌面版。
安装
下载安装程序
您可以通过以下网站下载并安装Docker for Windows安装程序:
到这里为止,已经完成了对Windows机器的下载。
安装到Windows计算机
请注意
确认行动
尝试检查 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菜单中选择[设置],然后在[设置]对话框的[资源]选项卡中的[代理]下进行代理设置。
構築 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模型在生成中文文本时可能存在一些不确定性。)
创建和启动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虚拟环境的一系列步骤。如果有任何错误或疑问,请在编辑请求或评论中给予反馈,谢谢。