docker container run
命令。docker container run <image> <app>
中,指定了启动所需的镜像以及要运行的应用。docker container run -it ubuntu /bin/bash
则会启动某个 Ubuntu Linux 容器,并运行 Bash Shell 作为其应用。docker container run -it microsoft- /powershell:nanoserver pwsh.exe
。docker container run alpine:latest sleep 10
命令,Shell 会连接到容器 Shell 10s 的时间,然后退出。docker container stop
命令手动停止容器运行,并且使用 docker container start
再次启动该容器。docker container rm
命令来删除容器。
$ docker version Client: Version: API 17.05.0-ce version: Go 1.29 version: Git go1.7.5 commit: 89658be Built: Thu May 4 22:10:54 2017 OS/Arch: linux/amd64 Server: Version: 17.05.0-ce API version: 1.29 (minimum version 1.12) Go version: go1.7.5 Git commit: 89658be Built: Thu May 4 22:10:54 2017 OS/Arch: linux/amd64 Experimental: false当命令输出中包含 Client 和 Server 的内容时,可以继续下面的操作。如果在 Server 部分中包含了错误码,这表示 Docker daemon 很可能没有运行,或者当前用户没有权限访问。
usermod -aG docker <user>
来添加,然后退出并重新登录 Shell,改动即可生效。//使用 Systemd 在 Linux 系统中执行该命令 $ service docker status docker start/running, process 29393 //使用Systemd在Linux系统中执行该命令 $ systemctl is-active docker active //在Windows Server 2016的PowerShell窗口中运行该命令 > Get-Service docker Status Name DisplayName ------ ---- ----------- Running Docker docker
docker container run
命令。docker container run -it microsoft/powershell:nanoserver pwsh.exe
命令的基础格式为:docker container run <options> <im- age>:<tag> <app>
示例中使用docker container run
来启动容器,这也是启动新容器的标准命令。
root@3027eb644874:/# ls -l
total 64
drwxr-xr-x 2 root root 4096 Aug 19 00:50 bin
drwxr-xr-x 2 root root 4096 Apr 12 20:14 boot
drwxr-xr-x 5 root root 380 Sep 13 00:47 dev
drwxr-xr-x 45 root root 4096 Sep 13 00:47 etc
drwxr-xr-x 2 root root 4096 Apr 12 20:14 home
drwxr-xr-x 8 root root 4096 Sep 13 2015 lib
drwxr-xr-x 2 root root 4096 Aug 19 00:50 lib64
drwxr-xr-x 2 root root 4096 Aug 19 00:50 media
drwxr-xr-x 2 root root 4096 Aug 19 00:50 mnt
drwxr-xr-x 2 root root 4096 Aug 19 00:50 opt
dr-xr-xr-x 129 root root 0 Sep 13 00:47 proc
drwx------ 2 root root 4096 Aug 19 00:50 root
drwxr-xr-x 6 root root 4096 Aug 26 18:50 run
drwxr-xr-x 2 root root 4096 Aug 26 18:50 sbin
drwxr-xr-x 2 root root 4096 Aug 19 00:50 srv
dr-xr-xr-x 13 root root 0 Sep 13 00:47 sys
drwxrwxrwt 2 root root 4096 Aug 19 00:50 tmp
drwxr-xr-x 11 root root 4096 Aug 26 18:50 usr
drwxr-xr-x 13 root root 4096 Aug 26 18:50 var
root@3027eb644874:/# ping www.docker.com
bash: ping: command not found
ps -elf
命令在容器内部查看。
root@3027eb644874:/# ps -elf
F S UID 4 PID PPID NI ADDR SZ WCHAN STIME TTY TIME CMD
S root 0 1 0 0 - 4558 wait 00:47 ? 00:00:00 /bin/bash
R root 11 1 0 - 8604 - 00:52 ? 00:00:00 ps -elf
exit
退出 Bash Shell,那么容器也会退出(终止)。docker container ls
命令来观察当前系统正在运行的容器列表。
$ docker container ls
CNTNR ID IMAGE COMMAND CREATED STATUS NAMES
302...74 ubuntu:latest /bin/bash 6 mins Up 6mins sick_montalcini
$ docker container exec -it 3027eb644874 bash
root@3027eb644874:/#
docker container exec -it <container-name-or-ID> pwsh.exe
。docker container exec
命令创建了新的 Bash 或者 PowerShell 进程并且连接到容器。docker container ps
来确认容器依然在运行中。果然容器还在运行。
$ docker container stop 3027eb64487
3027eb64487
$ docker container rm 3027eb64487
3027eb64487
docker container run
命令来启动容器。接下来会重新启动一个新的容器,这样就可以观察期完整的生命周期。
$ docker container run --name percy -it ubuntu:latest /bin/bash
root@9cb2d2fd1d65:/#
root@9cb2d2fd1d65:/# cd tmp
root@9cb2d2fd1d65:/tmp# ls -l
total 0
root@9cb2d2fd1d65:/tmp# echo "DevOps FTW" > newfile
root@9cb2d2fd1d65:/tmp# ls -l
total 4
-rw-r--r-- 1 root root 14 May 23 11:22 newfile
root@9cb2d2fd1d65:/tmp# cat newfile
DevOps FTW
docker container stop
命令来停止容器运行,切换到暂停(vacation)状态。
$ docker container stop percy
percy
docker container stop
命令中指定容器的名称或者 ID。具体格式为:
docker container stop <container-id or container-name>
现在运行 docker container ls 命令列出全部处于运行中状态的容器。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker container stop
命令使该容器停止运行。加上 -a 参数再次运行前面的命令,就会显示出全部的容器,包括处于停止状态的。
$ docker container ls -a
CNTNR ID IMAGE COMMAND CREATED STATUS NAMES
9cb...65 ubuntu:latest /bin/bash 4 mins Exited (0) percy
docker container start
命令可以将容器重新启动。
$ docker container start percy
percy
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
9cb2d2fd1d65 ubuntu:latest "/bin/bash" 4 mins Up 3 secs percy
docker container exec
命令连接到重启后的容器。
$ docker container exec -it percy bash
root@9cb2d2fd1d65:/#
root@9cb2d2fd1d65:/# cd tmp
root@9cb2d2fd1d65:/# ls -l
-rw-r--r-- 1 root root 14 Sep 13 04:22 newfile
root@9cb2d2fd1d65:/#
root@9cb2d2fd1d65:/# cat newfile
DevOps FTW
docker container rm
命令后面添加 -f 参数来一次性删除运行中的容器是可行的。
$ docker container stop percy
percy
$ docker container rm percy
percy
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker container rm <container> -f
来销毁运行中的容器时,不会发出任何告警。docker container stop
命令就有礼貌多了(就像用枪指着容器的脑袋然后说“你有 10s 时间说出你的遗言”)。docker container rm
命令删除容器了。docker container stop
命令向容器内的 PID 1 进程发送了 SIGTERM 这样的信号。docker container rm <container> -f
命令不会先友好地发送 SIGTERM,这条命令会直接发出 SIGKILL。就像刚刚所打的比方一样,该命令悄悄接近并对容器发起致命一击。docker-container run
命令中,或者在 Compose 文件中声明(在使用 Docker Compose 以及 Docker Stacks 的情况下)。docker container stop
命令,否则该策略会一直尝试重启处于停止状态的容器。docker container ls
命令,就会看到容器的启动时间小于创建时间。下面请看示例。
$ docker container run --name neversaydie -it --restart always alpine sh
//等待几秒后输入exit
/# exit
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS
0901afb84439 alpine "sh" 35 seconds ago Up 1 second
docker container stop
命令停止该容器。docker container stop
命令停止,接着重启 Docker。结果“always”容器会重启,但是“unless-stopped”容器不会。
$ docker container run -d --name always \
--restart always \
alpine sleep 1d
$ docker container run -d --name unless-stopped \
--restart unless-stopped \
alpine sleep 1d
$ docker container ls
CONTAINER ID IMAGE COMMAND STATUS NAMES
3142bd91ecc4 alpine "sleep 1d" Up 2 secs unless-stopped
4f1b431ac729 alpine "sleep 1d" Up 17 secs always
$ docker container stop always unless-stopped
$ docker container ls -a
CONTAINER ID IMAGE STATUS NAMES
3142bd91ecc4 alpine Exited (137) 3 seconds ago unless-stopped
4f1b431ac729 alpine Exited (137) 3 seconds ago always
$ systemlctl restart docker
$ docker container ls -a
CONTAINER CREATED STATUS NAMES
314..cc4 2 minutes ago Exited (137) 2 minutes ago unless-stopped
4f1..729 2 minutes ago Up 9 seconds always
version: "3.5"
services:
myservice:
<Snip>
restart_policy:
condition: always | unless-stopped | on-failure
docker container stop
以及 docker container rm
命令清理当前系统中的全部容器,然后运行下面的 docker container run
命令。
$ docker container run -d --name webserver -p 80:8080 \
nigelpoulton/pluralsight-docker-ci
Unable to find image 'nigelpoulton/pluralsight-docker-ci:latest' locally
latest: Pulling from nigelpoulton/pluralsight-docker-ci
a3ed95caeb02: Pull complete
3b231ed5aa2f: Pull complete
7e4f9cd54d46: Pull complete
929432235e51: Pull complete
6899ef41c594: Pull complete
0b38fccd0dab: Pull complete
Digest: sha256:7a6b0125fe7893e70dc63b2...9b12a28e2c38bd8d3d
Status: Downloaded newer image for nigelpoulton/plur...docker-ci:latest
6efa1838cd51b92a4817e0e7483d103bf72a7ba7ffb5855080128d85043fef21
docker container run
命令中抛出了一些额外的参数,一起来快速了解一下。docker container run
会启动一个新容器,但是这次使用 -d 参数替换了 -it。-d 表示后台模式,告知容器在后台运行。docker container ls
命令可以查看当前运行的容器以及端口的映射情况。端口信息按照 host-port:container-port 的格式显示,明确这一点很重要。
$ docker container ls
CONTAINER ID COMMAND STATUS PORTS NAMES
6efa1838cd51 /bin/sh -c... Up 2 mins 0.0.0.0:80->8080/tcp webserver
docker container run
命令的时候,并没有指定容器中的具体应用。但是容器却启动了一个简单的 Web 服务。这是如何发生的?docker image inspect
命令来查看运行容器时使用的镜像,就能看到容器启动时将要运行的应用列表了。
$ docker image inspect nigelpoulton/pluralsight-docker-ci
[
{
"Id": "sha256:07e574331ce3768f30305519...49214bf3020ee69bba1",
"RepoTags": [
"nigelpoulton/pluralsight-docker-ci:latest"
<Snip>
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) CMD [\"/bin/sh\" \"-c\" \"cd /src \u0026\u0026 node \
.app.js\"]"
],
<Snip>
$()
在本例中,因为只有一个运行中的容器,所以只有一个容器被删除(6efa1838cd51)。rm $(docker image ls -q)
一样,docker container rm
命令会删除容器。docker container rm
命令,等价于将系统中每个容器的 ID 传给该命令。本文链接:http://task.lmcjl.com/news/14196.html