Docker 笔记——Docker 基本操作

安装 Docker

使用环境为 LinuxMint 18(基于 Ubuntu 16.04),基本参照官方文档进行。

Docker 基本操作

查看信息

1
docker info

通过docker info 命令查看输出的容器、镜像数量和基本的配置信息。

运行第一个容器

下面来创建第一个 Docker 容器:

1
docker run -i -t ubuntu /bin/bash

-t 参数将给容器分配一个伪 tty 终端,使我们可以创建一个可以交互的容器。-t 参数保证没有附着到容器时,STDIN 为开启状态。基于 ubuntu 创建一个容器,容器基于镜像创建,本地没有 ubuntu 镜像将从官方 Registry pull 仓库。随后的 /bin/bash 启动了一个 bash shell。

1
root@a6548f35ae74:/#

现在就可以在容器中进行一系列操作。

使用容器

当输入 exit 时退出容器。此时容器也停止了运行。

查看容器的运行状态。

1
docker ps -a

docker ps 命令可以列出正在运行的容器,加 -a 参数可以列出所有的容器,包括停止运行的容器。

1
2
3
4
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6548f35ae74 ubuntu "/bin/bash" 8 minutes ago Exited (0) 3 seconds ago goofy_shirley
7b7d1d2c4fd4 ubuntu "/bin/bash" 33 minutes ago Exited (0) 32 minutes ago naughty_turing

容器命名

Docker 在创建容器的是否分配一个随机名字,当然也是可以更改的:

1
docker rename OLD_NAME NEW_NAME

或者在创建容器的时候指定 --name 参数来命名新容器:

1
2
3
4
5
6
7
$ docker run --name new_container -t -i ubuntu /bin/bash
root@081d0ff60f8b:/# exit
exit

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
081d0ff60f8b ubuntu "/bin/bash" 17 seconds ago Exited (0) 12 seconds ago new_container

容器的命名唯一,试图创建两个名字相同的容器会报错。

重启容器

重新启动已停止的容器:

1
2
3
4
5
6
$ docker start test
test

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6548f35ae74 ubuntu "/bin/bash" About an hour ago Up 5 seconds test

可以看到容器已经重新启动。要与之进行交互,attach container:

1
2
3
$ docker attach a6548f35ae74 
root@a6548f35ae74:/#
root@a6548f35ae74:/#

守护式容器

除了上述交互式容器,还可以创建守护式容器:

1
2
$ docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
87b0002a9aff201d54511bba95a5fc6c7f7772f40a4a384ff82c5300b607605d

-d 参数将创建一个后台运行的容器。

1
2
3
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87b0002a9aff ubuntu "/bin/sh -c 'while tr" About a minute ago Up About a minute daemon_dave

通过 docker logs 命令可以获取容器的日志:

1
2
3
4
$ docker logs daemon_dave 
hello world
hello world
hello world

监控并格式化输出日志:

1
2
3
4
5
6
$ docker logs -f -t daemon_dave 
2016-09-30T03:55:26.662176379Z hello world
2016-09-30T03:55:27.663102063Z hello world
2016-09-30T03:55:28.664941891Z hello world
2016-09-30T03:55:29.666235163Z hello world
...

Ctrl + C 退出日志监控。

查看容器内进程和查看宿主机进程相似,都用 top 命令:

1
2
3
4
$ docker top daemon_dave 
UID PID PPID C STIME TTY TIME CMD
root 5049 25010 0 12:05 ? 00:00:00 sleep 1
root 25010 24993 0 11:55 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done

要在容器中额外启动新进程,可以使用 docker exec 命令:

1
2
$ docker exec -i -t daemon_dave /bin/bash
root@87b0002a9aff:/#

上面的命令在我们的后台容器中启动了一个交互式终端。

停止一个守护式容器:

1
2
3
4
5
6
$ docker stop daemon_dave 
daemon_dave

$ docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87b0002a9aff ubuntu "/bin/sh -c 'while tr" 17 minutes ago Exited (137) 2 minutes ago daemon_dave

上面的 docker ps 命令中的 -n x 参数可以列出最后 x 个容器,无论容器是否运行。

自动重启容器

--restart 标志检查容器的退出代码,并据此决定是否要重启容器。

1
2
$ docker run --restart=always --name daemon_dave -d ubuntu bin/sh -c "while true; do echo hello world; sleep 1; done"
69aabbf9da1cee212ae1dc2baf9c133572d9fe8beccba127b2088f0d7e0a3e3d

上述代码将导致无论退出代码是什么,都会使容器重启。此外还有 on-failure 标志,使退出代码为非 0 值时才重启。它还可接受一个可选的重启次数参数 on-failure:10 。最多重启 10 次。

容器信息

docker inspect 命令可以获取容器的详细信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ docker inspect daemon_dave
[
{
"Id": "69aabbf9da1cee212ae1dc2baf9c133572d9fe8beccba127b2088f0d7e0a3e3d",
"Created": "2016-09-30T04:32:08.74050402Z",
"Path": "bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep 1; done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2016-09-30T04:32:09.72241889Z",
"FinishedAt": "2016-09-30T04:37:35.465017364Z"
},
...

通过 -f 参数来获取制定结果:

1
2
3
4
5
$ docker inspect -f '{{ .State }}' daemon_dave
{exited false false false false false 0 137 2016-09-30T04:32:09.72241889Z 2016-09-30T04:37:35.465017364Z <nil>}

$ docker inspect -f '{{ .State.Status }}' daemon_dave
exited

删除容器

1
2
$ docker rm daemon_dave 
daemon_dave

运行中的容器不能删除,需先停止容器才可以删除。

本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处! © 雨落
  1. 1. 安装 Docker
  2. 2. Docker 基本操作
    1. 2.1. 查看信息
    2. 2.2. 运行第一个容器
    3. 2.3. 使用容器
    4. 2.4. 容器命名
    5. 2.5. 重启容器
    6. 2.6. 守护式容器
    7. 2.7. 自动重启容器
    8. 2.8. 容器信息
    9. 2.9. 删除容器