docker容器使用

2. 容器使用

获取镜像

如果本地没有ubuntu镜像,可使用docker pull下载:

root@cg:~/Desktop# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete 
c63719cdbe7a: Pull complete 
19a861ea6baf: Pull complete 
651c9d2d6c4f: Pull complete 
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
root@cg:~/Desktop# 

docker_pull_ubuntu

启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数表示以命令行模式进入该容器:

root@cg:~/Desktop# docker run -it ubuntu /bin/bash
root@77bf8684f60d:/#

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里需要使用交互式方式Shell访问容器,因此用的是 /bin/bash。

docker run

要退出终端,直接输入 exit:

root@77bf8684f60d:/# exit
exit
root@cg:~/Desktop#

exit

启动已停止运行的容器

查看所有的容器命令如下:

root@cg:~/Desktop# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
77bf8684f60d        ubuntu               "/bin/bash"              8 minutes ago       Exited (0) 7 minutes ago                        strange_euclid
efdb36b237c5        ubuntu:16.04         "/bin/bash -c 'while\u2026"   14 hours ago        Exited (137) 13 hours ago                       naughty_hellman
4eda574d7063        hello-world:latest   "/hello"                 14 hours ago        Exited (0) 14 hours ago                         vigilant_nobel
root@cg:~/Desktop# 

docker_ps2

注意docker ps命令只显示当前正在运行的容器,-a选项表示显示所有容器,包括停止运行的容器。

从 Status 一列中可以看出容器 77bf8684f60d 已处于停止运行状态。

使用 docker start 启动一个已停止的容器:

root@cg:~/Desktop# docker start 77bf8684f60d
77bf8684f60d
root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
77bf8684f60d        ubuntu              "/bin/bash"         14 minutes ago      Up 1 second                             strange_euclid
root@cg:~/Desktop# 

docker_start

可以看出,容器 77bf8684f60d 已顺利启动。

后台运行

在大部分的场景下,docker 的服务是在后台运行的,可以通过 -d 指定容器的运行模式。

root@cg:~/Desktop# docker run -itd --name ubuntu_test ubuntu /bin/bash
7eb79964161ba593d39f40cecabb581178b080fcefdb724bfebf365dd837c379
root@cg:~/Desktop# 

docker_run_d

注意:加了 -d 参数默认不会进入容器,可通过 docker exec命令进入容器(后续详细介绍)。

停止一个容器

停止容器的命令为:docker stop <容器 ID>

示例如下:

root@cg:~/Desktop# docker stop 7eb79964161b
7eb79964161b
root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
77bf8684f60d        ubuntu              "/bin/bash"         29 minutes ago      Up 6 minutes                            strange_euclid
root@cg:~/Desktop# docker restart 7eb79964161b
7eb79964161b
root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7eb79964161b        ubuntu              "/bin/bash"         11 minutes ago      Up 5 seconds                            ubuntu_test
77bf8684f60d        ubuntu              "/bin/bash"         29 minutes ago      Up 6 minutes                            strange_euclid
root@cg:~/Desktop# 

docker_restart

除了docker start外,停止的容器也可以通过命令docker restart <容器 ID>重启:

进入容器

在使用 -d 参数时,容器启动后会在后台运行。此时想要进入容器,可通过以下命令进入:

  • docker attach
  • docker exec

推荐使用 docker exec 命令,因为使用该命令退出容器终端后,不会导致容器停止运行。

attach 命令

下面演示了 docker attach 命令的使用。

root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7eb79964161b        ubuntu              "/bin/bash"         2 hours ago         Up 9 seconds                            ubuntu_test
77bf8684f60d        ubuntu              "/bin/bash"         2 hours ago         Up 2 hours                              strange_euclid
root@cg:~/Desktop# docker attach 7eb79964161b
root@7eb79964161b:/# exit   
exit
root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
77bf8684f60d        ubuntu              "/bin/bash"         2 hours ago         Up 2 hours                              strange_euclid
root@cg:~/Desktop# 

docker_attach

可以看出,使用 docker attach 命令进入容器后,如果从该容器退出,会导致容器停止运行。

exec 命令

下面演示了 docker exec 命令的使用。

root@cg:~/Desktop# docker start 7eb79964161b
7eb79964161b
root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7eb79964161b        ubuntu              "/bin/bash"         2 hours ago         Up 3 seconds                            ubuntu_test
77bf8684f60d        ubuntu              "/bin/bash"         2 hours ago         Up 2 hours                              strange_euclid
root@cg:~/Desktop# docker exec -it 7eb79964161b /bin/bash
root@7eb79964161b:/# exit
exit
root@cg:~/Desktop# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7eb79964161b        ubuntu              "/bin/bash"         2 hours ago         Up 11 seconds                           ubuntu_test
77bf8684f60d        ubuntu              "/bin/bash"         2 hours ago         Up 2 hours                              strange_euclid
root@cg:~/Desktop# 

docker_exec

可以看出,使用 docker exec命令进入容器后,从容器退出不会导致容器停止运行。因此,推荐使用 docker exec 命令。

请使用 docker exec --help 命令查看 docker exec 命令的更多参数说明。

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

root@cg:~/Desktop# docker export 7eb79964161b -o ubuntu_test.tar
root@cg:~/Desktop# ls -l ubuntu_test.tar 
-rw------- 1 root root 66572800 Jan 28 05:56 ubuntu_test.tar
root@cg:~/Desktop#

docker_export

导出容器 7eb79964161b 快照到本地文件 ubuntu_test.tar ,从上图中可以看出桌面上生成了文件 ubuntu_test.tar 。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下命令将快照文件 ubuntu_test.tar 导入为镜像 cg/my_ubuntu:v1:

