《Docker……》笔记-3 容器

来源:互联网 发布:乌克丽丽调音软件 编辑:程序博客网 时间:2024/05/16 18:40

第四章 容器

· 简单地说,容器是镜像的一个运行实例,不同的是,它带有额外的可写文件层。
· 若认为虚拟机是模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。那么Docker容器就是独立运行的一个或一组应用,以及它们的必需运行环境。
· 本章具体介绍围绕容器的重要操作,包括创建容器、启动容器、终止容器、进入容器内执行操作、删除容器和通过导入导出容器来实现容器迁移等。

4.1 创建容器

新建容器:

可用 docker create命令新建一个容器。
例如: $ sudo docker create -it ubuntu:latest
使用docker create 命令新建的容器处于停止活动状态,可用docker start命令来启动它。

新建并启动容器:

启动容器有两种方式,一种是 基于镜像新建一个容器并启动,另一种是将在终止状态(stopped)的容器重新启动。
所需要的命令主要为 docker run,等价于先执行 docker create 命令,再执行 docker start 命令。
当利用docker run 来创建并启动容器时,Docker在后台运行的标准操作包括:
* 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
* 利用镜像创建并启动一个容器。
* 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
* 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
* 从地址池配置一个IP地址给容器。
* 执行用户指定的应用程序。
* 执行完毕后容器被终止。
下面的命令则启动一个bash终端,允许用户进行交互:
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
其中,-t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。
用户可以按Ctrl+d或输入exit命令来退出容器。
对所创建的bash容器,使用exit命令退出后,该容器自动处于终止状态了。

守护态运行

需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。
容器启动后会返回一个唯一的ID,可以通过docker ps命令来查看容器信息。
要获取容器的输出信息,可以通过docker logs 命令。

4.2 终止容器

可用 docker stop 来终止一个运行中的容器。
命令格式:docker stop [-t | --time[=10] ]
它会先向容器发送SIGTERM信号,等待一段时间后(默认为10s),再发送SIGKILL信号终止容器。
注意: docker kill 命令会直接发送SIGKILL信号来强行终止容器。
可用 docker ps -a -q 命令看到处于终止状态的容器的ID信息。
处于终止状态的容器,可通过docker start 命令来重新启动。
docker restart 命令会将一个运行态容器终止,再重新启动。

4.3 进入容器

使用 -d 参数时,容器启动后会进入后台,用户无法看到容器中的信息。
若要进入容器进行操作,方法有:使用 docker attach命令、docker exec命令,以及nsenter工具等。

attach 命令

docker attach 是Docker自带的命令。使用attach命令有时并不方便。
当多个窗口同时attach同一个容器时,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作。

exec命令

exec命令可以直接在容器内运行命令。

nsenter工具

nsenter工具在util-linux包2.23版本后包含。
使用nsenter连接到容器,需要找到容器的进程的PID,可通过下面命令获取:
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
通过这个PID,就可以连接到这个容器:
$nsenter --target $PID --mount --uts --ipc --net --pid

4.4 删除容器

可使用docker rm 命令删除处于终止状态的容器。
命令格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]
支持的选项包括:
* -f, --force=false强行终止并删除一个运行中的容器。
* -l, --link=false 删除容器的连接,但保留容器。
* -v, --volumes=false删除容器挂载的数据卷。

4.5 导入和导出容器

导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用 docker export命令,该命令格式为:docker export CONTAINER

导入容器

导出的文件又可以使用docker import 命令导入,成为镜像。
比较:既可以用docker load命令来导入镜像存储文件到本地的镜像库,又可以使用 docker import 命令来导入一个容器快照到本地镜像库。*这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(既仅保持容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

0 0
原创粉丝点击