docker基本管理二:容器管理

本文介绍了如何在Docker中管理容器,包括使用dockercreate和dockerrun命令创建容器,通过dockerps查看容器状态,以及启动、停止、重启和删除容器的操作。还提到了dockerexport和dockerimport用于容器的导出和导入,以及使用dockerexec进入容器交互。
摘要由CSDN通过智能技术生成

如果说镜像是一种静态的文件,那么容器则是一种动态的存在。在docker中,容器是提供服务的主体。管理好容器,是系统管理员最主要的任务之一。本节将详细介绍容器的管理方法。

1.创建容器

容器时docker提供网络服务的主体。为了能够提供mysql,apache 等网络服务,用户必须创建对应的容器。
在docker中用户可以使用两种方式创建容器。首先用户可以通过docker create命令来创建一个容器,创建新容器处于停止状态。其次,可以使用docker run 命令来创建容器,并且会启动这个容器。
docker create 命令基本语法如下

 docker create [options] image

其中,用户可以通过options 为容器指定相应的选项,用来设置新的容器。常用的选项有:

--add-host=[] 指定主机到IP地址的映射关系,其格式为host:ip
--dns=[]  为容器指定域名服务器
-h 为容器指定主机名
-i 打开容器的标准输入
--name  指定容器的名称
-u,--user= 创建用户

通常情况下,用户在创建容器时只要指定镜像的名称及其版本即可。其他的都可以采用默认的选项。例如,下面的命令创建一个centos的容器

[root@localhost ~]# docker create ansible/centos7-ansible
360e730be5c01c7d95578836b09d7657713a9c050a9546845aa5d0fddaed5a8a
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND       CREATED         STATUS                   PORTS     NAMES
360e730be5c0   ansible/centos7-ansible   "/bin/bash"   7 seconds ago   Created                            brave_mcclintock
d435c7f00358   ubuntu                    "/bin/bash"   7 hours ago     Exited (0) 7 hours ago             relaxed_carson

当docker create命令成功执行之后,会返回一个字符串,该字符串为新容器的ID。随后的docker ps命令列出了刚才创建的容器及其有关的信息。
在docker create 命令中可以指定标签或者版本号,使用冒号分隔 如下:

[root@localhost ~]# docker create ansible/centos7-ansible:latest
f7571410da1353e10170df27535677ae46530d44a2dd94189e8f5c40062cd61f
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                            COMMAND       CREATED         STATUS                   PORTS     NAMES
f7571410da13   ansible/centos7-ansible:latest   "/bin/bash"   3 seconds ago   Created                            sleepy_mahavira
360e730be5c0   ansible/centos7-ansible          "/bin/bash"   3 minutes ago   Created                            brave_mcclintock
d435c7f00358   ubuntu                           "/bin/bash"   7 hours ago     Exited (0) 7 hours ago             relaxed_carson

latest 标签表示使用最新版本的镜像创建容器。
当在本地电脑不存在用户指定的镜像时,docker 会自动搜索远程仓库。找到之后,会自动将其下载到本地,然后再创建容器。
docker run 命令不仅仅可以创建容器,而且创建之后,会立即启动容器。docker run 命令与docker create 命令的语法大同小异。需要注意:

 1. -t参数 :为当前容器分配一个命令行终端,以便于用户与容器交互,以该选项创建的容器可以称为交互式容器。
 2. -d参数 : 以该选项创建的容器为后台运行,新的容器保持在后台运行。

例如下面命令创建一个名称为demo_centos 的容器,创建之后立即启动,且进入交互模式

[root@localhost ~]# docker run -i -t --name demo_centos centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
[root@cd56f8ec0ca7 /]# 

当用户通过以上方式创建容器后,就可以直接在容器中执行所需要的操作了,如果用户想要退出容器,使用exit 命令,即可返回到docker 的管理窗口。

2.查看容器

用户查看系统中容器的运行情况,Docker 提供了docker ps 命令来查看当前系统中的容器。这个命令与Linux 中的ps 或 ls 命令相似 语法如下:

docker ps 

例如 下面命令列出当前系统正在运行的容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
cd56f8ec0ca7   centos    "/bin/bash"   15 minutes ago   Up 15 minutes             demo_centos

在上面输出结果中 CONTAINER ID 为容器ID标识 , IMAGE 为创建容器的镜像 , COMMAND 为容器最后执行的命令, CREATED 为创建容器的时间 , STATUS 为容器的当前状态, PORTS 为容器对外开放的端口,NAMES 为容器名称 可以和容器ID一样唯一标识容器,同一台宿主机上不允许存在同名容器,否则会有冲突。
而对于其他状态的容器 , 默认的docker ps 并没有列出来,为了显示这些不在运行中的容器,用户可以使用 -a 参数; 该参数 可以列出当前系统中所有的容器,包括运行中的容器及处于停止状态的容器, 如下:

 [root@localhost ~]# docker ps -a 
