【docker系列】详解docker容器状态转换管理命令_docker 更改容器状态_字母哥哥的博客-程序员宅基地

技术标签: 云原生  linux  docker-k8s  docker  

在这里插入图片描述


本文系docker系列专栏第六篇。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

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hanxiaotongtong/article/details/123981078

智能推荐

Expected one result (or null) to be returned by selectOne(), but found: 3怎么解决-程序员宅基地

异常详细解决方法:Request processing failed; nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2 ``查询条件查出来的不是一个对象,是一个集合,要么换条件查询,要么换接收类型原因二:查询的结果应该是一条,但实际查询的结果是多条或是空的,._expected one result (or null) to be returned by selectone(), but found: 3

IIC固件库_i2c_event_master_byte_transmitting i2c_event_maste-程序员宅基地

以oled为例子讲解硬件IIC和软件IIC一、硬件IICIIC结构体typedef struct{ uint32_t I2C_ClockSpeed; 时钟速度 uint16_t I2C_Mode; 模式 uint16_t I2C_DutyCycle; uint16_t I2C_OwnAddress1; 主机地址 uint16_t I2C_Ack; 应答位 uint..._i2c_event_master_byte_transmitting i2c_event_master_transmitter_mode_selecte

&#39;&lt;&gt;&#39; operator is not allowed for source level below 1.7-程序员宅基地

报错:'这是eclipse的编译环境与项目的要求不对应造成的,这个错误一般是导入别的项目才出现的。解决:右键项目 --> 属性 --> Java Compiler --> 勾选Enable project specific settings --> Compiler compliance level --> 选择1.7 --> OK。

PySpark 连接Hive_pyspark hive-程序员宅基地

文章目录简介环境搭建与效果演示更细节的搭建方法搭建HDFS、Spark或hive的前提已经有了远程可访问的测试集群搭建hadoop2.7.2修改hadoop配置格..._pyspark hive

Android中如何使用View填充在多个TextView之间使之等间距_android linearlayout 子view间距-程序员宅基地

(1)我们如果使用多个的TextView的话就会挤在一起如下所示: 相应的代码如下:

javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null', cause: null-程序员宅基地

出现这个问题,不要急,听我慢慢说来,有几个地方,要检查一下:第一:仔细检查,你的server.xml jdbc/xxx " auth= "Container " type= "javax.sql.DataSource " / > jdbc/xxx " >web.xmljdbc/xxx 其中红色字体部分对应上没有。第二:看看这行有没有。第三:在你的webserver下面的下面有没有数据库的驱动程序

随便推点

Mac(M1版本)安装与卸载Git_mac m1安装git_再让我睡半小时的博客-程序员宅基地

使用Mac安装Git目前流行的三种方法。_mac m1安装git

带你学习并掌握Flood Fill算法与最短路模型_塔塔开!!!的博客-程序员宅基地

一、Flood Fill(连通块问题)0.简介Flood Fill(洪水覆盖)可以在线性的时间复杂内,找到某个点所在的连通块!注:基于宽搜的思想,深搜也可以做但可能会爆栈flood fill算法DFS与BFS:​ DFS:无法求解最短路问题;可能会爆栈(递归层数很深时);代码简介。当数据范围较小时可以使用​ BFS:可以求解最短路;不存在爆栈情况;需要自己手写队列1.池塘计数农夫约翰有一片 N∗MN∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符

Qt基础篇:Qt生成与解析修改JSON文件_qt 生成json文件_欧特克_Glodon的博客-程序员宅基地

简述Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsonDocument、QJsonArray、QJsonObject),在 QtCore 模块中,不需要额外引入其它模块。效果:代码如下:#include <QCoreApplication>#include <QJsonArray>#include <QJsonDocument>#include <QJsonObject>#include <QJsonPars_qt 生成json文件

Keil MDK 5.14 仿真时System Viewer菜单显示空白和Peripherals菜单无外设寄存器-程序员宅基地

keil mdk5.14新建工程进行仿真时,进入Debug环境发现System Viewer菜单显示空白,Peripherals菜单没有外设寄存器。如图1和图2所示。打开Oprons for Target 查看System Viewer File选项没有勾选Use Custom File,系统默认的STM32F103xx.svd。如图3所示。查看Debug选项中的Dialog DLL一栏..._mdk如何添加到system and thread viewer

Linkedin领英如何添加或更改账号的邮箱地址_领英如何改掉主邮箱_lingying00a的博客-程序员宅基地

注册领英后,大家都会绑定邮箱。当绑定的邮箱不能使用了,为了防止后期领英账号不能登录的问题,一定要刻更改有效的新邮箱,也可以添加一些有效的邮箱,这样方便后期的身份验证。_领英如何改掉主邮箱

推荐文章

热门文章

相关标签