Docker的三大核心概念之“容器”篇

357 阅读4分钟

前言

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学习之旅!