TranslateProject/translated/tech/20190520 Getting Started With Docker.md
2019-06-03 15:34:28 +08:00

14 KiB
Raw Blame History

Docker 入门指南

Getting Started With Docker

在我们的上一个教程中,我们已经了解如何在ubuntu上安装Docker,和如何在CentOS上安装Docker。今天我们将会了解Docker的一些基础用法。该教程包含了如何创建一个新的docker容器如何运行该容器如何从现有的docker容器中创建自己的Docker镜像等Docker 的一些基础知识操作。所有步骤均在Ubuntu 18.04 LTS server 版本下测试通过。

入门指南

在开始指南之前不要混淆Docker镜像和Docker容器这两个概念。在之前的教程中我就解释过Docker镜像是决定Docker容器行为的一个文件Docker容器则是Docker镜像的运行态或停止态。(译者注:在macOS下使用docker终端时不需要加sudo)

1. 搜索Docker镜像

我们可以从Docker的仓库中获取镜像例如Docker hub, 或者自己创建镜像。这里解释一下,Docker hub是一个云服务器用来提供给Docker的用户们创建测试和保存他们的镜像。

Docker hub拥有成千上万个Docker 的镜像文件。你可以在这里搜索任何你想要的镜像,通过docker search命令。

例如搜索一个基于ubuntu的镜像文件只需要运行

$ sudo docker search ubuntu

Sample output:

搜索基于CentOS的镜像运行

$ sudo docker search ubuntu

搜索AWS的镜像运行

$ sudo docker search aws

搜索wordpress的镜像:

$ sudo docker search wordpress

Docker hub拥有几乎所有种类的镜像,包含操作系统,程序和其他任意的类型,这些你都能在docker hub上找到已经构建完的镜像。如果你在搜索时,无法找到你想要的镜像文件,你也可以自己构建一个,将其发布出去,或者仅供你自己使用。

2. 下载Docker 镜像

下载ubuntu的镜像,你需要在终端运行以下命令:

$ sudo docker pull ubuntu

这条命令将会从Docker hub下载最近一个版本的ubuntu镜像文件。

Sample output:

Using default tag: latest
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete
05731e63f211: Pull complete
0bd67c50d6be: Pull complete
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest

下载docker 镜像

你也可以下载指定版本的ubuntu镜像。运行以下命令

$ docker pull ubuntu:18.04

Dokcer允许在任意的宿主机操作系统下下载任意的镜像文件并运行。

例如下载CentOS镜像

$ sudo docker pull centos

所有下载的镜像文件,都被保存在/var/lib/docker文件夹下。(译者注:不同操作系统存放的文件夹并不是一致的,具体存放位置请在官方查询)

查看已经下载的镜像列表,可以使用以下命令:

$ sudo docker images

输出为:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              7698f282e524        14 hours ago        69.9MB
centos              latest              9f38484d220f        2 months ago        202MB
hello-world         latest              fce289e99eb9        4 months ago        1.84kB

正如你看到的那样,我已经下载了三个镜像文件:ubuntu, CentOSHello-world.

现在,让我们继续,来看一下如何运行我们刚刚下载的镜像。

3. 运行Docker镜像

运行一个容器有两种方法。我们可以使用TAG或者是镜像IDTAG指的是特定的镜像快照。镜像ID是指镜像的唯一标识。

正如上面结果中显示,latest是所有镜像的一个标签。7698f282e524是Ubuntu docker 镜像的镜像ID,9f38484d220f是CentOS镜像的镜像IDfce289e99eb9是hello_world镜像的镜像ID

下载完Docker镜像之后你可以通过下面的命令来使用TAG的方式启动:

$ sudo docker run -t -i ubuntu:latest /bin/bash

在这条语句中:

  • -t: 在该容器中启动一个新的终端
  • -i: 通过容器中的标准输入流建立交互式连接
  • ubuntu:latest:带有标签latest的ubuntu容器
  • /bin/bash : 在新的容器中启动BASH Shell

或者,你可以通过镜像ID来启动新的容器:

$ sudo docker run -t -i 7698f282e524 /bin/bash

在这条语句里:

  • 7698f282e524镜像ID

在启动容器之后,将会自动进入容器的shell中(注意看命令行的提示符)。

Docker 容器的Shell

如果想要退回到宿主机的终端在这个例子中对我来说就是退回到18.04 LTS并且不中断该容器的执行你可以按下CTRL+P ,再按下CTRL+Q。现在你就安全的返回到了你的宿主机系统中。需要注意的是docker 容器仍然在后台运行,我们并没有中断它。

可以通过下面的命令来查看正在运行的容器:

$ sudo docker ps

Sample output:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
32fc32ad0d54        ubuntu:latest       "/bin/bash"         7 minutes ago       Up 7 minutes                            modest_jones

列出正在运行的容器

可以看到:

  • 32fc32ad0d54 容器 ID
  • ubuntu:latest Docker 镜像

需要注意的是,容器ID和Docker 镜像ID是不同的

可以通过以下命令查看所有正在运行和停止运行的容器:

$ sudo docker ps -a

在宿主机中断容器的执行:

$ sudo docker stop <container-id>

例如:

$ sudo docker stop 32fc32ad0d54

如果想要进入正在运行的容器中,你只需要运行