CONTAINER ID   IMAGE                            COMMAND       CREATED          STATUS                   PORTS     NAMES
cd56f8ec0ca7   centos                           "/bin/bash"   23 minutes ago   Up 23 minutes                      demo_centos
f7571410da13   ansible/centos7-ansible:latest   "/bin/bash"   34 minutes ago   Created                            sleepy_mahavira
360e730be5c0   ansible/centos7-ansible          "/bin/bash"   38 minutes ago   Created                            brave_mcclintock
d435c7f00358   ubuntu                           "/bin/bash"   8 hours ago      Exited (0) 7 hours ago             relaxed_carson

在上面输出中,有些容器是 Exited ,表示该容器已经停止运行;有些容器为 Up ,表示该容器在运行中;有些为 Created , 表示该容器创建之后从未启动过。
随着系统运行时间的增加,系统中的容器会越来越多,在这种情况下,查找某个容器会变得非常困难,此时,用户在使用docker ps 命令时,可以通过一些条件进行筛选。例如, 下边命令列出名称中包含 ‘demo’ 字符串的容器:

 [root@localhost ~]# docker ps -a -f name=demo
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
cd56f8ec0ca7   centos    "/bin/bash"   30 minutes ago   Up 30 minutes             demo_centos

其中 -f 参数表示指定筛选条件, 筛选条件采用以下方式

field=value

其中 field 表示name , image , 以及 status等字段。

3. 操作容器

启动已停止运行的容器

[root@localhost ~]# docker start demo_centos
demo_centos
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS         PORTS     NAMES
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago   Up 4 seconds             demo_centos

后台运行

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

[root@localhost ~]# docker run -itd --name ubuntu-test ubuntu /bin/bash
391a675c333a3ec3c6cbaf3f2e3afbc669c90331407da61bb6c4d678c36f3512
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS              PORTS     NAMES
391a675c333a   ubuntu    "/bin/bash"   5 seconds ago   Up 4 seconds                  ubuntu-test
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago     Up About a minute             demo_centos

停止一个容器

[root@localhost ~]# docker stop ubuntu-test
ubuntu-test
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS         PORTS     NAMES
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago   Up 2 minutes             demo_centos
[root@localhost ~]# docker ps -a -f name=ubuntu-test
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS                      PORTS     NAMES
391a675c333a   ubuntu    "/bin/bash"   About a minute ago   Exited (0) 21 seconds ago             ubuntu-test

停止的容器可以通过 docker restart 重启:

[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
391a675c333a   ubuntu    "/bin/bash"   2 minutes ago   Up 3 seconds             ubuntu-test
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago     Up 3 minutes             demo_centos

进入容器

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

docker attach

docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
391a675c333a   ubuntu    "/bin/bash"   2 minutes ago   Up 3 seconds             ubuntu-test
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago     Up 3 minutes             demo_centos
[root@localhost ~]# docker attach ubuntu-test
root@391a675c333a:/# exit
exit
退出后容器就停止了
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS         PORTS     NAMES
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago   Up 4 minutes             demo_centos

exec 命令

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

[root@localhost ~]# docker start  ubuntu-test
ubuntu-test
[root@localhost ~]# docker  exec -it  ubuntu-test /bin/bash 
root@391a675c333a:/# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS          PORTS     NAMES
391a675c333a   ubuntu    "/bin/bash"   6 minutes ago   Up 13 seconds             ubuntu-test
cd56f8ec0ca7   centos    "/bin/bash"   4 hours ago     Up 7 minutes              demo_centos
[root@localhost ~]# 

导出和导入容器

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

[root@localhost ~]# docker export ubuntu-test  > ubtuntu-test.tar
[root@localhost ~]# ls
ubtuntu-test.tar
[root@localhost ~]# 

这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件ubtuntu-test.tar 导入到镜像
test/ubuntu:v1

[root@localhost ~]# cat ubtuntu-test.tar |docker import - test/ubuntu:v1
sha256:9384492de4cd106c7632b777cbbc7a04d4f7532f7d5847201a8e7e2826e3a5f8
[root@localhost ~]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
test/ubuntu               v1        9384492de4cd   11 seconds ago   72.8MB

删除容器

删除容器使用 docker rm 命令:

[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
391a675c333a   ubuntu    "/bin/bash"   14 minutes ago   Up 8 minutes              ubuntu-test
cd56f8ec0ca7   centos    "/bin/bash"   5 hours ago      Up 15 minutes             demo_centos
[root@localhost ~]# docker stop   ubuntu-test
ubuntu-test
[root@localhost ~]# docker rm  ubuntu-test
ubuntu-test
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                            COMMAND                  CREATED        STATUS                        PORTS     NAMES
cd56f8ec0ca7   centos                           "/bin/bash"              5 hours ago    Up 16 minutes                           demo_centos

下面的命令可以清理掉所有处于终止状态的容器。(慎用)
$ docker container prune

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值