Docker学习②

操作Docker容器

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。

本章将具体介绍围绕容器的重要操作,包括创建一个容器 、 启动容器、终止一个容器、进入容器内执行操作、删除容器和通过导人导出容器来实现容器迁移等。

 

创建容器

主要介绍Docker容器的create、start、run、wait和logs子命令

 

1、新建容器

命令:docker [container] create

作用:新建一个容器

由于容器是整个 Docker 技术拢的核心, create 命令和后续的 run 命令支持的选项都十分复杂,需要读者在实践中不断体会 。选项主要包括如下几大类 :

  1. 与容器运行模式相关;
  2. 与容器环境配置相关;
  3. 与容器资源限制和安全保护相关;

参见表 4-1~表 4-3

 

2、启动容器

命令:docker [container] start

作用:启动一个已经创建的容器

docker容器的启动有三种方式:

交互方式:基于镜像新建容器并启动

  1. 使用docker run命令来启动容器,docker在后台运行的标准操作包括
  2. 检查本地是否存在指定的镜像,不存在则从公有仓库下载
  3. 使用镜像创建并启动容器
  4. 分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
  5. 从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
  6. 从地址池分配一个ip地址给容器
  7. 执行用户指定的应用程序
  8. 执行完毕之后容器被终止

短暂方式:直接将一个已经终止的容器启动运行起来

以上,命令执行完,控制台会打印"hello world",容器就终止了,不过并没有消失,可以用"docker ps -n 3 "看一下最新前3个的容器,第一个就是刚刚执行过的容器,可以再次执行一遍:docker start [ container_id ],不过这次控制台看不到”hello world”了,只能看到容器ID,用logs命令才能看得到:docker logs [ container_id ]。这时可以看到两个”hello world”了,因为这个容器运行了两次。

Daemon方式,守护态运行:即让软件作为长时间服务运行

通过-d参数实现Docker容器在后台以守护态形式运行

容器启动后会返回一个唯一的id,也可以通过docker ps或docker container ls命令来查看容器信息:

 

3、查看容器输出

命令:docker [container] logs

【参数解析】

  1. -details:打印详细信息;
  2. -f,-follow:持续保持输出;
  3. -since string:输出从某个时间开始的日志;
  4. -tail string:输出最近的若干日志;
  5. -t,-timestamps:显示时间戳信息;
  6. -until string:输出某个时间之前的日志;

具体例子可看上一序号的示例。

 

停止容器

主要介绍Docker容器的pause/unpause、stop和prune子命令

1、暂停容器

命令:docker [container] pause CONTAINER [CONTAINER...]

作用:暂停一个运行中的容器

命令:docker [container] unpause CONTAINER [CONTAINER...]

作用:恢复处于暂停状态的容器

 

2、终止容器

命令:docker [container] stop [ -t | --time[=10] ] [CONTAINER...]

作用:终止一个运行中的容器

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

此时,执行docker container prune命令,会自动清除掉所有处于停止状态的容器。

此外,还可以通过docker [container] kill直接发送SIGKILL信号来强行终止容器。

 

进入容器

在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。

这个时候如果需要进入容器进行操作,推荐使用官方的attach或exec命令。

 

1、attach命令

命令:docker [container] attach [ --detach-keys [ = [ ] ] ] [--no-stdin] [ --sig-proxy [ =true ] ] CONTAINER

【参数解析】

  1. --detach-keys[ = [ ] ]:指定退出attach模式的快捷键序列,默认是CTRL-p、CTRL-q;
  2. --no-stdin=true | false:是否关闭标准输入,默认是保持打开;
  3. --sig-proxy=true | false:是否代理收到的系统信号给应用进程,默认为true;

【注】然而使用attach命令有时候不方便,当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法操作了。

 

2、exec命令

命令:docker [ container ] exec [ -di -detach ] [ detach-keys [= [ ] ] ] [ -il--interactive ] [ - -piivileged][ -t | --tty ] [ -u I --user [ =USER ] ] CONTAINER COMMAND [ARG . . . ]

【参数解析】

  1. -d, --detach : 在容器中后台执行命令;
  2. -detach-keys ="":指定将容器切回后台的按键;
  3. -e, - - env= []:指定环境变量列表 ;
  4. -i, --interactive=true | false :打开标准输入接受用户输入命令, 默认值为false;
  5. -- privileged=trueifalse : 是否给执行命令以高权限,默认值为 false;
  6. -t, --tty = true | false : 分配伪终端,默认值为 false;
  7.  - u,--user="":执行命令的用户名或 ID;