root@cg:~/Desktop# docker import ubuntu_test.tar cg/my_ubuntu:v1.0
sha256:66b77375323c9e42044fd09d9f09f083a7bb43bcd5a627555b161fe33575e7af
root@cg:~/Desktop# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
cg/my_ubuntu        v1.0                66b77375323c        3 seconds ago       64.2MB
ubuntu              16.04               96da9143fb18        12 days ago         124MB
ubuntu              latest              ccc6e87d482b        12 days ago         64.2MB
hello-world         latest              fce289e99eb9        13 months ago       1.84kB
root@cg:~/Desktop#

docker_import

此外,也可以通过指定 URL 或者某个目录来导入,例如:

$ docker import http://example.com/exampleimage.tar example/imagerepo

删除容器

删除容器使用 docker rm 命令:

root@cg:~/Desktop# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
7eb79964161b        ubuntu               "/bin/bash"              2 hours ago         Up 19 minutes                                   ubuntu_test
77bf8684f60d        ubuntu               "/bin/bash"              2 hours ago         Up 2 hours                                      strange_euclid
efdb36b237c5        ubuntu:16.04         "/bin/bash -c 'while\u2026"   16 hours ago        Exited (137) 15 hours ago                       naughty_hellman
4eda574d7063        hello-world:latest   "/hello"                 17 hours ago        Exited (0) 17 hours ago                         vigilant_nobel
root@cg:~/Desktop# docker stop 7eb79964161b
7eb79964161b
root@cg:~/Desktop# docker rm 7eb79964161b
7eb79964161b
root@cg:~/Desktop# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
77bf8684f60d        ubuntu               "/bin/bash"              2 hours ago         Up 2 hours                                      strange_euclid
efdb36b237c5        ubuntu:16.04         "/bin/bash -c 'while\u2026"   16 hours ago        Exited (137) 15 hours ago                       naughty_hellman
4eda574d7063        hello-world:latest   "/hello"                 17 hours ago        Exited (0) 17 hours ago                         vigilant_nobel
root@cg:~/Desktop# 

docker_rm

可见通过 docker rm 删除容器7eb79964161b后,在容器列表中已经移除了该容器。

通过 docker container prune 命令可将处于终止状态的容器全部删除。

以下操作演示了该命令的使用,首先使用 ubuntu 镜像创建三个容器,并将其终止,

root@cg:~/Desktop# docker run -itd --name ubuntu_test1 ubuntu 
be9afaab456869f0c5606b483de9fb064757c8d4217a07f2e29c2e71d41cd974
root@cg:~/Desktop# docker run -itd --name ubuntu_test2 ubuntu
77925c6165783ae7d2320b277a8e5be0c4f6e7d56dcda76aa0d089a74e31eb49
root@cg:~/Desktop# docker run -itd --name ubuntu_test3 ubuntu
5c34d8507ad3e4a2a73f44e0094a843d3b9f2635d0919b47f76c564010c2a571
root@cg:~/Desktop# docker stop ubuntu_test1
ubuntu_test1
root@cg:~/Desktop# docker stop ubuntu_test2
ubuntu_test2
root@cg:~/Desktop# docker stop ubuntu_test3
ubuntu_test3
root@cg:~/Desktop# 

docker_ubuntu_1_3

然后使用docker container prune删除停止的容器,操作如下:

root@cg:~/Desktop# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED              STATUS                          PORTS               NAMES
5c34d8507ad3        ubuntu               "/bin/bash"              55 seconds ago       Exited (0) 37 seconds ago                           ubuntu_test3
77925c616578        ubuntu               "/bin/bash"              59 seconds ago       Exited (0) 42 seconds ago                           ubuntu_test2
be9afaab4568        ubuntu               "/bin/bash"              About a minute ago   Exited (0) 48 seconds ago                           ubuntu_test1
77bf8684f60d        ubuntu               "/bin/bash"              2 hours ago          Up 2 hours                                          strange_euclid
efdb36b237c5        ubuntu:16.04         "/bin/bash -c 'while\u2026"   16 hours ago         Up 2 minutes                                        naughty_hellman
4eda574d7063        hello-world:latest   "/hello"                 17 hours ago         Exited (0) About a minute ago                       vigilant_nobel
root@cg:~/Desktop# 
root@cg:~/Desktop# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5c34d8507ad3e4a2a73f44e0094a843d3b9f2635d0919b47f76c564010c2a571
77925c6165783ae7d2320b277a8e5be0c4f6e7d56dcda76aa0d089a74e31eb49
be9afaab456869f0c5606b483de9fb064757c8d4217a07f2e29c2e71d41cd974
4eda574d7063857dcdcee7cd3da3679ab8e2856121fde3fa76ee28a33b4757be

Total reclaimed space: 0B
root@cg:~/Desktop# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
77bf8684f60d        ubuntu              "/bin/bash"              2 hours ago         Up 2 hours                              strange_euclid
efdb36b237c5        ubuntu:16.04        "/bin/bash -c 'while\u2026"   16 hours ago        Up 2 minutes                            naughty_hellman
root@cg:~/Desktop#

docker_prune

首先使用 docker ps -a 查看所有容器状态,可以看到ubuntu_test1、ubuntu_test2、ubuntu_test3这三个容器都已经处于终止状态。

docker container prune 命令执行后,再使用 docker ps -a 查看,可以发现ubuntu_test1、ubuntu_test2、ubuntu_test3这三个容器都已删除。

注意:实验环境中还存在一个已经停止运行的hello-world容器,该容器也被 docker container prune 命令删除。这个hello-world容器是运行其他实验时遗留的容器,如果你的环境中不存在该容器也不用担心。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值