Docker学习(四):容器

1、简介

容器是镜像的一个运行实例但它带有额外的可写文件层。容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。  容器 = 镜像 + 可读层。 输入图片说明

2、创建容器

docker容器十分轻量级,可以随时创建和删除容器

2.1、新建容器

sudo docker create 

-i是为了让容器能接受用户的输入,-t是指定docker为容器创建一个伪终端tty,因为ubuntu这个镜像默认启动的进程是bash,而bash需要tty,否则会异常退出。 输入图片说明

此时新建的容器处于停止状态,要用docker start命令来启动它

2.2、新建并启动容器

启动容器有两种方式:基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。主要命令是

sudo docker run

等价于先执行docker create命令,再执行docker start命令。 此时,docker在后台运行的标准操作包括:

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

输入图片说明

在容器内用ps命令查看进程

2.3、守护态运行

更多的时候,会让docker容器在后台以守护态(Daemonaized)形式运行,用户可以添加-d参数实现。

输入图片说明

容器启动后会返回一个唯一的ID,也可以通过docker ps 来查看容器信息

输入图片说明

获取容器的输出信息,用docker logs: 显示容器的日志

命令格式:

docker logs CONTAINER

命令参数:

  • -f, --follow=false 等待容器后续的输出(类似 tail -f)
  • -t, --timestamps=false 显示时间戳
  • --tail="all"

例子:

  • sudo docker logs 7bb0e258aefe
  • sudo docker logs --timestamps=true 7bb0e258aefe
  • sudo docker logs --timestamps=true 7bb0e258aefe > 7bb0e258aefe.log

终端A:

  • sudo docker logs --follow 7bb0e258aefe

终端B:

  • sudo docker attach 708cc7ec0f23 (随便执行一些命令可以看到终端A会有实时输出)

输入图片说明

3、终止容器

sudo docker stop [-t|--time[=10]]

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

输入图片说明

docker kill会直接发送SIGKILL信号来强行终止容器

可以查看处于终止状态容器的ID信息

输入图片说明

也能让处于终止状态的容器,通过docker start命令重新启动 输入图片说明

docker restart命令会将一个运行态的容器终止,然后重新启动;

4、进入容器

用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息。有以下几种方法:

4.1、attach命令

输入图片说明

使用attach命令有时候不方便。当多个窗口同时attach到同一个容器的时候,所有窗口会同步显示。当某个窗口因命令阻塞时候,其他窗口也不能操作了。

4.2、exec命令

直接在容器内运行命令,例如进入到刚创建的容器中,并启动一个bash

输入图片说明

4.3、nsenter工具

5、删除容器

使用docker rm命令删除处于终止状态的容器

docker rm 【OPTIONS】 CONTAINER 【CONTAINER...】

支持的选项包括:

  • -f,--force=false 强行终止并删除一个运行中的容器。
  • -l,--link=false 删除容器的连接,但保留容器
  • -v, --volumes=false删除容器挂在的数据卷

6、导入和导出容器

6.1、导出容器

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

sudo docker export CONTAINER > FILE

6.2、导入容器

导出的文件又可以使用docker import命令导入。成为镜像。

docker load和import的区别:

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

转载于:https://my.oschina.net/joe12321/blog/1556082

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值