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应用。
.
我们的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/>
- 2.2.2、容器的使用
- C++容器-2顺序容器vector、list、deque的使用
- 向量容器的使用
- 容器的使用
- gamebyro--容器的使用
- Container 容器的使用
- 容器Vector的使用
- map容器的使用
- map容器的使用
- MAP容器的使用
- Java 容器的使用
- JAVA容器的使用
- C++ 容器的使用
- 顺序容器的使用
- 容器vector的使用
- map容器的使用
- 容器map的使用
- Map容器的使用
- Android Studio简单更新方法
- 三星手机上执行system()等函数失败
- linux下修改mtu值
- excel macro export to xml format
- JSP运行原理
- 2.2.2、容器的使用
- OpenWrt TTL刷机原理
- JNI 无法确定Bitmap的签名
- Java synchronized详解
- uci使用
- Zabbix
- POJ 3041 Asteroids(二分图最大匹配)
- 学习笔记之ArcGIS Engine调用自定义GP服务(亲测!!!)(一)
- 算EEPROM 尾部长度