第四章 操作Docker容器

容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必须的运行环境。

 4.1 创建容器

4.1.1 新建容器

可以使用docker create 命令新建一个容器:

[[email protected] ~]# docker run -it ubuntu:latest

[email protected]:/#

Create命令支持的选项主要分为三大类:与容器运行模式相关、与容器和环境配置相关、与容器资源限制和安全保护相关。

表4-1 create命令与容器运行环境模式相关的选项

表4-2 create命令与容器环境和配置相关的选项

表4-3 create命令与容器资源限制和安全保护相关的选项

其他比较重要的选项还包括:

·-l,--label=[]:以键值对方式指定容器的标签信息;

·--label-file=[]:从文件中读取标签信息。

4.1.2 启动容器

使用docker start 命令来启动一个已经创建的容器

[[email protected] ~]# docker run -it ubuntu:latest

[email protected]:/# exit

exit

[[email protected] ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES

ccbcb73a3f8e        ubuntu:latest       "/bin/bash"         3 seconds ago       Exited (0) 1 second ago                       modest_allen

[[email protected] ~]# docker start cc

cc

[[email protected] ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ccbcb73a3f8e        ubuntu:latest       "/bin/bash"         26 minutes ago      Up 4 seconds                            modest_allen

4.1.3 新建并启动容器

docker run 等同于 docker create + docker start

[[email protected] ~]# docker run ubuntu /bin/echo "Hello World"

Hello World

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

■ 检查本地是否存在指定的镜像,不存在就从公有仓库下载;

■ 利用镜像创建一个容器,并启动该容器;

■ 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;

■ 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;

■ 从网桥的地址池配置一个IP地址给容器;

■ 执行用户指定的应用程序;

启动一个bash终端,允许用户进行交互:

[[email protected] ~]# docker run -it ubuntu:latest /bin/bash

[email protected]:/#

-i:让容器的标准输入保持打开

-t::让docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

用户可以按Ctrl+d或输入exit命令来退出容器:

[email protected]:/# exit

[[email protected] ~]#

对于所创建的bash容器,当使用exit命令退出之后,容器就自动处于退出(Exited)状态了。这时因为对于Docker容器来说,当运行的应用退出后,容器也就没有继续运行的必要了。

4.1.4 守护态运行

更多的时候,需要让Docker容器在后天以守护态(daemonized)形式运行。此时,可以通过使用-d参数来实现。

[[email protected] ~]# docker run -d ubuntu:latest /bin/sh -c "while true;do echo hello world;sleep 3;done"

c6c8392f965ec5516de23c344576ad43851322d69c45dc50d436fa1da9cf8001

[[email protected] ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES

c6c8392f965e        ubuntu:latest       "/bin/sh -c ‘while..."   3 seconds ago       Up 2 seconds                            mystifying_hypatia

要获取容器的输出信息,可以使用docker logs命令:

[[email protected] ~]# docker logs c6c8

hello world

hello world

hello world

4.2 终止容器

可以使用docker stop 来终止一个运行的容器。该命令的格式为docker stop [-t] --time[=10] [CONTAINER…]。

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

[[email protected] ~]# docker stop c6c8

c6c8

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

docker start 来启动容器

docker restart 将一个运行的容器先终止,然后再重新启动它。

4.3 进入容器

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

这个时候需要进入容器进行操作。attach、exec、以及第三方工具nsenter等。

4.3.1 attach命令

[[email protected] ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ccbcb73a3f8e        ubuntu:latest       "/bin/bash"         About an hour ago   Up About an hour                        modest_allen

[[email protected] ~]# docker attach ccbc

退出时Ctrl+p  Ctrl+q;

当多个窗口同时用attach命令连到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令堵塞时,其他窗口也无法执行操作了。因此一般不推荐使用。

4.3.2 exec命令

[[email protected] ~]# docker exec -it ccbc /bin/bash

[email protected]:/#

-i,interactive=true|false:打开标准输入接受用户输入命令,默认是false;

-t,--tty=ture|false:分配伪终端,默认是false。

通过指定-it参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作时最为推荐的方式。

4.3.3 nsenter工具

4.4 删除容器

可以使用docker rm 命令来删除处于终止和退出状态的容器。

-f,--force=false:是否强制终止并删除一个运行中的容器;

-l,--link=false:删除容器的连接,但保留容器;

-v,--volumes=false:删除容器挂载的数据卷。

[[email protected] ~]# docker rm 26d32

26d32

默认情况下,docker rm 命令只能删除处于终止或退出状态的容器,并不能删除还处在运行状态的容器。

如果要直接删除一个运行中的容器,可以添加-f参数。Docker 会发送SIGKILL信号给容器,终止其中的应用,之后强行删除。

[[email protected] ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ccbcb73a3f8e        ubuntu:latest       "/bin/bash"         About an hour ago   Up About an hour                        modest_allen

[[email protected] ~]# docker rm -f ccbcb

ccbcb

4.5 导入和导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用docker 的导入和导出功能。

4.5.1 导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令。其中,可以通过-o选项来指定导出的tar文件名,也可以直接通过重定向来实现。

[[email protected] ~]# docker export -o test_for_run.tar c6c8392f965e

或者

[[email protected] ~]# docker export 840842ee3d89 > test_for_stop.tar

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

4.5.2 导入容器 

导出的文件可以使用docker import 命令导入变成镜像,

[[email protected] ~]# scp test_for_stop.tar 192.168.161.140:/root/

[email protected]‘s password:

test_for_stop.tar

[[email protected] ~]# scp test_for_run.tar 192.168.161.140:/root/

[email protected]‘s password:

test_for_run.tar

[[email protected] ~]# ls

anaconda-ks.cfg  initial-setup-ks.cfg  test_for_run.tar  test_for_stop.tar

[[email protected] ~]# docker import test_for_run.tar test/ubuntu:v1.0

sha256:69063d822150aad4780ee8065d432a774e81a298a4e4bdcd2b8370260c259b2d

[[email protected] ~]# docker import test_for_stop.tar test/ubuntu:v1.1

sha256:dab1dea762ca46a14d40af7a65795d0e942093a8e17d1281a7c6a55bf94f259e

[[email protected] ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

test/ubuntu         v1.1                dab1dea762ca        3 seconds ago       69.8 MB

test/ubuntu         v1.0                69063d822150        48 seconds ago      69.8 MB

实际上,即可以使用docker load 命令来导入镜像存储文件到本地镜像,也可以使用docker import 命令来导入一个容器快照到本地镜像库。

这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当前的快照状态),而镜像存储文件将保存完整的记录,体积也更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

原文地址:https://www.cnblogs.com/lingxiaolong/p/9203062.html

时间: 2024-10-11 09:55:52

第四章 操作Docker容器的相关文章

第四章 使用Docker镜像和仓库

第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ubuntu /bin/bash [email protected]:/# 这条命令会启动一个新的名为 another_container_mum 的容器,这个容器基于ubuntu镜 像并且会启动Bash Shell ----------------------------------------

《STL源码剖析》——第四章、序列容器

 1.容器的概观与分类 所谓序列式容器,其中的元素都可序(ordered)[比如可以使用sort进行排序],但未必有序(sorted).C++语言本身提供了一个序列式容器array,STL另外再提供vector,list,deque,stack,queue,priority-queue 等等序列式容器.其中stack和queue由于只是将 deque 头换面而成,技术上被归类为一种配接器(adapter).  2.vector vector的数据安排以及操作方式,与array非常相似.两者的唯一

操作docker容器

创建容器 ·1.新建容器 docker create 新建一个容器:使用create创建的容器处于停止状态,可以使用docker start来启动它.create命令主要包括以下几大类:与容器运行模式有关,与容器和环境配置有关,与容器资源限制和安全保护相关 2.启动容器 docker start启动一个已经创建的容器 3.新建并启动容器 docker run =docker create+docker start 当利用docker run来创建并运行启动容器时,Docker在后台运行的标准操作

第1章 初始Docker容器

1.1 什么是Docker slogan:Build Ship Run Any App Anywher.关键在于Ship,通过把程序和程序运行所需要的环境一起交付. Linux容器技术: Docker是在Linuk容器(Linux Containers)技术的基础上发展起来的.LUX把单个操作系统的资源划分到多个孤立的组里,在孤立的组里平衡有冲突的资源使用需求.与虚拟机相比,这种通过划分组来平衡资源冲突的方式代价更小,它不需要指令级别模拟也不需要即使编译.容器直接在本地CPU上运行. 1.2为什

第四章-操作列表

4-1 比萨 : 想出至少是三种你喜欢的比萨,将其名称存储在一个列表中,再使用for循环将每种比萨的名称都打印出来. 修改这个for循环,使其打印包含比萨名称的矩阵,而不仅仅是比萨的名称.对于每种比萨,都显示一行输出,如"I like pepperoni pizza". 在程序末尾添加一行代码,它不在for循环中,指出你有多喜欢比萨.输出应包含针对每种比萨的消息,还有一个总结性矩阵,如"I really love pizza!" 1 pizzas=['a','b',

python编程:从入门到实践----第四章>操作列表

一.遍历整个列表 1-1.假设有一个魔术师名单,需要将其中每个魔术师的名字都打印出来. # 用for循环来打印魔术师名单中的名字 magicians=['alice','david','carolina'] for magician in magicians: #这里面的magician和magicians是便于让读者得知for循环在哪个列表中进行遍历 print(magician) #输出结果: alice david carolina 解析以上代码: a. 先定义一个列表 b. 定义一个fo

Docker容器-容器操作

操作Docker容器 1.容器:1.1.容器是Docker的另一个核心概念.简单来说,容器是镜像的一个实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态.1.2.如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行态环境和其它系统环境)和跑在上面的应用.那么Docker容器就是独立运行的一个(或一组)应用.以及它们必须的运行环境. 2.创建容器:2.1.使用docker [container] create 命令新创建一个容器:2

Centos7.4—Docker容器安装配置与基本操作

Docker容器基本操作 目录第一部分 实验环境第二部分 安装配置Docker软件第三部分 Docker镜像操作第四部分 Docker容器操作第五部分 制作镜像第六部分 数据卷管理第七部分 网络通信第八部分 构建nginx镜像 第一部分 实验环境Linux服务器一台系统:CentOS 7.4IP地址:192.168.80.10 注意:需要该服务器能上公网 第二部分 安装配置docker软件一:配置yum源,加入docker源[[email protected] ~]# vi /etc/yum.r

第一章 初识Docker

1.1什么是Docker Docker开源项目 Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotCloud公司.Docker自开源后受到广泛的关注和讨论,目前已有多个相关项目,逐渐形成了围绕Docker的生态体系.dotCloud公司后来也改名为Docker Inc,专注于Docker相关技术和产品的开发. Docker项目目前已加入了Linux基金会,遵循Apache 2.0协议,全部开源代码均在https://github.com/docker/docker