前言
Docker 的三个核心概念是镜像、容器和仓库,而容器是基于镜像创建的可运行实例。相较于传统虚拟机,Docker容器提供轻量化的虚拟化方式、安装便捷、启停速度快。本文介绍容器一些知识点和常用命令。

容器知识点
容器是什么
Docker 容器是用于运行应用程序的轻量级虚拟化运行时环境。每个容器代表一个软件包,其中包含运行特定应用程序所需的代码、系统工具、库、依赖项和配置文件。它们与主机和在主机上运行的其他实例是独立和隔离的。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。
容器的生命周期
容器的生命周期是容器可能处于的状态。容器的生命周期分为5种,分别如下:
(1)created:初建状态
(2)running:运行状态
(3)stopped:停止状态
(4)paused:暂停状态
(5)deleted:删除状态
各生命周期之前的转换关系如图所示:
容器的操作命令
说明:有镜像才能创建容器,我们这里使用 centos 的镜像来演示容器命令,就是虚拟一个 centos !
docker pull centos
创建并启动容器
容器十分轻量,用户可以随时创建和删除它。容器创建命令:
docker create
例如:
docker create -it --name=centos1 centos
小贴士:如果使用docker create命令创建的容器处于停止状态,我们可以使用docker start命令来启动它。
容器启动两种命令:
(1)已经创建好直接启动命令
docker start
例如:
docker start centos1
(2)直接基于镜像新建一个容器并启动(相当于先执行docker create命令从镜像创建容器,然后再执行docker start命令启动容器)
docker run
例如:
docker run -it centos /bin/bash # 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令!
小贴士:如果通过 exit 退出 sh,那么容器也会退出。所以对于容器来说,杀死容器中的主进程,则容器也会被杀死。
常用参数说明
--name="Name" # 给容器指定一个名字
-d # 后台方式运行容器,并返回容器的id!
-i # 以交互模式运行容器,通过和 -t 一起使用
-t # 给容器重新分配一个终端,通常和 -i 一起使用
-P # 随机端口映射(大写)
-p # 指定端口映射(小结),一般可以有四种写法
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort (常用)
containerPort
# 两则启动命令区别
exec 是在容器中打开新的终端,并且可以启动新的进程
attach 直接进入容器启动命令的终端,不会启动新的进程
启动停止容器
docker start (容器id or 容器名) # 启动容器
docker restart (容器id or 容器名) # 重启容器
docker stop (容器id or 容器名) # 停止容器
docker kill (容器id or 容器名) # 强制停止容器
退出容器
exit # 容器停止退出
ctrl+P+Q # 容器不停止退出
进入容器
(1)使用docker attach命令进入容器,例如:
docker attach centos1
注意: 使用docker attach命令在多个终端上同时运行时,所有终端窗口会同时显示相同的内容。 当一个命令行窗口中的某个命令被阻塞时,其他命令行窗口也无法运行。所以我们一般不会使用docker attach进入容器。
(2)使用 docker exec 命令进入容器,例如:
docker exec -it centos1 sh
注意:使用该命令进入容器,会单独启动一个 sh 进程,每个窗口都是独立且互不干扰的,也是使用最多的一种方式。
删除容器
docker rm 容器id # 删除指定容器
docker rm -f $(docker ps -a -q) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
列出所有运行的容器
docker ps [OPTIONS]
常用参数说明
-a # 列出当前所有正在运行的容器 + 历史运行过的容器
-l # 显示最近创建的容器
-n=? # 显示最近n个创建的容器
-q # 静默模式,只显示容器编号。
例如:
docker ps -a
后台启动容器
docker run -d 容器名
例如:
docker run -d centos # 启动centos,使用后台方式启动
小贴士:使用后台启动时,如果docker前台没有运行进程,那么该容器会自动退出,所以一般使用前台进程的方式运行启动。
查看容器日志
docker logs -f -t --tail 容器id
例如:
docker logs -tf --tail 100 05e2ac6c0a68
解释:
-t 显示时间戳
-f 打印最新的日志
--tail 数字 显示多少条!
查看容器 / 镜像的元数据
docker inspect 容器id
例如:
docker inspect 05e2ac6c0a68
查看容器中运行的进程信息
docker top 容器id
例如:
docker top 05e2ac6c0a68
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
测试(容器内执行,创建一个文件测试 ):
[root@daxiong ~]# docker run -it centos /bin/bash
[root@e5d3945c674f /]# cd home/
[root@e5d3945c674f home]# touch test
[root@e5d3945c674f home]# ls
test
[root@e5d3945c674f home]# exit
exit# linux复制查看,是否复制成功
[root@daxiong ~]# docker cp e5d3945c674f:/home/test /home
[root@daxiong ~]# cd /home/
[root@daxiong home]# ls
test
迁移容器
导出容器命令:
docker export CONTAINER
具体操作步骤如下:
docker exec -it centos sh # 进入容器
cd /tmp && touch test # 创建文件
执行导出命令
docker export centos > centos.tar
导入容器命令:
docker import [OPTIONS] file|URL [REPOSITORY[:TAG]]
具体操作步骤如下:
docker import centos.tar centos:test
验证是否迁移成功:
docker run -it busybox:test sh
/ # ls /tmp
test
小提示:通过docker export命令导出的文件,可以使用docker import命令导入,执行完docker import后会变为本地镜像,最后再使用docker run命令启动该镜像,这样我们就实现了容器的迁移。
总结
通过本文,相信你对容器的基本概念和组成有了一定的了解,容器的各种生命周期操作命令也比较熟悉吧。您也应该比较清楚容器和镜像之间的区别。镜像包含了容器运行所需的文件系统结构和内容,是一个静态的只读文件,而容器在镜像的只读层上创建了一个可写层,容器中的进程是处于运行状态,容器是真正的应用载体。
如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。欢迎关注,一起docker学习之旅!