![](https://cdn.zimug.com/wx-zimug.png)
[TOC]
docker容器有三种状态运行、停止、暂停,镜像可以创建、运行容器,镜像和容器也可以转换成tar压缩包进行存储。本文为大家介绍容器的状态转换命令及镜像创建运行容器、tar包导入导出相关的命令及使用场景。
![](http://cdn.zimug.com/9dfbb1f4161c41d058eb6e7a9f9d64ff)
结合下文中的命令介绍来理解上面的这张图。
## 一、从镜像启动容器
从docker镜像启动一个容器的语法如下,使用`docker run`命令。
```
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
```
**常用options说明**,`docker create`与`docker 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服务的日志如下所示:
![](http://cdn.zimug.com/3007d4586c153f9fb509dbe160e20bd9)
## 三、进入容器内部操作系统
有的时候我们通过`docker ps`和`docker 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
~~~
- 文档概要
- 第一章 docker基础
- docker介绍
- CentOS7安装docker
- 基础概念介绍
- 示例-docker安装nginx
- 镜像管理详解
- 容器管理详解
- 容器自启动与保活
- 使用IDEA工具远程管理
- 第二章 制作与管理镜像
- 镜像分层原理
- Dockerfile语法解析
- 使用Dockerfile构建镜像
- 制作Springboot镜像
- registry v2镜像仓库搭建
- 第三章 docker数据管理
- docker存储驱动
- 数据管理-Bind mounts
- 数据管理-Volumes
- 容器间数据共享
- 第四章 Docker容器安全
- 用户提权问题实验
- 非root用户安装使用Docker
- API认证接口使用HTTPS
- 资源配额限制
- 第五章 Docker网络基础
- docker网络基础概念
- docker基础网络模式
- overlay跨宿主机通信
- 配置DNS服务
- 第六章 DockerCompose
- 安装与入门
- 一键部署wordpress
- Harbor的搭建与使用
- YAML配置文件详解
- 第七章 Docker Swarm
- 几乎没人用就不写了
- 附录
- CentOS7内核升级
- docker引擎及容器日志
- 离线挂载yum源
- 笔者其他作品推荐
- vue深入浅出系列
- 手摸手教你Spring Boot2.0
- Spring Security-JWT-OAuth2一本通
- 实战前后端分离RBAC权限管理系统
- 实战SpringCloud微服务从青铜到王者