$ sudo docker attach 32fc32ad0d54

正如你看到的,32fc32ad0d54是一个容器的ID。当你在容器中想要退出时只需要在容器内的终端中输入命令

# exit

你可以使用这个命令查看后台正在运行的容器:

$ sudo docker ps
4. 构建自己的Docker镜像

Docker不仅仅可以下载运行在线的容器你也可以创建你的自己的容器。

想要创建自己的Docker镜像你需要先运行一个你已经下载完的容器

$ sudo docker run -t -i ubuntu:latest /bin/bash

现在,你运行了一个容器,并且进入了该容器。

然后,在该容器安装任意一个软件或做任何你想做的事情。

例如,我们在容器中安装一个Apache web 服务器

当你完成所有的操作安装完所有的软件之后你可以执行以下的命令来构建你自己的Docker镜像

# apt update
# apt install apache2

同样的,安装和测试所有的你想要安装的软件在容器中。

当你安装完毕之后返回的宿主机的终端。记住不要关闭容器。想要返回到宿主机的host而不中断容器。请按下CTRL+P ,再按下CTRL+Q。

从你的宿主机的终端中运行以下命令如寻找容器的ID

$ sudo docker ps

最后从一个正在运行的容器中创建Docker镜像

$ sudo docker commit 3d24b3de0bfc ostechnix/ubuntu_apache

输出为:

sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962

在这里:

  • 3d24b3de0bfc — 指ubuntu容器的ID。
  • ostechnix — 我们创建的的名称
  • ubuntu_apache — 我们创建的镜像

让我们检查一下我们新创建的docker镜像

$ sudo docker images

输出为:

REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
ostechnix/ubuntu_apache   latest              ce5aa74a48f1        About a minute ago   191MB
ubuntu                    latest              7698f282e524        15 hours ago         69.9MB
centos                    latest              9f38484d220f        2 months ago         202MB
hello-world               latest              fce289e99eb9        4 months ago         1.84kB

列出所有的docker镜像

正如你看到的,这个新的镜像就是我们刚刚在本地系统上从运行的容器上创建的。

现在,你可以从这个镜像创建一个新的容器。

$ sudo docker run -t -i ostechnix/ubuntu_apache /bin/bash
5. 移除容器

如果你在docker上的工作已经全部完成你就可以删除哪些你不需要的容器。

想要删除一个容器,首先,你需要停止该容器。

我们先来看一下正在运行的容器有哪些

$ sudo docker ps

输出为:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d24b3de0bfc ubuntu:latest "/bin/bash" 28 minutes ago Up 28 minutes goofy_easley

使用容器ID来停止该容器:

$ sudo docker stop 3d24b3de0bfc

现在,就可以删除该容器了。

$ sudo docker rm 3d24b3de0bfc

你就可以按照这样的方法来删除那些你不需要的容器了。

当需要删除的容器数量很多时,一个一个删除也是很麻烦的,我们可以直接删除所有的已经停止的容器。只需要运行:

$ sudo docker container prune

按下"Y",来确认你的操作

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564
5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0

Total reclaimed space: 5B

这个命令仅支持最新的docker。(译者注仅支持1.25及以上版本的Docker)

6. 删除Docker镜像

当你移除完不要的Docker容器后你也可以删除你不需要的Docker镜像。

列出已经下载的镜像:

$ sudo docker images

输出为:

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
ostechnix/ubuntu_apache   latest              ce5aa74a48f1        5 minutes ago       191MB
ubuntu                    latest              7698f282e524        15 hours ago        69.9MB
centos                    latest              9f38484d220f        2 months ago        202MB
hello-world               latest              fce289e99eb9        4 months ago        1.84kB

由上面的命令可以知道,在本地的系统中存在三个镜像。

使用镜像ID来删除镜像。

$ sudo docekr rmi ce5aa74a48f1

输出为:

Untagged: ostechnix/ubuntu_apache:latest
Deleted: sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
Deleted: sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd

解决问题

Docker禁止我们删除一个还在被容器使用的镜像。

例如当我试图删除Docker镜像b72889fa879c时,我只能获得一个错误提示:

Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377

这是因为这个Docker镜像正在被一个容器使用。

所以,我们来检查一个正在运行的容器:

$ sudo docker ps

输出为:

注意,现在并没有正在运行的容器!!!

查看一下所有的容器(包含所有的正在运行和已经停止的容器)

$ sudo docker pa -a

输出为:

可以看到,仍然有一些已经停止的容器在使用这些镜像。

让我们把这些容器删除:

$ sudo docker rm 12e892156219

我们仍然使用容器ID来删除这些容器。

当我们删除了所有使用该镜像的容器之后我们就可以删除Docker的镜像了。

例如:

$ sudo docekr rmi b72889fa879c

我们再来检查一下本机存在的镜像:

$ sudo docker images

想要知道更多的细节,请参阅本指南末尾给出的官方资源的链接或者在评论区进行留言。

或者下载以下的关于Docker的电子书来了解更多。

这就是全部的教程了希望你可以了解Docker的一些基础用法。

更多的教程马上就会到来,敬请关注。


via: https://www.ostechnix.com/getting-started-with-docker/

作者:sk 选题:lujun9972 译者:zhang5788 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出