2.2.2、容器的使用

来源:互联网 发布:网络安全设备巡检流程 编辑:程序博客网 时间:2024/05/22 11:56

容器的使用

在《5.7、Docker化的应用之:Hello World》的章节里,我们开启了“处女之容”。使用 docker run 命令启动容器:

  • 在前台运行一个一个交互式的容器
  • 在后台运行一个守护的容器

在过程中,我们学习一些docker的命令:

  • docker ps - 正在运行的容器列表
  • docker logs - 查看容器的日志
  • docker stop - 停止运行中的容器

提示:另外一种学习docker 命令方法,查阅它们的交互式教程。

 docker 客户端是非常易用。你可以使用Docker加上一系列的标示和参数来完成你想要的个操作。

# 用法:  [sudo] docker [command] [flags] [arguments] ..# 例子:$ docker run -i -t ubuntu /bin/bash

使用 docker version 命令,可以查看当前docker的客户端和守护进程的版本信息。

$ docker version

这个命令不只是提供你当前使用的Docker客户端和服务端的的版本信息,还提示Go的版本信息(Docker实现语言)

Client:  Version:      1.8.1  API version:  1.20  Go version:   go1.4.2  Git commit:   d12ea79  Built:        Thu Aug 13 02:35:49 UTC 2015  OS/Arch:      linux/amd64Server:  Version:      1.8.1  API version:  1.20  Go version:   go1.4.2  Git commit:   d12ea79  Built:        Thu Aug 13 02:35:49 UTC 2015  OS/Arch:      linux/amd64

获取Docker命令帮助

你可以查看指定的Docker指令的帮助信息。提供各个选项的详情和使用方法。为了看到尽可能全的可用命令清单,使用如下命令:

$ docker --help

要查看具体某个命令的用法详情,命令加 --help 标志:

$ docker attach --helpUsage: docker attach [OPTIONS] CONTAINERAttach to a running container  --help=false        Print usage  --no-stdin=false    Do not attach stdin  --sig-proxy=true    Proxy all received signals to the process

注意:要了解更多的命令详情,请查看命令参考(command reference)的章节。

在docker里运行一个web的应用

现在我们对 docker 客户端有一定的了解了,是时候了解一些重要的东西:运行多个容器。到目前为止,我们运行的都是一些示例性的容器,没有什么实质的作用,在这里,我们通过运行一个web应用的案例来改变这个现状。

我们准备运行一个Python Flask应用作为例子。我们就从 docker run 命令开始吧。

$ docker run -d -P training/webapp python app.py

让我们回顾一下,刚刚命令到底做了什么。在这里,我们指定了两个标志: -d 和-P。我们已经知道 -d 标志是让容器以守护的方式运行。 -P 标志对我们来讲一个新的知识点,它的作用是实现容器端口和随机的宿主机的端口的映射。让我们能够访问容器中的web应用。

我们已经指定一个镜像: training/webapp。这是一个预构建的镜像,我们可以基于它来创建一个容器,从而实现一个简单的 Python Flask web应用。

最后,我们为容器指定运行指令: python app.py。这样我们web应用就能启动了。

注意:你可以在命令参考Docker run参考查看更多 docker run 命令细节

查看我们的web应用容器

现在,让我们来查看运行中的容器,使用 python app.py

$ docker ps -lCONTAINER ID  IMAGE                   COMMAND       CREATED        STATUS        PORTS                    NAMESbc533791f3f5  training/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155->5000/tcp  nostalgic_morse

你可以看到,在 docker ps 命令中,我们又使用一个新的的标志 -l。这个指令告诉 docker ps 命令返回最近启容器的详情。

注意:默认情况下,这个命令仅会显示正在运行的容器信息。如果你需要查看停止的容器,可以使用-a 标志。

我们可以看到和在《5.7、Docker化的应用之:Hello World》信息,在 PORTS 列中。

PORTS0.0.0.0:49155->5000/tcp

当我们向 docker run 命令传递 -P 标志时,Docker容器服务会暴露在宿主机的随机端口上。

注意: 我们将在《2.2.3、初识镜像》时,介绍更多关于在Docker镜像里如何暴露端口。

上述的情况,Docker(默认Python Flask的端口)的服务端口49115映射到(暴露)宿主机的5000端口。

网络端口的捆绑在docker中可配置性很高。在我们的最后的例子中 -P标志是r -p 5000 的简写,将容器内部的5000端口映射到宿主机的高段端口上(临时端口范围,一般32768到 61000的端口段)。我们也可以使用 -p 标志,将Docker的容器绑定到指定的端口中。例如:

$ docker run -d -p 80:5000 training/webapp python app.py

