一:容器中运行简单应用程序
1:hello world
使用docker可以在容器中运行应用程序,使用docker run命令即可。比如下面的命令:
$ docker run ubuntu /bin/echo 'Hello world'
Hello world
docker run命令用于运行一个新的容器,ubuntu指定了该容器运行基于的镜像是Ubuntu操作系统镜像。指定镜像后,Docker首先在Docker主机本地寻找镜像,如果找不到则去公共镜像仓库:Docker Hub下载。
接下来,就是指定要在新容器中运行的命令:/bin/echo 'Hello world'。
运行该容器时,Docker创建一个新的Ubuntu操作系统环境,并且在其中执行/bin/echo命令,然后将命令结果输出到终端。
这种情况下,容器只有在运行命令时处于running状态,一旦命令执行完成,输出” Hello world”之后,该容器也就停止运行了。
2:交互式的容器
运行以下命令:
$ docker run -t -i ubuntu /bin/bash
root@af8bae53bdd3:/#
还是以ubunt为基础镜像,这次运行的命令是/bin/bash,在容器中加载一个BASH shell。docker命令中多了两个选项:-t和-i,-t用于在容器中分配一个新的终端,-i使得用户可以与容器进行交互。
因此,容器加载后,就可以在容器中执行其他命令了:
root@af8bae53bdd3:/# pwd
/
root@af8bae53bdd3:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@af8bae53bdd3:/# exit
可见,在容器中,当前处于根目录下,并且根目录的结构就是典型的Linux文件系统。
运行exit退出当前shell,Bash shell进程也就停止了,因此容器也就停止运行了。
3:后台运行容器
使用以下命令,可以在后台运行容器:
$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147
这里使用-d选项,将容器置于后台运行,使其成为daemon进程。
这里在容器中运行的程序是一个在/bin/sh中,每隔1s打印一次hello world的程序。
运行该命令后,返回的是一个容器ID,利用该容器ID,可以使用docker ps命令,查看当前处于运行状态的容器:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e5535038e28 ubuntu /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage
可见,刚刚运行的容器处于UP状态,该命令还列出了刚刚容器的名字:insane_babbage,可以根据该名字,使用docker logs命令可以得到容器的标准输出。查看容器中的命令输出:
$ docker logs insane_babbage
hello world
hello world
hello world
. . .
使用docker stop命令,可以停止该容器:
$ docker stop insane_babbage
insane_babbage
再次使用docker ps命令查看,发现已经没有容器运行了:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
二:容器中运行实际应用
1:docker客户端
每次在shell中使用docker命令,实际上是启动了一个docker客户端,docker客户端连接docker服务器,由服务器执行相应的命令。可以使用docker version命令,查看当前主机上安装的docker客户单和docker服务器版本:
[hh_93_197 /]# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64
2:查看docker命令帮助信息
可以使用命令docker --help,查看docker帮助信息,也可以使用--help,查看docker子命令的帮助信息,比如:
[hh_93_197 /]# docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
-a, --attach=[] Attach to STDIN, STDOUT or STDERR
--add-host=[] Add a custom host-to-IP mapping (host:ip)
--blkio-weight Block IO (relative weight), between 10 and 1000
--blkio-weight-device=[] Block IO weight (relative device weight)
--cpu-shares CPU shares (relative weight)
--cap-add=[] Add Linux capabilities
--cap-drop=[] Drop Linux capabilities
...
3:在docker中运行web服务器
使用以下命令,可以在容器中运行一个python的web服务器:
$ docker run -d -P training/webapp python app.py
这里使用的镜像是training/webapp,其中包含了简单的Python flask web应用。-d选项使容器后台运行,-P选项将容器中的端口映射到主机上的端口,后续会详细解释。
4:查看容器
使用docker ps命令查看刚刚运行的容器:
[hh_93_197 /]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
026fcbe4b3dd training/webapp "python app.py" 23 hours ago Up 3 seconds 0.0.0.0:32770->5000/tcp stoic_davinci
docker ps命令,加上-l选项,可以列出最后一个启动的容器,docker ps命令只能列出运行状态的容器,通过-a选项,可以列出所有状态的容器。