docker镜像导出与导入_Docker系列教程02-操作Docker容器

fcbe53b0a5bc1021bfc9d00b304c4fb0.png

简介

通过前面的学习,相信您已经对镜像有所了解,是时候学习容器了。

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。正如从虚拟机模板上启动VM一样,用户也同样可以从单个镜像上启动一个或多个容器。

本章带大家学习容器相关的重要操作,包括创建容器、启动容器、终止容器、进入容器后执行操作、删除容器及通过导入导出容器实现容器迁移、容器与宿主机之间数据拷贝等。

1、创建容器

1)新建容器

语法格式:

f71b5dfb0233557d4bc7ae8d6d15773b.png

docker create 语法

例如:

[root@qll251 ~]# docker create -it ubuntu:18.04eeb931f21f0895d055bedcbe5829634309cbc24863eee6f80b14a131559ffd21

参数说明:

  • -i

保持标准输入打开,用于控制台交互

  • t

分配一个tty伪终端,支持终端登录

2)启动容器

使用docker create命令新建的容器处理停止状态,可使用docker start启动它。

例如,启动刚刚创建的ubuntu容器:

[root@qll251 ~]# docker start eebeeb

eeb为刚刚创建容器的ID简写,此时通过docker ps查询容器已运行:

5c4de08ae8fd44ccb709ecd158f89c25.png

3)新建并启动容器

a059ab4f8567d6d6a25f336024ff3074.png

docker run 语法

例如,使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

[root@qll251 ~]# docker run -it ubuntu /bin/bashroot@8b18b6758bb6:/#

docker run相当于执行了两个步骤:将镜像放入容器中(docker create),然后启动容器(docker start)。

4)后台运行容器

对于刚刚所创建的容器,当用户使用exit命令退出后,容器也会自动退出,如下图所示的Exited状态。

088250d1244f15acd73d68bbecea429e.png

Exited状态

因为对它来说,当容器的应用退出后,容器使命完成,也就没有继续运行的必要了。

因此更多时候,我们希望 Docker 容器是在后台一直运行。此时可以通过添加-d参数来实现。验证如下:

e1b711750283163ba304d0f04284d32d.png

添加 -d 参数实现容器后台运行

小知识点:如果不指定后台运行容器,还有其他办法退出而容器不关闭吗?按Ctrl+P+Q即可实现正常退出不关闭容器。验证如下:

d4f0e9918e1656dabec0c5a632d262b9.png

2、停止容器

1)暂停容器

20ed2ca9bf198d363644fdaa78b94151.png

docker pause 语法

例如,暂停容器中所有的进程

f2c9c3c67299459154ca7e4d5eb2bc98.png

处于paused状态的容器,可以使用docker unpause命令恢复到运行状态,如图:

d20579a2c08f55a5420a0f25f1b25343.png

docker unpause 命令

2)终止容器

d176c0cf5d479d6961c71e91853944ed.png

docker stop 语法

举例:

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

[root@qll251 ~]# docker stop 021021

3)强制终止容器

此外,还可以通过docker kill 直接发送SIGKILL信号强制终止容器。例如:

 [root@qll251 ~]# docker kill 021021

4)删除所有停止状态的容器

[root@qll251 ~]# docker container pruneWARNING! This will remove all stopped containers.Are you sure you want to continue? [y/N] yTotal reclaimed space: 1.1 GB[root@qll251 ~]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES[root@qll251 ~]#

3、进入容器

当容器在后台运行时,用户是无法操作容器的。这个时候如果需要进入容器进行操作,推荐使用exec命令,语法格式如下:

de026827c506cf6429f5f910a77a845f.png

docker exec 语法

例如,进入一个容器,并启动一个bash:

[root@qll251 ~]# docker exec -it 021 /bin/bashroot@0215d56eaf7d:/#

通过指定-it参数保持标准输入打开,并且分配一个伪终端。

进入容器后,我们可以进行操作,比如创建文件和列出当前运行进程:

58c410f190e9cfee0e2e6bb98504901a.png

操作容器

4、删除容器

9b5e23e810df1467514ba7b5dc91b265.png

docker rm 语法

例如,删除处于终止状态的容器:

a6e7beafb6c3c3a86acb6e5d41fcce46.png

默认情况下,docker rm命令只能删除处于终止或退出状态的容器,并不能删除处于运行状态的容器。如果要直接删除运行状态的容器,可以添加-f实现:

c3c78f29574870773e9d0ee4b9de9f86.png

实际上,指定-f 参数时,Docker先发送SIGKILL信号给容器,终止其中的应用,之后强行删除。

更多关于容器删除的方法,参考文末本章命令小结

5、导入导出容器

docker的一大优势就是可移植性,容器可以随意的进行导入导出操作。下面一起看下具体怎么操作。

1)导出容器

将容器导出到一个文件中,可以使用docker export,命令格式如下:

9f5af3b9172b14559d66fbf4b7083749.png

docker export 语法

例如,将容器79b导出到/data/myubuntu.tar文件

[root@qll251 ~]# docker export 79b > /data/myubuntu.tar[root@qll251 ~]# ls /data/myubuntu.tar[root@qll251 ~]#

注意:不管容器是否处于运行状态,都可以将容器导出到一个文件。

2)导入容器

可以使用docker import从容器快照文件中再导入为镜像,命令格式如下:

611f0ec119fcd941133bac3dcda0477c.png

docker import 语法

例如,使用docker import将导出的myubuntu.tar文件导入为镜像,并且重新指定标签为qinlulu/ubuntu:v1,代码如下:

ac790442f2031fedf7c345a9b8b00af1.png

还记得上一章节,我们讲过docker load载入镜像吗?花1分钟回顾下:


6a39c171a8b3f0fc64a7b19c86d6b417.png

两者区别

1、docker load的对象是镜像文件

2、docker import的对象是容器快照

3、用户既可以使用docker load导入镜像文件到本地镜像库,也可以使用docker import导入容器快照到本地镜像库。

4、两者的区别在于,使用容器快照文件导入的镜像将丢失所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像文件导入的镜像将保存完整记录,体积也要大。

5、此外,从容器快照文件导入镜像时,可重新指定标签等元数据信息。


6、查看容器

1)查看容器详细信息

4e6a36d27ae11b4c833dbcecf8646e60.png

docker inspect

上图返回的是一个JSON格式,包含容器ID、创建时间、路径、状态、镜像、配置等各项信息

2)查看容器内进程

497724c2880ea1fbdf5816f2215a9731.png

docker top

这个命令类似于Linux系统中的top命令,查看容器中运行的进程信息

3)实时监控容器资源数据

docker stats命令用来返回运行中的容器的实时数据流,包括CPU、内存、存储、网络等使用信息的实时统计信息。例如:

b173f38068839850ac6a4bbc4df9506f.png

docker stats

默认情况下,stats命令会每隔1秒钟刷新一次内容,直到按下 Ctrl + c。如果不想持续监控,可以通过添加--no-stream参数 只输出当前的状态。

7、容器与宿主机之间的数据拷贝

老规矩,我们先看下官方给出的docker cp用法。

b983372d7db9ab26fbb514ff6d85e002.png

docker cp 语法

可以看懂英文吧?我要啰嗦一句了,混迹技术圈,如果学不好英语,不说被淘汰,很可能将一直是“码农”。当然,实在看不懂- -help 内容也不打紧,常用命令我都列举出来啦,例如:)

1)将宿主机上的/data目录拷贝至容器dba277的/test123目录:

89f7083ea43f43bed26852f816114af4.png

如上图所示,宿主机上/data目录下所有文件已拷贝到容器中,并且目录重命名为/test123

2)将容器dba277的/test123目录拷贝到宿主机/tmp目录下

243054cd1fa5e7a304541ca7029a5d03.png

本章命令小结

1、新建容器

docker create -it ubuntu:18.04

2、启动容器

docker start “容器ID”

3、新建并启动容器

1)以交互式模式新建容器docker run -it ubuntu /bin/bash2)以后台方式运行容器docker run -itd ubuntu /bin/bash3)创建容器时指定主机名docker run -itd --name test ubuntu:18.04 /bin/bash4)容器运行5秒钟后自动删除容器docker run -it --rm ubuntu:18.04 sleep 5

4、停止容器

1)暂停容器docker pause '容器ID'2)将容器恢复到运行状态docker unpause '容器ID'3)终止容器docker stop '容器ID'4)强制终止容器docker kill '容器ID'

5、进入容器

docker exec -it "容器ID" /bin/bash

6、删除容器

1)删除处于终止状态的容器docker rm '容器ID'2)删除运行中的容器(不建议操作)docker rm -f '容器ID'3)删除所有停止状态的容器docker container prune----其实也可以使用 docker rm `docker ps -aq`删除所有未运行的容器----举一反三,那删除本地镜像库的所有镜像命令就是 docker rmi `docker images`呢(操作需谨慎!)

7、导入导出容器

1、导出容器docker export 79b > myubuntu.tar2、导入容器docker import myubuntu.tar qinlulu/ubuntu:v1

8、查看容器

1)查看容器详细信息docker inspect '容器ID'2)查看容器内进程docker top '容器ID'3)实时监控容器资源数据docker stats '容器ID'

9、容器与宿主机之间的数据拷贝

1)将宿主机上的/data目录拷贝至容器dba277的/test123目录docker cp /data dba277:/test1232)将容器dba277的/test123目录拷贝到宿主机/tmp目录下docker cp dba277:/test123 /tmp

结语

欢迎来到『开源Linux』,这里是 Linux 爱好者的聚集地。专注分享Linux/Unix相关内容(包括Linux运维、Linux系统开发、网络编程、以及虚拟化和云计算等技术干货)。风里雨里,我们在这里等您,期待与您相遇。

a22dfffc1a1faf1ea72230f67a2b4931.png
5c5eae2fd6d37c69c68810c050467a26.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值