例:进入到刚刚创建容器中,并启动一个bash

此时,可以在不影响容器内其他应用的前提下,与容器进行交互。

 

删除容器

命令:docker [container) rm  [ -f | --force)  [ -l  | --link ] [-v | --volumes ] CONTAINER [ CONTAINER... ]

【参数解析】

  1. -f,--force=false:是否强行终止并删除一个运行中的容器;
  2. -l,--link=false:删除容器的连接,但保留容器;
  3. -v,--volumes=false:删除容器挂载的数据卷;

【注】

  • 默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除处于运行状态的容器;
  • 如果要直接删除一个运行中的容器,可以添加-f参数,Docker会先发送SIGKILL信号给容器,终止其中应用,之后强行删除;

 

导入和导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用Docker的导入和导出功能,这也是Docker自身提供的一个重要特性。

 

1、导出容器

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。

命令:docker [container) export [-o l - -output [ =” ” ] ] CONTAINER

【参数解析】

  • -o:指定导出的tar文件名,也可通过重定向来实现

之后可以将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,实现容器的迁移。

 

2、导入容器

命令:docker import [ -c | --change [ = [ ] ] ] [ -m | --message [ =MESSAGE ] ] file | URL | -[ REPOSITORY [ :TAG] ]

【注】用户通过-c,--change=[ ]选项在导入的同时执行对容器进行修改的Dockerfile指令。

例:将导出的ubuntu_18_04.tar.gz文件导入到系统中

【Import和Load的区别】

相同:

  • load命令可用来导入镜像存储文件到本地镜像库,import命令可用来导入一个容器快照到本地镜像库;

不同:

  • 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态);
  • 镜像存储文件将保存完整记录,体积更大;

因此,从容器快照文件导入时可以重新指定标签等元数据信息。

 

查看容器

主要介绍Docker容器的inspect、top和stats子命令

 

1、查看容器详情

命令:docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

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

 

2、查看容器内进程

命令:docker [container] top [OPTIONS] CONTAINER [CONTAINER...]

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

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

 

3、查看统计信息

命令:docker [container] stats [OPTIONS] [CONTIANER...]

作用:显示CPU、内存、存储、网络等使用情况的统计信息

【参数解析】

  1. -a,-all:输出所有容器统计信息,默认仅在运行中;
  2. -format string:格式化输出信息;
  3. -no-stream:不持续输出信息,默认会自动更新持续实时结果;
  4. -no-trunc:不截断输出信息;

例:查看当前运行中容器的系统资源使用统计

 

其他容器命令

主要介绍Docker容器的cp、diff、port和update子命令

 

1、复制文件

命令:docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -

【参数解析】

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

 

2、查看变更

命令:docker [container] diff CONTAINER

例:查看容器内的数据修改

 

3、查看端口映射

命令:docker container port CONTAINER [PRIVATE_PORT [ / PROTO ] ]

例:查看容器的端口映射情况(写者未做对应端口映射,查询无结果)

 

4、更新配置

命令:docker [contianer] update [OPTIONS] CONTAINER [CONTAINER...]

【参数解析】

  1. - blkio-weight uint16 :更新块 IO 限制,10~1000,默认值为 0,代表着无限制;
  2. - cpu-period int :限制 CPU 调度器 CFS (Completely Fair Scheduler)使用时间,单位为微秒,最小 1000;
  3. - cpu-quota int :限制 CPU 调度器 CFS 配额,单位为微秒,最小 1000;
  4. - cpu-rt - period int :限制 CPU 调度器的实时周期,单位为微秒 ;
  5. - cpu-rt - runtime int :限制 CPU 调度器的实时运行时,单位为微秒;
  6. - c, -cpu-shares int : 限制 CPU 使用份额;
  7. - cpus decimal :限制 CPU 个数;
  8. - cpuset-cpus string :允许使用的 CPU 核,如 0-3, 0, 1;
  9. - cpuset - mems string :允许使用的内存块,如 0-3, 0, 1;
  10. - kernel-memory bytes :限制使用的内核内存;
  11. - m, -memory bytes : 限制使用的内存;
  12. - memory-reservation bytes :内存软限制;
  13. - memory-swap bytes :内存加上缓存区的限制, -1表示为对缓冲区无限制;
  14. - restart stri口g : 容器退出后的重启策略;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章