docker容器有三种状态运行、停止、暂停,镜像可以创建、运行容器,镜像和容器也可以转换成tar压缩包进行存储。本文为大家介绍容器的状态转换命令及镜像创建运行容器、tar包导入导出相关的命令及使用场景。



结合下文中的命令介绍来理解上面的这张图。

一、从镜像启动容器

从docker镜像启动一个容器的语法如下,使用docker run命令。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用options说明,docker createdocker run命令参数几乎一致,只是docker run创建并运行容器,docker create只创建(可以docker ps -a查看到)不运行容器。

option 作用
-d 守护进程,后台运行该容器
-v 目录映射,容器目录挂载到宿主机目录,格式:宿主机目录:容器目录
-p 指定端口映射,格式:主机(宿主)端口:容器端口
-P 随机端口映射,容器内部端口随机映射到主机的端口
--name nginx-zimug 容器名字nginx-zimug
-m, --memory bytes 设置容器使用内存最大值
-h, --hostname string 指定容器的 hostname
--dns 8.8.8.8 指定容器 dns 服务器8.8.8.8
-e JAVA_HOME="路径" 设置环境变量,如JAVA_HOME
--rm 容器退出时,删除容器及容器目录

示例一:在后台(-d)运行一个名称(--name)为nginx-zimug的容器,将容器的80端口映射到宿主机80端口

docker run -d --name nginx-zimug -p  80:80  nginx

示例二:如果不加-d会在Linux终端下输出容器的标准输入输出日志,当退出终端时,容器停止运行。这种模式通常不用于生产,常用于调试容器。

docker run --rm --name nginx-zimug -p  80:80  nginx

--rm参数用于容器运行时停止之后,直接删除容器,而不是让容器进入stoped状态。

示例三-v 表示宿主机目录与容器目录的映射关系

docker run -d -p 80:80 \
--name nginx-prod \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/log/nginx nginx

二、查看容器与日志

docker ps //查看运行中running状态的容器
docker ps –a //查看所有状态的容器(包含running、paused、stopped)
docker container ls //等同于docker ps
docker container ls –a //等同于docker ps –a

查看的结果如下:

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                    PORTS                               NAMES
1061ed186789 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-zimug
  • CONTAINER ID :容器ID
  • IMAGE:镜像名称
  • COMMAND:容器内部软件脚本启动命令
  • CREATED: 容器创建的时间
  • STATUS:容器的运行状态
  • PORTS: 容器与宿主机的端口映射关系
  • NAMES: 容器的名称
docker logs 容器ID;   //查看容器日志标准输出

比如nginx服务的日志如下所示:

三、进入容器内部操作系统

有的时候我们通过docker psdocker logs的信息很难判断容器内部服务的运行情况。这个时候我们就需要进入到容器内部操作系统,使用下面的命令。

docker exec -it 容器ID /bin/bash

进入到容器内部操作系统之后,想查看什么信息,就和常规使用linux命令是一样的。退出容器使用exit命令。

四、停止容器暂停容器

通过docker ps 找到处于运行状态的容器id或容器名称

docker stop 9be696a0c283 //停止正在运行容器
docker container stop nginx-zimug //停止正运行容器(ID或Names)

执行该命令后容器进入stoped状态,不再提供服务,不占用宿主机资源。stopped状态的容器可以再次被启动。

docker pause 容器名/容器ID;  //暂停容器服务
docker unpause 容器名/容器ID; //恢复容器服务

除了stop停止容器,还有一种方法是暂停容器服务,如上命令所示。被暂停的容器不再对外服务,但是仍然占用宿主机资源。这种方式并不常用!

五、启动stopped状态的容器

通过docker ps -a可以找到处于stopped状态的容器信息。使用下面命令可以让stopped状态的容器再次进入运行状态。

docker start 容器名/容器ID

不论容器处于什么状态,如果想重启容器,可以使用下面的命令。

docker restart 容器名/容器ID   //重启容器(根据ID或NAMES)

六、删除容器

如果想要删除容器,一定要让容器处于stopped状态才可以。

docker rm 容器ID

七、export与import

将容器导出为tar包,生成的是该容器的快照,复刻的是容器当前的linux系统环境

docker export nginx-zimug > nginx-zimug.tar

如下所示的命令,将tar包导入生成一个镜像,该镜像的命名名称是new-nginx-zimug

 docker import - new-nginx-zimug < nginx-zimug.tar

八、commit

假设我们有这样一种场景,容器启动之后发现一个配置文件参数写错了,然后通过docker exec -it进入容器内部对配置文件进行了修改。

我们已经介绍过,一旦容器发生重启,针对容器所做的任何写操作全部丢失。那么我们为了将容器修改之后的状态保存下来,可以使用commit将容器运行时快照,保存为本机的一个镜像。

docker commit -a "zimug" -m "comment" <容器ID或容器名称> <镜像名称>

比如使用下面的命令将容器nginx-zimug保存为镜像nginx:zimug

docker commit -a "zimug" -m "comment" nginx-zimug nginx:zimug

通过docker images查看commit产生的镜像

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx zimug 7e4e3219870e 8 seconds ago 142MB

九、查看容器配置及资源使用情况

查看容器配置信息,该命令会返回一个json格式信息,如网络配置、环境变量配置、端口配置、数据卷配置等信息。

