Docker 是一个应用程序,可以让在容器中运行应用程序进程变得简单、容易,就像虚拟机一样,只是更便携、更资源友好、更依赖于主机操作系统。有关 Docker 容器的不同组件的详细介绍,请查看Docker 生态系统:常用组件简介.
在 CentOS 7 上安装 Docker 有两种方法。一种方法是将其安装在操作系统的现有安装上。另一个涉及使用名为的工具启动服务器码头工人机器会自动在其上安装 Docker。
在本教程中,您将学习如何在现有的 CentOS 7 安装上安装和使用它。
- 64 位 CentOS 7 Droplet
- 具有 sudo 权限的非 root 用户。使用 CentOS 7 设置服务器CentOS 7 初始设置指南解释了如何设置。
Note:Docker 需要 64 位版本的 CentOS 7 以及等于或高于 3.10 的内核版本。默认的 64 位 CentOS 7 Droplet 满足这些要求。
本教程中的所有命令都应以非 root 用户身份运行。如果该命令需要 root 访问权限,则前面将显示sudo
. CentOS 7 初始设置指南解释如何添加用户并授予他们 sudo 访问权限。
CentOS 7 官方存储库中提供的 Docker 安装包可能不是最新版本。要获取最新最好的版本,请从官方 Docker 存储库安装 Docker。本节将向您展示如何做到这一点。
但首先,让我们更新包数据库:
现在运行这个命令。它将添加官方 Docker 存储库,下载最新版本的 Docker,并安装它:
-
curl -fsSLhttps://get.docker.com/| sh
安装完成后,启动Docker守护进程:
验证它是否正在运行:
输出应类似于以下内容,表明服务处于活动状态并正在运行:
Output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)
最后,确保它在每次服务器重新启动时启动:
现在安装 Docker 不仅为您提供 Docker 服务(守护进程),还为您提供docker
命令行实用程序或 Docker 客户端。我们将探讨如何使用docker
本教程后面的命令。
默认情况下,运行docker
命令需要root权限——也就是说,你必须在命令前面加上前缀sudo
。它也可以由用户运行docker组,该组是在安装 Docker 时自动创建的。如果您尝试运行docker
命令不带前缀sudo
或者如果不在 docker 组中,您将得到如下输出:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
如果你想避免打字sudo
每当你运行docker
命令,将您的用户名添加到 docker 组:
-
sudo usermod -aG docker $(whoami)
您需要注销 Droplet 并以同一用户身份重新登录才能启用此更改。
如果您需要添加用户docker
您未登录的组,请使用以下方式显式声明该用户名:
-
sudo usermod -aG docker username
本文的其余部分假设您正在运行docker
以 docker 用户组中的用户身份执行命令。如果您选择不这样做,请在命令前面加上sudo
.
Docker 安装并运行后,现在是时候熟悉命令行实用程序了。使用docker
包括向其传递一系列选项和子命令,后跟参数。语法采用以下形式:
-
docker [option] [command] [论点]
要查看所有可用的子命令,请键入:
从 Docker 1.11.1 开始,可用子命令的完整列表包括:
Output
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
network Manage Docker networks
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code
要查看特定命令可用的开关,请键入:
-
docker docker-subcommand --help
要查看系统范围的信息,请使用:
Docker 容器是从 Docker 镜像运行的。默认情况下,它从 Docker Hub 中提取这些镜像,Docker Hub 是由 Docker 项目背后的公司 Docker 管理的 Docker 注册表。任何人都可以在 Docker Hub 上构建和托管其 Docker 映像,因此运行 Docker 容器所需的大多数应用程序和 Linux 发行版都具有托管在 Docker Hub 上的映像。
要检查是否可以从 Docker Hub 访问和下载映像,请键入:
输出应包含以下内容,表明 Docker 工作正常:
Output
Hello from Docker.
This message shows that your installation appears to be working correctly.
...
您可以使用以下命令搜索 Docker Hub 上可用的镜像docker
命令与search
子命令。例如,要搜索 CentOS 映像,请键入:
该脚本将抓取 Docker Hub 并返回名称与搜索字符串匹配的所有图像的列表。在这种情况下,输出将类似于以下内容:
Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 2224 [OK]
jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22 [OK]
jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M... 17 [OK]
million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 11 [OK]
nimmis/java-centos This is docker images of CentOS 7 with dif... 10 [OK]
torusware/speedus-centos Always updated official CentOS docker imag... 8 [OK]
nickistre/centos-lamp LAMP on centos setup 3 [OK]
...
In the OFFICIAL柱子,OK表示由项目背后的公司构建和支持的图像。确定要使用的图像后,您可以使用以下命令将其下载到您的计算机上pull
子命令,如下所示:
下载镜像后,您可以使用下载的镜像运行一个容器run
子命令。如果图像尚未下载docker
执行的是run
子命令中,Docker 客户端将首先下载镜像,然后使用它运行容器:
要查看已下载到您的计算机的图像,请键入:
输出应类似于以下内容:
[secondary_lable Output]
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
正如您将在本教程后面看到的,可以修改用于运行容器的图像并用于生成新图像,然后可以上传这些图像(pushed是技术术语)到 Docker Hub 或其他 Docker 注册表。
The hello-world
您在上一步中运行的容器是在发出测试消息后运行并退出的容器的示例。然而,容器的用途远不止于此,而且它们可以是交互式的。毕竟,它们类似于虚拟机,只是更加资源友好。
作为示例,让我们使用最新的 CentOS 映像运行一个容器。的组合-i and -t开关使您可以交互式 shell 访问容器:
您的命令提示符应更改以反映您现在正在容器内工作的事实,并且应采用以下形式:
Output
[root@59839a1b7de2 /]#
重要的:记下命令提示符中的容器 ID。在上面的例子中,它是59839a1b7de2
.
现在您可以在容器内运行任何命令。例如,让我们在正在运行的容器中安装 MariaDB 服务器。无需在任何命令前添加前缀sudo
,因为您正在使用 root 权限在容器内进行操作:
当您启动 Docker 映像时,您可以像使用虚拟机一样创建、修改和删除文件。您所做的更改将仅应用于该容器。你可以启动和停止它,但是一旦你用docker rm
命令,更改将永久丢失。
本节向您展示如何将容器的状态保存为新的 Docker 映像。
在 CentOS 容器内安装 MariaDB 服务器后,您现在拥有一个运行映像的容器,但该容器与您用于创建它的映像不同。
要将容器的状态保存为新映像,请首先退出容器:
然后使用以下命令将更改提交到新的 Docker 映像实例。这-mswitch 用于提交消息,帮助您和其他人了解您所做的更改,而-a用于指定作者。容器 ID 是您在本教程前面启动交互式 docker 会话时记下的 ID。除非您在 Docker Hub 上创建了其他存储库,否则存储库通常是您的 Docker Hub 用户名:
-
docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name
例如:
-
docker commit -m “添加了 mariadb 服务器” -a “周日奥格乌-奇努瓦”59839a1b7de2 finid/centos-mariadb
Note:当你commit图像,新图像保存在本地,即您的计算机上。在本教程的后面部分,您将学习如何将映像推送到 Docker 注册表(例如 Docker Hub),以便您和其他人可以对其进行评估和使用。
该操作完成后,列出计算机上现在的 Docker 镜像应该会显示新镜像以及它所源自的旧镜像:
输出应该是这样的:
Output
REPOSITORY TAG IMAGE ID CREATED SIZE
finid/centos-mariadb latest 23390430ec73 6 seconds ago 424.6 MB
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
在上面的例子中,centos-mariadb是新映像,它源自 Docker Hub 中的现有 CentOS 映像。大小差异反映了所做的更改。在这个例子中,变化是安装了 MariaDB 服务器。因此,下次您需要使用预装了 MariaDB 服务器的 CentOS 来运行容器时,您只需使用新镜像即可。图像也可以从所谓的 Dockerfile 构建。但这是一个非常复杂的过程,远远超出了本文的范围。我们将在以后的文章中对此进行探讨。
使用 Docker 一段时间后,您的计算机上将有许多活动(正在运行)和非活动容器。要查看活动的,请使用:
您将看到类似于以下内容的输出:
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd centos "/bin/bash" 3 hours ago Up 3 hours silly_spence
要查看所有容器 - 活动的和非活动的,请将其传递给-a
switch:
要查看您创建的最新容器,请将其传递给-l
switch:
停止正在运行或活动的容器就像键入以下内容一样简单:
The container-id
can be found in the output from the docker ps
command.
从现有映像创建新映像后,下一个合乎逻辑的步骤是与选定的几个朋友、Docker Hub 上的整个世界或您有权访问的其他 Docker 注册表共享它。要将映像推送到 Docker Hub 或任何其他 Docker 注册表,您必须在那里有一个帐户。
本节向您展示如何将 Docker 镜像推送到 Docker Hub。
要在 Docker Hub 上创建帐户,请在以下位置注册:码头工人中心。之后,要推送您的映像,请首先登录 Docker Hub。系统会提示您进行身份验证:
-
docker login -u docker-registry-username
如果您指定了正确的密码,身份验证应该会成功。然后你可以使用以下方式推送你自己的图像:
-
docker push docker-registry-username/docker-image-name
这需要一些时间才能完成,完成后,输出将是这样的:
Output
The push refers to a repository [docker.io/finid/centos-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/centos
6a6c96337be1: Mounted from library/centos
...
将图像推送到注册表后,它应该列在您帐户的仪表板上,如下图所示。
如果推送尝试导致此类错误,则您可能没有登录:
Output
The push refers to a repository [docker.io/finid/centos-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
登录,然后重复推送尝试。
Docker 的功能比本文中给出的要多得多,但这应该足以让您开始在 CentOS 7 上使用它。与大多数开源项目一样,Docker 是从快速开发的代码库构建的,因此请制作一个访问项目的习惯博客页面了解最新信息。
另请查看其他 Docker 教程在 DO 社区中。