这将会把容器内部的 5000 端口映射到我们本地主机的 5000 端口上。你可能现在会问:为什么我们只使用 1对1端口映射的方式将端口映射到 Docker 容器, 而不是采用自动映射高位端口的方式?这里 1:1 映射方式能够保证映射到本地主机端口的唯一性。假设你想要测试两个 Python 应用程序,两个容器内部都绑定了端口5000,这样就没有足够的 Docker 的端口映射,你只能访问其中一个。

现在,让我们使用浏览器访问49155端口出的web应用。

Viewing the web application .

我们的Python应用已经跑起来了!

注意: 如果你在 OS X windows或者Linux上使用 boot2docker 虚拟机,你需要获取虚拟机的 ip 来代替localhost 使用,你可以通过运行 boot2docker shell 来获取 ip(例如:在你的命令行胡应用终端)。

$ boot2docker ipThe VM's Host only interface IP address is: 192.168.59.103

这样,你可以通过http://192.168.59.103:49155来访问你的上面的例子。

网络端点捷径

使用 docker ps 命令来会返回端口的映射是一种比较笨拙的方法。为此,Docker 提供了一种快捷方式:docker port ,使用 docker port  指定容器ID或名字和端口命令组合,我们就可以查看到当前的容器的对公的地址。

$ docker port nostalgic_morse 50000.0.0.0:49155

这样我们可以查出容器内部5000端口映射到外部的具体地址。

查看容器日志

让我们找出更多关于应用的日志信息,这里我们将学习另外一个命令: docker restart 。

$ docker logs -f nostalgic_morse* Running on http://0.0.0.0:5000/10.0.2.2 - - [23/May/2014 20:16:31] "GET / HTTP/1.1" 200 -10.0.2.2 - - [23/May/2014 20:16:31] "GET /favicon.ico HTTP/1.1" 404 -

这次我们添加了一个 -f.标识。 docker logs命令就像使用  tail -f 一样来输出容器内部的标准输出。这里我们从显示屏上可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

查看容器中的进程

我们除了可以查看容器日志,我们还可以使用 docker top 来查看容器内部运行的进程:

$ docker top nostalgic_morsePID                 USER                COMMAND854                 root                python app.py  

这里我们可以看到 python app.py 是容器里唯一进程。 

检查容器

最后,我们可以使用 docker inspect 来挖掘Docker的更深一层的信息。它会返回一个指定容器的 JSON 文件,该文档记录着容器有用的配置和状态信息。

$ docker inspect nostalgic_morse

下面看一个JSONS输出的例子:

[{    "ID": "bc533791f3f500b280a9626688bc79e342e3ea0d528efe3a86a51ecb28ea20",    "Created": "2014-05-26T05:52:40.808952951Z",    "Path": "python",    "Args": [       "app.py"    ],    "Config": {       "Hostname": "bc533791f3f5",       "Domainname": "",       "User": "",. . .

通过请求指定的元素,来获取特定的信息,例如:仅查看容器的IP地址,我们可以这样做:

$ docker inspect -f '{{ .NetworkSettings.IPAddress }}' nostalgic_morse172.17.0.5

停止容器

好了,我们现在已经看到web应用已经在正常工作了。现在让我们使用 docker stop指令和容器的名字来停止容器: nostalgic_morse.

$ docker stop nostalgic_morsenostalgic_morse

现在,我们可以使用 docker ps 命令来确认,容器是否已经关闭。

$ docker ps -l

重启容器

哎呀!在你刚刚停止容器后,此时,刚好另外一个开发人员需要使用这个容器。为了恢复刚刚容器,在这里你有两个选着:你可以创建一个新的容器或容器一个就的容器。让我们看一下,如何重启我们之前创建的容器。

$ docker start nostalgic_morsenostalgic_morse

迅速输入docker ps -l 指令可以看到之前的容器已经跑起来,或使用容器的URL去浏览,如果应用支持。

注意: 也可以使用docker restart 指令去重启容器,重启的操作其实包含两个步骤:停止和启动。

删除容器

当你创建的容器不再使用时。我们就会删除掉它们。Docker提供 docker rm 命令帮助我们达成目的。

$ docker rm nostalgic_morseError: Impossible to remove a running container, please stop it first or use -f2014/05/24 08:12:56 Error: failed to remove one or more containers

发生了什么?我们不能删除一个正在运行的容器。这是一个保护机制,防止误操作。先停止容器,再重试一次。

$ docker stop nostalgic_morsenostalgic_morse$ docker rm nostalgic_morsenostalgic_morse

这样,我们的容器就被停止和删除了。

注意:: 始终牢记删除容器容器的操作一定放到最后。(译者注:假如删除一个运行中的容器,docker会提示一个错误给,当然你可以通过强制的手段达到你的目的,但是不推荐。)

来源: <https://docs.docker.com/userguide/usingdocker/>

0 0
原创粉丝点击