1. Hello World
首先使用docker pull从镜像仓库Docker Hub下载hello-world镜像,
root@cg:~# docker pull hello-world:latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
root@cg:~#
使用 docker run在容器内运行应用程序,输出Hello world
root@cg:~# docker run hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
root@cg:~#
各个参数解析如下:
-
docker,docker的二进制执行文件。
-
run,与前面的docker组合以运行一个容器。
-
hello-world:latest,指定要运行的镜像。
-
/bin/echo "Hello world",在启动的容器里执行的命令
以上命令的含义为:docker以hello-world:latest镜像创建一个新容器,并运行了该容器输出了相关信息。 接下来,使用Ubuntu:16.04镜像生成容器,并输出hello world,首先下载ubuntu:16.04镜像,
root@cg:~/Desktop# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
0a01a72a686c: Pull complete
cc899a5544da: Pull complete
19197c550755: Pull complete
716d454e56b6: Pull complete
Digest: sha256:3f3ee50cb89bc12028bab7d1e187ae57f12b957135b91648702e835c37c6c971
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04
root@cg:~/Desktop#
接着,运行
docker run
命令使用Ubuntu容器输出hello world,命令如下:
root@cg:~/Desktop# docker run ubuntu:16.04 /bin/echo "hello world"
hello world
root@cg:~/Desktop#
该命令的含义为:docker以
ubuntu 16.04
镜像创建一个新容器,然后在容器里执行
bin/echo "Hello world"
,最后输出结果。
2. 运行交互式容器
通过docker的两个参数
-i -t
,让docker运行的容器实现"对话"的能力:
root@cg:~/Desktop# docker run -i -t ubuntu:16.04 /bin/bash
root@3f05c5e19375:/#
各个参数解析:
-
-t: 在新容器内指定一个伪终端或终端。
-
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
注意上图中的第二行root@3f05c5e19375:/#,此时我们已进入一个 ubuntu 16.04 系统的容器
在容器中使用命令 `cat /proc/version查看当前系统的版本信息
root@cg:~/Desktop# docker run -i -t ubuntu:16.04 /bin/bash
root@3f05c5e19375:/# cat /proc/version
Linux version 4.4.0-131-generic (buildd@lgw01-amd64-015) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018
root@3f05c5e19375:/#
在容器中使用命令
ls
查看当前目录下的文件列表
root@3f05c5e19375:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@3f05c5e19375:/#
通过
exit
命令或者使用
CTRL+D
退出容器。
root@3f05c5e19375:/# exit
exit
root@cg:~/Desktop#
注意第三行中 root@cg:~/Desktop# 表明已退出当前的容器,返回到当前的主机中。
3. 启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
root@cg:~/Desktop# docker run -d ubuntu:16.04 /bin/bash -c "while true;do echo hello world; sleep 1; done"
efdb36b237c57bc6ae5ad6b6bcd9857adb5a134a85387b2095bbde070431fed4
root@cg:~/Desktop#
在输出中,没有看到期望的 "hello world",而是一串长字符:
efdb36b237c57bc6ae5ad6b6bcd9857adb5a134a85387b2095bbde070431fed4
这个长字符串叫做容器ID,对每个容器来说都是唯一的。可以通过容器ID操作、查看对应的容器。
首先,我们需要确认容器有在运行,可以通过
docker ps
来查看:
root@cg:~/Desktop# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
efdb36b237c5 ubuntu:16.04 "/bin/bash -c 'while\u2026" 10 minutes ago Up 10 minutes naughty_hellman
root@cg:~/Desktop#
输出详情介绍:
-
CONTAINER ID:容器 ID。
-
IMAGE:使用的镜像。
-
COMMAND:启动容器时运行的命令。
-
CREATED:容器的创建时间。
-
STATUS:容器状态,共包含7种状态。
-
created:已创建
-
restarting:重启中
-
running:运行中
-
removing:迁移中
-
paused:暂停
-
exited:停止
-
dead:死亡
-
-
PORTS:容器的端口信息和使用的连接类型(tcp\udp)。
-
NAMES:自动分配的容器名称。
在宿主主机内使用
docker logs
命令,查看容器内的标准输出:
root@cg:~/Desktop# docker logs efdb36b237c5
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
...
使用容器名称查看日志:
root@cg:~/Desktop# docker logs naughty_hellman
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
...
4. 停止容器
使用
docker stop
命令来停止容器:
root@cg:~/Desktop# docker stop efdb
efdb
root@cg:~/Desktop# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@cg:~/Desktop#
通过
docker ps
查看,容器已经停止工作。 注意,在上述命令中,容器ID只使用了
efdb
,而没有写上完整的“efdb36b237c5”,这是由于docker会自动按照前缀搜索,如果某个容器ID可以和这个前缀匹配,则会定位到该容器。因此可以使用
efdb
这种简写的方式,当然,如果确定只有一个容器以
e
开头,也可以直接用命令
docker stop e
。
root@cg:~/Desktop# docker start e
e
root@cg:~/Desktop# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
efdb36b237c5 ubuntu:16.04 "/bin/bash -c 'while\u2026" 34 minutes ago Up 2 seconds naughty_hellman
root@cg:~/Desktop# docker stop e
e
root@cg:~/Desktop# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@cg:~/Desktop#
同样地,在停止容器时,也可以使用容器名称来操作:
root@cg:~/Desktop# docker start e
e
root@cg:~/Desktop# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
efdb36b237c5 ubuntu:16.04 "/bin/bash -c 'while\u2026" 37 minutes ago Up 2 seconds naughty_hellman
root@cg:~/Desktop# docker stop naughty_hellman
naughty_hellman
root@cg:~/Desktop# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES