简介

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

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

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

1、创建容器

1、新建容器

语法格式:

docker create 语法

例如:

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

参数说明:

  • -i

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

  • t

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

2、启动容器

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

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

[root@qll251 ~]# docker start eeb
eeb

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

3、新建并启动容器

docker run 语法

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

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

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

4、后台运行容器

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

Exited状态

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

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

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

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

2、停止容器

1、暂停容器

docker pause 语法

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

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

docker unpause 命令

2、终止容器

docker stop 语法

举例:

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

[root@qll251 ~]# docker stop 021
021

3、强制终止容器

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

 [root@qll251 ~]# docker kill 021
021

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

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

3、进入容器

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

docker exec 语法

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

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

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

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

操作容器

4、删除容器

docker rm 语法

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

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

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

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

5、导入导出容器

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

1、导出容器

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

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从容器快照文件中再导入为镜像,命令格式如下:

docker import 语法

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

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



两者区别

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

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

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

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

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


6、查看容器

1、查看容器详细信息

docker inspect

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

2、查看容器内进程

docker top

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

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

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

docker stats

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

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

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

docker cp 语法

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

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

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

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

本章命令小结

1、新建容器

docker create -it ubuntu:18.04

2、启动容器

docker start “容器ID”

3、新建并启动容器

1、以交互式模式新建容器
docker run -it ubuntu /bin/bash 2、以后台方式运行容器
docker run -itd ubuntu /bin/bash 3、创建容器时指定主机名
docker run -itd --name test ubuntu:18.04 /bin/bash 4、容器运行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.tar 2、导入容器
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:/test123 2、将容器dba277的/test123目录拷贝到宿主机/tmp目录下
docker cp dba277:/test123 /tmp

Docker系列教程02-操作Docker容器的更多相关文章

  1. Docker系列教程01-使用Docker镜像

    docker系列导读 一文带你读懂什么是docker Docker安装部署 10张图带你深入理解Docker容器和镜像 前言 学习Docker,我们需要掌握它的三大核心概念:镜像.容器和仓库. 今天先 ...

  2. jquery系列教程3-DOM操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...

  3. Docker系列教程05 容器常用命令

    https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de ...

  4. Docker系列教程01-Centos7安装新版Docker教程(10步)

    最近一直忙于开发,没有时间好好总结一下docker的知识.其实现在docker的教程已经很多很多了,但是很多系统的教程都是基于Ubuntu系统,因为官方推荐使用Ubuntu系统啊,原因在于Ubuntu ...

  5. Docker 系列二(操作镜像).

    一.镜像管理 1.拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -- Docker 镜像仓库地址 :一般是 域名或者IP[:端口号 ...

  6. Docker实战(二)之操作Docker容器

    容器是Docker的另外一个核心概念.简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统系统(包括内核,应 ...

  7. Docker系列-第五篇Docker容器数据卷

    1.是什么 在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作 . 容器中的管理数据主要有两种方式 : 数据卷 ( Data V ...

  8. Docker系列06:Linux修改docker镜像和容器数据存储位置

    指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...

  9. Docker系列教程04-Docker构建镜像的三种方式

    简介 创建镜像的方法主要有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建. 今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像. 1.基于容器构建镜像 基于已有 ...

随机推荐

  1. Linux编译安装软件常见问题及排查

    1.配置cmake参数时提示: The C compiler identification is unknown. The CXX compiler identification is unknown ...

  2. 学习openldap01

    Linux 下openldap的详细介绍,搭建,配置管理,备份,案例 Ldap  服务应用指南 兼容(5.X&6.X) 1.1  Ldap 目录服务介绍 1.1.1 什么是目录服务(activ ...

  3. 速看,ElasticSearch如何处理空值

    大家好,我是咔咔 不期速成,日拱一卒 在MySQL中,十分不建议大家给表的默认值设置为Null,这个后期咔咔也会单独出一期文章来说明这个事情. 但你进入一家新公司之前的业务中存在大量的字段默认值为Nu ...

  4. 如何在Ubuntu 18.04 LTS上安装和配置MongoDB

    MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库. MongoDB是一个非关系型数据库,因此您不能使用SQL(结构化查询语言)插入和检索数据,也不会将数据存储在MySQL或 ...

  5. (stm32f103学习总结)—stm32中断系统

    一.NVIC 介绍 NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功 ...

  6. LQR (线性二次型调节器)的直观推导及简单应用

    转自:https://blog.csdn.net/heyijia0327/article/details/39270597 本文主要介绍LQR的直观推导,说明LQR目标函数J选择的直观含义以及简单介绍 ...

  7. C/C++头文件以及避免头文件包含造成的重定义方法

    C 头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享.有两种类型的头文件:程序员编写的头文件和编译器自带的头文件. 在程序中要使用头文件,需要使用 C 预处 ...

  8. Emscripten教程之入门指导

    翻译:云荒杯倾本文是Emscripten-WebAssembly专栏系列文章之一,更多文章请查看专栏.也可以去作者的博客阅读文章.欢迎加入Wasm和emscripten技术交流群,群聊号码:93920 ...

  9. W3School 教程整理

    离线版大部分整理自 w3cschool ,少部分整理自 w3school ,由本人整理. 感谢 w3cschool 站长的无私奉献. 由于本人精力有限,此处的列表不一定能够及时更新,最新版本请到本人博 ...

  10. video标签学习使用

    video标签学习使用 学习前的理解 video是HTML5中的新标签,可以用来播放视频.对于不同的浏览器支持的视频格式不一样,但是具体浏览器支持的类型并不清楚. 支持的类型 视频的格式分为编码格式和 ...