当前位置:   article > 正文

Docker核心组件之容器(Container)_docker中container

docker中container

容器(Container):

容器的存在离不开镜像的支持,它是镜像运行时的一个载体。容器可以被创建、启动、停止、删除、暂停等。这些容器彼此之间相互隔离、互不可见的。

Docker容器有一个设计上的机制,即容器与应用是同生共死的。当容器的应用都关闭,停止运行了,那么容器也会跟着自动退出,停止运行。

镜像和容器的关系:就像是面向对象程序设计中的类和实例一样。

  • 镜像是静态的定义,里边有应用。
  • 容器是动态的,是镜像运行时的实体。

 

一、容器的创建/启动/暂停/终止

创建容器和启动容器两个命令可以使用一个 run命令搞定,它们支持参数相同。容器使用别名和id都可以

1、创建容器 - docker create 命令

创建一个新的容器但不启动它,返回容器的id,不指定名字时,自动生成。

基本语法:docker  [container] create [OPTIONS] IMAGE

  1. [root@centos7 ~]# docker create -it centos:7
  2. c26038331db72bffd851c380bde4d554270e49085ba87f34a7f25e0bf0bdad9a
  3. [root@centos7 ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. c26038331db7 centos:7 "/bin/bash" 49 seconds ago Created keen_kare

2、启动容器 - docker  start 命令

启动一个或多个已经被停止的容器,使用容器的id或者name都可以。

基本语法:docker  [container] start [OPTIONS] CONTAINER [CONTAINER...]

  1. [root@centos7 ~]# docker start c26038331db7
  2. c26038331db7
  3. [root@centos7 ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. c26038331db7 centos:7 "/bin/bash" 3 minutes ago Up 5 seconds

3、进入容器 - docker attach 命令

连接上正在运行中的容器。注意,与 docker exec 的区别,推荐使用 docker exec命令。

基本语法:docker [container] attach [OPTIONS] CONTAINER

  1. [root@c26038331db7 /]# read escape sequence
  2. [root@centos7 ~]# docker attach c26038331db7
  3. [root@c26038331db7 /]# read escape sequence
  4. [root@centos7 ~]#

使用 ctrl+q+p 暂时退出容器,但是正在运行中的容器不会关闭。 

4、暂停容器 - docker stop 命令

暂停一个运行中的容器,并暂停容器中所有的进程。

基本语法:docker  [container] pause [OPTIONS] CONTAINER [CONTAINER...]

[root@centos7 ~]# docker pause c26038331db7

5、恢复容器 - docker unpause命令

将一个处于paused状态的容器恢复到运行状态,并恢复容器中所有的进程。

基本语法:docker [container] unpause [OPTIONS] CONTAINER [CONTAINER...]

[root@centos7 ~]# docker unpause c26038331db7

6、终止容器 - docker stop 命令

停止一个运行中的容器。该命令首先会向容器发送SIGTERM信号,等待一段超时时间后(默认为10秒),再发送SIGKILL信号来终止容器。

基本语法:docker  [container] stop [OPTIONS] CONTAINER [CONTAINER...]

[root@centos7 ~]# docker stop c26038331db7

7、重启容器 - docker  restart 命令

该命令是将一个运行态的容器先终止,然后再重新启动容器。

基本语法:docker  [container] restart [OPTIONS] CONTAINER [CONTAINER...]

[root@centos7 ~]# docker restart c26038331db7

8、退出容器 - exit命令或者使用 Ctrl + D

使用 docker attach命令进入容器使用 exit退出容器时,会终止容器。

使用 docker exec命令进入容器使用 exit退出容器时,不会终止容器。

  1. [root@centos7 ~]# docker attach c26038331db7
  2. [root@c26038331db7 /]# exit
  3. exit
  4. [root@centos7 ~]# docker ps -a
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. 2150d7c2b218 centos:7 "/bin/bash" 55 minutes ago Up 55 minutes centos7
  7. c26038331db7 centos:7 "/bin/bash" About an hour ago Exited (0) 9 seconds ago keen_kare

9、杀死/终止容器 - docker kill 命令

杀掉一个运行中的容器。该命令会直接发送 SIGKILL信号来强行终止容器。

基本语法:docker [container] kill [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -s :向容器发送一个信号
  1. [root@centos7 ~]# docker restart c26038331db7
  2. c26038331db7
  3. [root@centos7 ~]# docker kill -s KILL c26038331db7
  4. c26038331db7
  5. [root@centos7 ~]# docker ps -a
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. 2150d7c2b218 centos:7 "/bin/bash" 57 minutes ago Up 57 minutes centos7
  8. c26038331db7 centos:7 "/bin/bash" About an hour ago Exited (137) 4 seconds ago keen_kare

10、删除容器 - docker rm 命令

删除一个或多个容器。

基本语法:docker [container] rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -f, -- force=false :通过 SIGKILL 信号强制删除一个运行中的容器。
  • -l,--link=false :移除容器间的网络连接,而非容器本身。
  • -v, --volumes=false:删除与容器关联的数据卷。
  1. [root@centos7 ~]# docker rm -f dc87c233e993
  2. dc87c233e993

批量删除所有容器:

两条命令实现停用并删除容器,先终止容器,在批量删除。

[root@centos7 ~]#  docker kill $(docker ps -q) 

[root@centos7 ~]#  docker rm $(docker ps -aq) 

 

二、docker run 命令

基本语法:docker [container] run [OPTIONS] IMAGE [COMMAND] [ARG...]

create命令和run命令支持的选项相同且非常多,这里列举出来,和参数配合使用还有更多功能,在使用中一个一个熟悉。

这些选项主要包括如下几大类:与容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关。

图片来自网络(感谢),也可查看官网:https://docs.docker.com/engine/reference/commandline/run/

1、交互模式创建并启动容器 

  1. [root@centos7 ~]# docker run -it --name centos7 centos:7 /bin/bash
  2. [root@2150d7c2b218 /]#
  3. [root@2150d7c2b218 /]# ls
  4. anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  1. [root@centos7 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 2150d7c2b218 centos:7 "/bin/bash" 30 seconds ago Up 30 seconds centos7

 参数:

  • -t:让Doker分配一个伪终端并绑定到容器的标准输入上, 
  • -i:让容器的标准输人保持打开。
  • --name '':给容器起别名

该命令会创建一个新的容器并运行它。将上面提到了创建和启动容器的两条命令合为一条命令来实现。

这样创建的容器是交互式的,可以通过保持开启的容器的标准输入,输入命令进入到容器里,命令在容器里执行的结果,也可以通过伪终端,显示出来。后面的/bin/bash(Centos)可以省略的,-it不可省略(交互式的)。

例如:使用容器输出一个"Hello Docker",之后容器自动终止。

  1. [root@centos7 ~]# docker run centos:7 /bin/echo 'Hello Docker'
  2. Hello Docker
  3. [root@centos7 ~]# /bin/echo 'Hello Docker'
  4. Hello Docker

这个docker run 和在宿主机中直接执行/bin/echo 'hello Docker' ,的运行机制是不一样。

当利用 docker run 命令来创建并启动容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
  • 利用镜像创建一个容器,并启动该容器;
  • 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
  • 从网桥的地址池配置一个 IP地址给容器;
  • 执行用户指定的应用程序;
  • 执行完毕后容器被自动终止。

2、守护态创建并启动容器 

通过过使用 -d 参数来实现,让Docker容器在后台以守护态(Daemonized)形式运行。

[root@centos7 ~]# docker run -d --name ctos7 centos:7

例如:通过sh在后台运行容器

  1. [root@centos7 ~]# docker run -d --name shctos7 centos:7 /bin/sh -c "while true; do echo hello world; sleep 1;done"
  2. dc87c233e993440395b28f3e395b21ef16393049056dcc16ffae7c17e793fdc7
  3. [root@centos7 ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. dc87c233e993 centos:7 "/bin/sh -c 'while t…" 18 seconds ago Up 17 seconds shctos7

 

三、查看容器信息

1、列出已有容器 - docker ps 命令

基本语法:docker [container] ps [OPTIONS]

OPTIONS说明:

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • --format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n  N:列出最近创建的N个容器。
  • --no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。

例如:列出所有的容器,包括未运行的。

  1. [root@centos7 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. dc87c233e993 centos:7 "/bin/sh -c 'while t…" 4 minutes ago Up 4 minutes shctos7
  4. 2d2696e48c0a centos:7 "/bin/bash" 7 minutes ago Exited (0) 7 minutes ago ctos7
  5. 2150d7c2b218 centos:7 "/bin/bash" About an hour ago Up About an hour centos7
  6. c26038331db7 centos:7 "/bin/bash" About an hour ago Exited (137) 15 minutes ago keen_kare

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

2、查看某容器元数据 - docker inspect 命令

基本语法:docker [container] inspect  CONTAINER  [CONTAINER...]

例如,查看某容器的具体信息,会以json格式返回包括容器Id、创建时间、路径、状态、镜像、配置等在内的各项信息:

[root@centos7 ~]# docker inspect c26038331db7

3、查看某容器内进程 - docker top命令

查看容器中正在运行的进程信息,支持 ps 命令参数。

基本语法:docker [container]  top [OPTIONS] CONTAINER [ps OPTIONS]

该命令类似于Linux系统中的top命令,会打印出容器内的进程信息,包括PID、用户、时间、命令等。

例如,查看某容器内的进程信息:

  1. [root@centos7 ~]# docker top 2150d7c2b218
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 8701 8682 0 16:01 pts/0 00:00:00 /bin/bash

4、查看统计信息 - docker stats 命令

查看统计信息,会显示CPU、内存、存储、网络等使用情况的统计信息。

基本语法:docker  [container]  stats   [OPTIONS] [CONTAINER]

  1. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
  2. 2150d7c2b218 centos7 0.00% 412KiB / 972.6MiB 0.04% 656B / 0B 0B / 0B 1
  3. ^C

5、查看某容器的日志 - docker logs 命令

获取某容器的日志输出信息。

基本语法:docker [container] logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f, -follow: 跟踪日志输出,持续保持输出
  • --since :显示某个开始时间的所有日志
  • -t,-timestamps: 显示时间戳
  • --tail=N :仅列出最新N条容器日志

例如,查看上面通过sh在后台运行容器的输出可以使用如下命令:

  1. [root@centos7 ~]# docker logs -f -t --tail 5 dc87c233e993
  2. 2020-09-13T09:13:33.445328235Z hello world
  3. 2020-09-13T09:13:34.447724889Z hello world
  4. 2020-09-13T09:13:35.449986082Z hello world
  5. 2020-09-13T09:13:36.452266126Z hello world
  6. 2020-09-13T09:13:37.454349812Z hello world

四、导入导出容器

1、导出容器 - docker export 命令

将指定容器保存成 tar 归档文件(实质上就是容器快照),会丢弃容器的元数据。这个本地文件可以分享给他人使用。不管此时这个容器是否处于运行状态都可导出。

基本语法:docker [container] export [OPTIONS] CONTAINER

OPTIONS说明:

  • -o :将输入内容写到文件
  1. [root@centos7 ~]# docker export -o /root/abc/kz_centos7.tar centos7
  2. [root@centos7 ~]# ls /root/abc/ | grep kz_
  3. kz_centos7.tar

通过 docker  commit命令将运行中的容器,生成镜像文件,然后通过导入导出镜像文件也可实现。

docker  commit和docker export命令的主要区别:

  • docker export不管容器运行否都可以导出,docker  commit只有运行中的容器才可以使用。
  • docker export生成的容器快照文件将丟弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),docker  commit生成的镜像存储文件将保存完整记录,体积更大。

2、导入容器 - docker import 命令

导出的 tar文件导入到本地镜像库,创建成为镜像文件。

基本语法:docker [container] import [OPTIONS] file

  1. [root@centos7 ~]# docker import /root/abc/kz_centos7.tar
  2. sha256:bcd3bedadf42beacf05cdf5f3ad29bfd5f79724f7f50482d4aadeaa56247cb7d
  3. [root@centos7 ~]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. <none> <none> bcd3bedadf42 12 seconds ago 203MB
  6. [root@centos7 ~]# docker tag bcd3bedadf42 kc_ctos:7
  7. [root@centos7 ~]# docker images
  8. REPOSITORY TAG IMAGE ID CREATED SIZE
  9. kc_ctos 7 bcd3bedadf42 2 minutes ago 203MB
  1. [root@centos7 ~]# docker create -it kc_ctos:7
  2. Error response from daemon: No command specified
  3. [root@centos7 ~]# docker run -it bcd3bedadf42
  4. docker: Error response from daemon: No command specified.
  5. See 'docker run --help'.

注意:

  • 导出的容器tar文件,会丢失元数据信息,所以,必须给它添加标记之后才能使用。
  • 用导入成为的镜像文件来创建新容器并运行时。不能省略后面的子命令/bin/bash(centos)。
  1. [root@centos7 ~]# docker create -it kc_ctos:7 /bin/bash
  2. 50eee11dc878d77097176d43f85823e9709df9c88adcdd436ad3be5a017002c5
  3. [root@centos7 ~]# docker run -it --name 'kc7' kc_ctos:7 /bin/bash
  4. [root@270aba119a53 /]#

 

五、其他容器命令

1、在容器中执行命令 - docker exec 命令(推荐使用 )

在正在运行的容器中执行子命令。

基本语法:docker [container] exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

  • -d, --detach:分离模式: 在后台运行
  • -i :打开标准输人接受用户输人命令
  • -t,--tty=true | false:分配一个伪终端

例如:执行伪终端,进入到正在运行的容器中(交互模式)。

  1. [root@centos7 ~]# docker exec -it centos7 /bin/bash
  2. [root@2150d7c2b218 /]# exit
  3. [root@centos7 ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 2150d7c2b218 centos:7 "/bin/bash" 7 minutes ago Up 30 seconds centos7

注意:

  • 如果从这个容器使用 exit命令退出,不会导致容器的停止。
  • 如果从这个容器使用 exit命令退出,会导致容器的停止。 

2、复制文件 - container cp命令

用于容器与宿主机之间的数据文件拷贝。

基本语法:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

OPTIONS说明:

  • -a, -archive: 打包模式,复制文件会带有原始的uid/gid信息;
  • -L,-follow-link :跟随软连接。当原路径为软连接时,默认只复制链接信息,使用该选项会复制链接的目标内容。

例如:将宿主机本地的目录复制到test容器的/tmp路径下,并改名

  1. [root@centos7 ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 2150d7c2b218 centos:7 "/bin/bash" 3 hours ago Up 3 hours centos7
  4. [root@centos7 ~]# docker cp /root/abc/ 2150d7c2b218:/tmp/copy_abc
  1. [root@2150d7c2b218 /]# ls
  2. anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  3. [root@2150d7c2b218 /]# ls /tmp
  4. copy_abc ks-script-V_wEqJ yum.log

例如:将test容器的/tmp下的目录复制到宿主机本地的/root下:

  1. [root@centos7 ~]# docker cp 2150d7c2b218:/tmp/copy_abc /root/
  2. [root@centos7 ~]# ls /root/ | grep abc
  3. abc
  4. copy_abc

3、检查容器里文件结构的更改- docker diff 命令

查看容器内文件结构的变更信息。

基本语法:docker [container]  diff [OPTIONS] CONTAINER

  1. [root@centos7 ~]# docker diff 2150d7c2b218
  2. C /tmp
  3. A /tmp/copy_abc
  4. A /tmp/copy_abc/aa_dir.tar
  5. A /tmp/copy_abc/aa_dir.tar.bz2
  6. A /tmp/copy_abc/bb_dir
  7. A /tmp/copy_abc/file2.cfg
  8. A /tmp/copy_abc/jqcontosv7.tar
  9. A /tmp/copy_abc/kz_centos7.tar

 

—— Stay Hungry. Stay Foolish. 求知若饥,虚心若愚。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/231635
推荐阅读
相关标签
  

闽ICP备14008679号