docker inspect <容器ID或容器名称>

查看容器资源使用情况,使用docker stats命令,可以查看CPU使用率,内存使用率 、网络IO、磁盘IO、进程号等信息。

# docker stats nginx-zimug
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ec6953bce17b nginx-zimug 0.00% 1.41MiB / 990.9MiB 0.14% 656B / 0B 0B / 7.68kB 2

使用docker top命令可以查看容器内进程信息。如下问所示,一个master进程,一个worker进程。

# docker top nginx-zimug
UID PID PPID C STIME TTY TIME CMD
root 6169 6150 0 10:27 ? 00:00:00 nginx: master process nginx -g daemon off;
101 6217 6169 0 10:27 ? 00:00:00 nginx: worker process

字母哥博客:zimug.com

【docker专栏6】详解docker容器状态转换管理命令的更多相关文章

  1. Docker 网络模式详解及容器间网络通信

    当项目大规模使用 Docker 时,容器通信的问题也就产生了.要解决容器通信问题,必须先了解很多关于网络的知识.Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜 ...

  2. 详解Docker 端口映射与容器互联

    详解Docker 端口映射与容器互联 1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行 ...

  3. 附005.Docker Compose文件详解

    一 Docker Compose文件简介 compose文件使用yml格式,主要分为了四个区域: version:用于指定当前docker-compose.yml语法遵循哪个版本 services:服 ...

  4. Docker网络模式详解

    一.Docker四种工作模式 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .hosthost:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用 ...

  5. Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET

    Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...

  6. 详解CopyOnWrite容器及其源码

    详解CopyOnWrite容器及其源码 在jave.util.concurrent包下有这样两个类:CopyOnWriteArrayList和CopyOnWriteArraySet.其中利用到了Cop ...

  7. 【Devops】【docker】【CI/CD】关于jenkins构建成功后一步,执行的shell命令详解+jenkins容器运行宿主机shell命令的实现方法

    1.展示这段shell命令 +详解 #================================================================================= ...

  8. 详解docker中容器devicemapper设备的挂载流程

    事故起因 版本说明:本文中docker版本主要基于1.10版本,操作系统为centos7.devicemapper在文中缩写为dm. 某个用户的容器启动不起来,启动时候一直报错.通过docker lo ...

  9. 【docker专栏5】详解docker镜像管理命令

    一.国内Docker镜像仓库 由于大家都知道的原因,从国外的docker 仓库中pull镜像的下载速度实际上是很慢的.国内的一些一线厂商以及docker官方都在国内免费提供了一些docker镜像仓库, ...

随机推荐

  1. 代码源 每日一题 分割 洛谷 P6033合并果子

    ​ 题目链接:切割 - 题目 - Daimayuan Online Judge 数据加强版链接: [NOIP2004 提高组] 合并果子 加强版 - 洛谷 题目描述 有一个长度为 ∑ai 的木板,需要 ...

  2. ChCore Lab4 多核处理 实验笔记

    本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第四篇:多核处理.所有章节的笔记可在此处查看:chcore | 康宇PL' ...

  3. 【CSAPP】Data Lab实验笔记

    前天讲到要刚CSAPP,这一刚就是两天半.CSAPP果然够爽,自带完整的说明文档,评判程序,辅助程序.样例直接百万组走起,管饱! datalab讲的是整数和浮点数怎么用二进制表示的,考验的是用基本只用 ...

  4. clion 预编译文件的查看

    看了一圈网上也没有我能一下就能看的懂的配置教程 我就手打一篇给在用clion的同学来参考一下 本文适用于g++编译 cmake Ninja生成器 clion 默认使用的是CMAKE来构建程序 生成器用 ...

  5. delete-drop语句生成的存储过程

    问题: 开发时有时候需要对很多表进行操作. 例如:清空(删除)所有(某些)表,删除所有表某时间点之后导入的数据(类似于回滚) 解决方式: 对选定的表集合执行相同的查询条件(可为空),如果这个执行结果大 ...

  6. 论文解读(DAGNN)《Towards Deeper Graph Neural Networks》

    论文信息 论文标题:Towards Deeper Graph Neural Networks论文作者:Meng Liu, Hongyang Gao, Shuiwang Ji论文来源:2020, KDD ...

  7. 如何查看和修改Windows远程桌面端口

    Windows远程桌面的默认端口为3389.基于安全性考虑,部分用户有修改默认端口的需要,以减少通过远程桌面恶意攻击和扫描主机的次数. 因此今天带大家一起学习下,如何查看和修改Windows远程桌面的 ...

  8. 踩到一个关于分布式锁的非比寻常的BUG!

    你好呀,我是歪歪. 提到分布式锁,大家一般都会想到 Redis. 想到 Redis,一部分同学会说到 Redisson. 那么说到 Redisson,就不得不掰扯掰扯一下它的"看门狗&quo ...

  9. wcf使用JetEntityFrameworkProvider.dll写access数据库时,报"操作必须使用一个可更新的查询"错误的解决办法

    由于users用户组无权重写access数据库,需要设置users组用户能读写access数据库.

  10. 147_Power BI Report Server demo演示

    焦棚子的文章目录 服务器地址:http://pbirs.jiaopengzi.com/reports 用户名:pbirs 密码:pbirs 分别用pc网页.pc桌面power bi软件以及手机端pow ...