zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Docker学习笔记07:docker使用之容器使用

2023-09-14 09:14:48 时间

获取镜像

如果我们本地没有 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/tcp

Docker 开放了 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 ~]# 

 

 至此,容器常用操作完成。