Docker学习笔记07:docker使用之容器使用
获取镜像
如果我们本地没有 redis镜像,我们可以使用 docker pull 命令来载入 redis 镜像:
[root@test ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 231d40e811cd 3 weeks ago 126MB ansible 2.0 38a4a7650067 3 months ago 481MB celery_env 2.0 1f642bd32d94 3 months ago 2.01GB zabbix/zabbix-agent centos-4.0-latest c5302a10cad2 3 months ago 228MB mysql 5.7 e1e1680ac726 4 months ago 373MB zabbix/zabbix-web-apache-mysql centos-4.0-latest 587c9f53bbbd 4 months ago 474MB zabbix/zabbix-server-mysql centos-4.0-latest 7fbda7c3fa2e 4 months ago 333MB [root@test ~]# [root@test ~]# [root@test ~]# docker pull redis Using default tag: latest latest: Pulling from library/redis 000eee12ec04: Already exists 5cc53381c195: Pull complete 48bb7bcb5fbf: Pull complete ef8a890bb1c2: Pull complete 32ada9c6fb0d: Pull complete 76e034b0f296: Pull complete Digest: sha256:1eedfc017b0cd3e232878ce38bd9328518219802a8ef37fe34f58dcf591688ef Status: Downloaded newer image for redis:latest [root@test ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest dcf9ec9265e0 3 weeks ago 98.2MB nginx latest 231d40e811cd 3 weeks ago 126MB ansible 2.0 38a4a7650067 3 months ago 481MB celery_env 2.0 1f642bd32d94 3 months ago 2.01GB zabbix/zabbix-agent centos-4.0-latest c5302a10cad2 3 months ago 228MB mysql 5.7 e1e1680ac726 4 months ago 373MB zabbix/zabbix-web-apache-mysql centos-4.0-latest 587c9f53bbbd 4 months ago 474MB zabbix/zabbix-server-mysql centos-4.0-latest 7fbda7c3fa2e 4 months ago 333MB [root@test ~]#
启动容器
以下命令使用 redis镜像启动一个容器,参数为以命令行模式进入该容器:
[root@test ~]# docker run -it dcf9ec9265e0 /bin/bash root@cf27a69ff0d3:/data# ls
参数说明:
- -i: 交互式操作。
- -t: 终端。
- dcf9ec9265e0: redis镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
root@cf27a69ff0d3:/# exit exit [root@test ~]#
启动已停止运行的容器
查看所有的容器命令如下:
[root@test ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest dcf9ec9265e0 3 weeks ago 98.2MB nginx latest 231d40e811cd 3 weeks ago 126MB ansible 2.0 38a4a7650067 3 months ago 481MB celery_env 2.0 1f642bd32d94 3 months ago 2.01GB zabbix/zabbix-agent centos-4.0-latest c5302a10cad2 3 months ago 228MB mysql 5.7 e1e1680ac726 4 months ago 373MB zabbix/zabbix-web-apache-mysql centos-4.0-latest 587c9f53bbbd 4 months ago 474MB zabbix/zabbix-server-mysql centos-4.0-latest 7fbda7c3fa2e 4 months ago 333MB [root@test ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 2 minutes ago Exited (0) 2 minutes ago heuristic_brattain ae31ed600854 1f642bd32d94 "/bin/sh -c 'while t…" 34 minutes ago Exited (137) 27 minutes ago silly_shaw 50046987514f 1f642bd32d94 "/bin/bash" About an hour ago Exited (0) 45 minutes ago focused_lewin 3aeb30c31b99 1f642bd32d94 "/bin/bash" 22 hours ago Up 22 hours lucid_heyrovsky 326fcb6c6b17 1f642bd32d94 "/bin/echo 'Hello wo…" 22 hours ago Exited (0) 22 hours ago elated_panini 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 3e391a12359d 1f642bd32d94 "/bin/bash" 23 hours ago Exited (137) 23 hours ago agitated_kalam 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 23 hours ago Up 23 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 23 hours ago Up 23 hours 80/tcp cocky_colden
使用 docker start 启动一个已停止的容器:
[root@test ~]# docker start cf27a69ff0d3 cf27a69ff0d3 [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 4 minutes ago Up 12 seconds 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 22 hours ago Up 22 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 23 hours ago Up 23 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 23 hours ago Up 23 hours 80/tcp cocky_colden
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
[root@test ~]# docker run -itd --name redis-test dcf9ec9265e0 /bin/bash 0f5e25449a37ace48a31805d756a328186c3645d9d454c96764e7a8142333173 [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5e25449a37 dcf9ec9265e0 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp redis-test cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 10 minutes ago Up 6 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 22 hours ago Up 22 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 23 hours ago Up 23 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 23 hours ago Up 23 hours 80/tcp cocky_colden [root@test ~]#
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。
停止一个容器
停止容器的命令如下:
[root@test ~]# docker stop 0f5e25449a37 0f5e25449a37 [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 12 minutes ago Up 8 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 22 hours ago Up 22 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 23 hours ago Up 23 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 23 hours ago Up 23 hours 80/tcp cocky_colden
停止的容器可以通过 docker restart 重启:
[root@test ~]# docker restart 0f5e25449a37 0f5e25449a37 [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5e25449a37 dcf9ec9265e0 "docker-entrypoint.s…" 2 minutes ago Up 2 seconds 6379/tcp redis-test cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 12 minutes ago Up 9 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 22 hours ago Up 22 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 23 hours ago Up 23 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 23 hours ago Up 23 hours 80/tcp cocky_colden [root@test ~]#
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
attach 命令
下面演示了使用 docker attach 命令。
[root@test ~]# docker attach 0f5e25449a37 root@0f5e25449a37:/data# ls root@0f5e25449a37:/data# root@0f5e25449a37:/data# root@0f5e25449a37:/data# exit exit [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 21 minutes ago Up 17 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]#
注意: 如果从这个容器退出,会导致容器的停止。
exec 命令
下面演示了使用 docker exec 命令。
[root@test ~]# docker exec -it 0f5e25449a37 /bin/bash Error response from daemon: Container 0f5e25449a37ace48a31805d756a328186c3645d9d454c96764e7a8142333173 is not running [root@test ~]# docker start 0f5e25449a37 0f5e25449a37 [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5e25449a37 dcf9ec9265e0 "docker-entrypoint.s…" 13 minutes ago Up 4 seconds 6379/tcp redis-test cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 24 minutes ago Up 20 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]# docker exec -it 0f5e25449a37 /bin/bash root@0f5e25449a37:/data# ls root@0f5e25449a37:/data# root@0f5e25449a37:/data# root@0f5e25449a37:/data# exit exit [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5e25449a37 dcf9ec9265e0 "docker-entrypoint.s…" 14 minutes ago Up 28 seconds 6379/tcp redis-test cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 24 minutes ago Up 20 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 23 hours ago Up 23 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]#
注意: 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。
更多参数说明请使用 docker exec --help 命令查看。
导出和导入容器
导出容器
如果要导出本地某个容器,可以使用 docker export 命令。
导出容器 0f5e25449a37 快照到本地文件 redis-test.tar。
[root@test ~]# docker export 0f5e25449a37 > redis-test.tar [root@test ~]# ll -lrt total 3979860 -rw-r--r-- 1 root root 378422784 Oct 24 16:43 mysql.tar -rw-r--r-- 1 root root 98110976 Dec 19 10:43 redis-test.tar [root@test ~]#
这样将导出容器快照到本地文件。
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 redis-test.tar 导入到镜像 test/redis-test:v1:
[root@test ~]# cat redis-test.tar | docker import - test/redis-test:v1 sha256:e1bd6ab53cd8c4dc62da8b9022095823351a6ae665414629f7a046973a61e979 [root@test ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/redis-test v1 e1bd6ab53cd8 14 seconds ago 94.8MB redis latest dcf9ec9265e0 3 weeks ago 98.2MB nginx latest 231d40e811cd 3 weeks ago 126MB ansible 2.0 38a4a7650067 3 months ago 481MB celery_env 2.0 1f642bd32d94 3 months ago 2.01GB zabbix/zabbix-agent centos-4.0-latest c5302a10cad2 3 months ago 228MB mysql 5.7 e1e1680ac726 4 months ago 373MB zabbix/zabbix-web-apache-mysql centos-4.0-latest 587c9f53bbbd 4 months ago 474MB zabbix/zabbix-server-mysql centos-4.0-latest 7fbda7c3fa2e 4 months ago 333MB [root@test ~]#
此外,也可以通过指定 URL 或者某个目录来导入,例如:
$ docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
删除容器使用 docker rm 命令:
[root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5e25449a37 dcf9ec9265e0 "docker-entrypoint.s…" 29 minutes ago Up 16 minutes 6379/tcp redis-test cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 40 minutes ago Up 36 minutes 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]# docker stop 0f5e25449a37 0f5e25449a37 [root@test ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f5e25449a37 dcf9ec9265e0 "docker-entrypoint.s…" 30 minutes ago Exited (0) 3 seconds ago redis-test cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 40 minutes ago Up 36 minutes 6379/tcp heuristic_brattain ae31ed600854 1f642bd32d94 "/bin/sh -c 'while t…" About an hour ago Exited (137) About an hour ago silly_shaw 50046987514f 1f642bd32d94 "/bin/bash" About an hour ago Exited (0) About an hour ago focused_lewin 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 326fcb6c6b17 1f642bd32d94 "/bin/echo 'Hello wo…" 23 hours ago Exited (0) 23 hours ago elated_panini 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 3e391a12359d 1f642bd32d94 "/bin/bash" 24 hours ago Exited (137) 24 hours ago agitated_kalam 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]# docker rm -f 0f5e25449a37 0f5e25449a37 [root@test ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" 41 minutes ago Up 37 minutes 6379/tcp heuristic_brattain ae31ed600854 1f642bd32d94 "/bin/sh -c 'while t…" About an hour ago Exited (137) About an hour ago silly_shaw 50046987514f 1f642bd32d94 "/bin/bash" About an hour ago Exited (0) About an hour ago focused_lewin 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 326fcb6c6b17 1f642bd32d94 "/bin/echo 'Hello wo…" 23 hours ago Exited (0) 23 hours ago elated_panini 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 3e391a12359d 1f642bd32d94 "/bin/bash" 24 hours ago Exited (137) 24 hours ago agitated_kalam 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]#
下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
运行一个 web 应用
前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
[root@test ~]# docker pull training/webapp Using default tag: latest latest: Pulling from training/webapp e190868d63f8: Pull complete 909cd34c6fd7: Pull complete 0b9bfabab7c1: Pull complete a3ed95caeb02: Pull complete 10bbbc0fc0ff: Pull complete fca59b508e9f: Pull complete e7ae2541b15b: Pull complete 9dd97ef58ce9: Pull complete a4c1b0cb7af7: Pull complete Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d Status: Downloaded newer image for training/webapp:latest [root@test ~]# [root@test ~]# [root@test ~]# docker run -d -P training/webapp python app.py 8e75e6fd17a779e328429f7cb0e09272c3020214d42882b47e21dd01cf47de76 [root@test ~]#
参数说明:
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
查看 WEB 应用容器
使用 docker ps 来查看我们正在运行的容器:
[root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e75e6fd17a7 training/webapp "python app.py" About a minute ago Up About a minute 0.0.0.0:32768->5000/tcp ecstatic_jennings cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]#
这里多了端口信息。
PORTS 0.0.0.0:32768->5000/tcpDocker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768上。
这时我们可以通过浏览器访问WEB应用,输出如下:
我们也可以通过 -p 参数来设置不一样的端口:
[root@test ~]# docker run -d -p 5000:5000 training/webapp python app.py 8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d3c19a91d3c training/webapp "python app.py" 5 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp thirsty_fermi 8e75e6fd17a7 training/webapp "python app.py" 14 minutes ago Up 14 minutes 0.0.0.0:32768->5000/tcp ecstatic_jennings cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 23 hours ago Up 23 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 24 hours ago Up 24 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 24 hours ago Up 24 hours 80/tcp cocky_colden [root@test ~]#
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar。
我可以使用 docker port 8d3c19a91d3c 或 docker port thirsty_fermi 来查看容器端口的映射情况。
[root@test ~]# docker port 8d3c19a91d3c 5000/tcp -> 0.0.0.0:5000 [root@test ~]# docker port thirsty_fermi 5000/tcp -> 0.0.0.0:5000 [root@test ~]#
查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
[root@test ~]# docker logs -f 8d3c19a91d3c * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 192.168.1.252 - - [19/Dec/2019 03:23:51] "GET / HTTP/1.1" 200 - 192.168.1.252 - - [19/Dec/2019 03:23:52] "GET /favicon.ico HTTP/1.1" 404 -
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。
查看WEB应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程
[root@test ~]# docker top 8d3c19a91d3c UID PID PPID C STIME TTY TIME CMD root 16654 16640 0 11:22 ? 00:00:00 python app.py [root@test ~]#
检查 WEB 应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
[root@test ~]# docker inspect 8d3c19a91d3c [ { "Id": "8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd", "Created": "2019-12-19T03:22:00.792625662Z", "Path": "python", "Args": [ "app.py" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 16654, "ExitCode": 0, "Error": "", "StartedAt": "2019-12-19T03:22:01.290597283Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557", "ResolvConfPath": "/var/lib/docker/containers/8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd/resolv.conf", "HostnamePath": "/var/lib/docker/containers/8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd/hostname", "HostsPath": "/var/lib/docker/containers/8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd/hosts", "LogPath": "/var/lib/docker/containers/8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd/8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd-json.log", "Name": "/thirsty_fermi", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": { "5000/tcp": [ { "HostIp": "", "HostPort": "5000" } ] }, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "shareable", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DiskQuota": 0, "KernelMemory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": 0, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0 }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/a535da68f7eb076c3c6347de089f127869b6af5891fe920bacc0a6131a72db33-init/diff:/var/lib/docker/overlay2/e78d827410666daab154c43c1d8630be194330bb70b229ff534f5f1c0738950a/diff:/var/lib/docker/overlay2/1d1982aef623d694b670fae2d57c6d90017ae98dc9e7e83dc90478a3cf0f9d82/diff:/var/lib/docker/overlay2/f08110b40a5dd0a2e5c8bb7e513d37b3a7fd6e2014bb4f90a145ef36e896ab7b/diff:/var/lib/docker/overlay2/c8cfa7f234d7294b25b415e0ed351fe33ca545102141fc70cffe421808b165f5/diff:/var/lib/docker/overlay2/b0715bbc6f324366805fd9d555119aae352c0367ef34bcb7d2eda7c1de6ba452/diff:/var/lib/docker/overlay2/6a5c73bccbf2d0758cfccaaf1dc702dedad1f215aea8baf2af9583b4700e44a0/diff:/var/lib/docker/overlay2/fc4d04b42c50ffca8a2c1fb4027b231b2b81cba524473157d80602d1e7598c87/diff:/var/lib/docker/overlay2/4f5a2847ab3a1c5f54e26215d7bfec5ec5706cee13e590751303a6d212519413/diff:/var/lib/docker/overlay2/7c578758b112a12903af9a0789a5f945712e3d8f96aa158f2d6555c75684e1b1/diff:/var/lib/docker/overlay2/b202c943b79a67dc998dcee1e11116132370bcb9f20c39c17d2661d8fb00d230/diff:/var/lib/docker/overlay2/781b03e49905c3c94e5346430315935bd2bd25a46af2fcc18fd205f78df53f84/diff:/var/lib/docker/overlay2/9bad726098e7733de922209d1544af7f5134c4480229e0415d2c93b9fb50ca06/diff:/var/lib/docker/overlay2/c185aeaf2dca75a94bb64318193d8b853c22a7f058b68853ed88c7e1baa09eea/diff", "MergedDir": "/var/lib/docker/overlay2/a535da68f7eb076c3c6347de089f127869b6af5891fe920bacc0a6131a72db33/merged", "UpperDir": "/var/lib/docker/overlay2/a535da68f7eb076c3c6347de089f127869b6af5891fe920bacc0a6131a72db33/diff", "WorkDir": "/var/lib/docker/overlay2/a535da68f7eb076c3c6347de089f127869b6af5891fe920bacc0a6131a72db33/work" }, "Name": "overlay2" }, "Mounts": [], "Config": { "Hostname": "8d3c19a91d3c", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "5000/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "python", "app.py" ], "Image": "training/webapp", "Volumes": null, "WorkingDir": "/opt/webapp", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "978b6215793d71ccf1cc06b8be76bb4f265176419f5383dcf13772469bb53b18", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "5000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5000" } ] }, "SandboxKey": "/var/run/docker/netns/978b6215793d", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "4fdfd52387cf711e2086339fd885989ad0b2f15bfeda0e5aca382f1b5cbd6cd7", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.8", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:08", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "043149dce669c7fddd94fa7c0077763b72a23718d434f57101c6bc008281e8a3", "EndpointID": "4fdfd52387cf711e2086339fd885989ad0b2f15bfeda0e5aca382f1b5cbd6cd7", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.8", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:08", "DriverOpts": null } } } } ] [root@test ~]#
停止 WEB 应用容器
[root@test ~]# docker stop 8d3c19a91d3c 8d3c19a91d3c [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e75e6fd17a7 training/webapp "python app.py" 29 minutes ago Up 29 minutes 0.0.0.0:32768->5000/tcp ecstatic_jennings cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 24 hours ago Up 24 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 25 hours ago Up 25 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 25 hours ago Up 25 hours 80/tcp cocky_colden [root@test ~]#
重启WEB应用容器
已经停止的容器,我们可以使用命令 docker start 来启动。
[root@test ~]# docker start 8d3c19a91d3c 8d3c19a91d3c [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d3c19a91d3c training/webapp "python app.py" 15 minutes ago Up 2 seconds 0.0.0.0:5000->5000/tcp thirsty_fermi 8e75e6fd17a7 training/webapp "python app.py" 30 minutes ago Up 30 minutes 0.0.0.0:32768->5000/tcp ecstatic_jennings cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp heuristic_brattain 3aeb30c31b99 1f642bd32d94 "/bin/bash" 24 hours ago Up 24 hours lucid_heyrovsky 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 25 hours ago Up 25 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 25 hours ago Up 25 hours 80/tcp cocky_colden [root@test ~]#
docker ps -l 查询最后一次创建的容器:
[root@test ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d3c19a91d3c training/webapp "python app.py" 16 minutes ago Up 37 seconds 0.0.0.0:5000->5000/tcp thirsty_fermi [root@test ~]#
正在运行的容器,我们可以使用 docker restart 命令来重启。
移除WEB应用容器
我们可以使用 docker rm 命令来删除不需要的容器
[root@test ~]# docker rm 8d3c19a91d3c --删除容器时,容器必须是停止状态,否则会报如下错误 Error response from daemon: You cannot remove a running container 8d3c19a91d3c07ab34974247b6e3d0992a8ce3eccaf48ac9cf58d3a7841016dd. Stop the container before attempting removal or force remove [root@test ~]# docker stop 8d3c19a91d3c 8d3c19a91d3c [root@test ~]# docker rm 8d3c19a91d3c 8d3c19a91d3c [root@test ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e75e6fd17a7 training/webapp "python app.py" 32 minutes ago Up 32 minutes 0.0.0.0:32768->5000/tcp ecstatic_jennings cf27a69ff0d3 dcf9ec9265e0 "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp heuristic_brattain ae31ed600854 1f642bd32d94 "/bin/sh -c 'while t…" 2 hours ago Exited (137) 2 hours ago silly_shaw 50046987514f 1f642bd32d94 "/bin/bash" 2 hours ago Exited (0) 2 hours ago focused_lewin 3aeb30c31b99 1f642bd32d94 "/bin/bash" 24 hours ago Up 24 hours lucid_heyrovsky 326fcb6c6b17 1f642bd32d94 "/bin/echo 'Hello wo…" 24 hours ago Exited (0) 24 hours ago elated_panini 660644cb03d8 e1e1680ac726 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp friendly_mccarthy 3e391a12359d 1f642bd32d94 "/bin/bash" 25 hours ago Exited (137) 25 hours ago agitated_kalam 49194cec6480 38a4a7650067 "tail -f /dev/null /…" 25 hours ago Up 25 hours jolly_tereshkova 5c0a4fb8dc05 231d40e811cd "/bin/bash" 25 hours ago Up 25 hours 80/tcp cocky_colden [root@test ~]#
至此,容器常用操作完成。
相关文章
- Docker快速入门总结笔记
- Docker容器实战十一:数据存储
- CentOS 8 Docker离线安装[通俗易懂]
- 关于Docker中 容器镜像管理,数据卷网络,本地仓库,容器监控的一些笔记
- DK-centoa7安装docker-compose
- Docker服务的重启服务命令(systemctl restart docker)
- docker使用笔记VII -- Scrapy
- docker使用笔记III -- docker的快速安装
- 「 【Docker】设置docker加速器(如何使docker下载速度变快) 」
- 「 【Docker】利用宝塔docker管理器搭建为知笔记(docker安装为知笔记) 」
- docker笔记、常用命令
- Docker安装Kafka(docker-compose)、EFAK监控
- docker学习笔记详解程序员
- Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践详解编程语言
- 使用 Docker 部署 Redis 服务器(dockerredis)
- 构建高性能应用:利用Docker与Redis(dockerredis)