Doker容器

容器是Docker 的三大核心概念之一,使应用程序运行的基础环境,下面我们就来具体讲解一下Docker容器。

一、什么是容器

所谓容器就是镜像的一个运行实例,并且带有运行时需要的可写的文件层,其中的应用程序也处于运行状态。很多人会把容器和虚拟机相混淆,虚拟机是模拟运行一整套操作系统,虚拟机模拟的东西不管应用是否使用都会存在。容器是里运行的N个应用和应用所必需的环境,也就是说应用不需要的东西,容器是不会加入的。

二、创建容器
  1. 新建容器
    新建容器一般使用 create 命令,具体语法如下:
docker [container] create

例如我们要创建ubuntu 16.04的容器,docker 命令如下:

docker create ubuntu:16.04

使用 create 命令创建的容器是出于停止状态的,可以使用 start 命令来启动,start 命令将在下一小节讲解。 create 命令参数很多,包含如下3大类:

  • 与容器运行模式相关;
  • 与容器环境配置相关;
  • 与容器资源限制和安全保护相关。

因为命令参数很多,因此这里只讲解常用的几个:

  • -i:保持标准输入打开,默认值为 false;
  • -t:是否分配一个伪终端,默认值 false;
  • -d:是否在后台运行容器,默认值 false;
  • –expose=[]:指定容器暴露出来的端口或端口范围;
  • –net="":指定容器网络模式;
  • –add-host=[]:在容器内添加一个主机名到IP地址的映射关系;
  • –device=[]:映射物理机上的设备到容器内;
  • -e:指定容器内的变量环境;
  • –ip="": 指定容器的ip v4 地址;
  • –ip6="":指定容器的ip v6 地址;
  • –link:连接到其他容器;
  • –name:容器的别名;
  1. 启动容器
    启动容器使用 start 命令,语法如下:
docker [container] start

例如启动刚才我们创建的ubuntu容器,容器ID为 b58a44432c7b

docker start b58a44432c7b

输出结果如图:
e9stXj.png

  1. 新建同时启动容器
    新建容器需要用到 run 命令,语法格式如下:
docker [container] run

例如我们运行一个新ubuntu16.04 容器,并将名称命名为 new_ubuntu

docker run --name new_ubuntu ubuntu /bin/echo '你好'

执行结果如下图:
e92gTs.png

执行 run 命令会在后台执行如下操作:

  • 检查本地是否存在指定镜像,不存在就从镜像仓库下载;
  • 利用镜像创建一个容器,并启动容器;
  • 分配一个文件系统给容器,并在只读镜像层外面挂载一层可读写层;
  • 从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中;
  • 从网桥地址池配置一个IP地址给容器;
  • 执行用户指定的应用程序;
  • 执行完毕后容器终止。

注1:可以使用 docker container wait container命令来等待容器退出和查看退出的返回结果

注2:某些情况下,执行 run 命令是无法正常运行,导致容器直接退出,这个时候我们可以查看推出的错误代码,下面列出常见的几种错误代码:

代码说明
125docker daemon 执行错误
126所指定的命令无法执行
127无法找到容器内的命令
  1. 进入守护状态
    在实际开发中需要容器一直运行着,这时我们可以在 run 命令后面加上 -d 参数来实现容器的后台运行,也就是进入守护状态。例如我们创建并运行ubuntu16.04容器,并将容器一直运行,可以这么做:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done;"

运行命令后结果如下

e95QfA.png

  1. 查看容器输出
    有时我们需要查看容器内部输出的信息,这时我们就可以使用 logs 命令查看,语法如下:
docker [container] logs

这个命令常用的参数如下:

  • -details:打印详细信息;
  • -f, -follow:持续输出;
  • -since:输出从指定时间点开始的日志;
  • -tail:输出最近的日志;
  • -t, -timestamps:显示信息时间戳;
  • -until:输出指定事件之前的日志。

例如查看刚才创建的ubuntu16.04的容器的日志:

docker logs b58a44432c7b
  1. 重启容器
    当一个容器处于运行状态,如果要重启容器需要用到 restart 命令 ,语法格式如下:
docker [container] restart

例如重启刚才创建的ubuntu16.04 容器,可以这么做:

docker restart b58a44432c7b

执行结果如下:
e97tvn.png

三、停止容器
  1. 暂停容器
    暂停容器一般情况下会用于容器中的应用出现故障的情况下,这时可以使用 pause 命令,语法如下:
docker [container] pause

例如暂停刚才创建的ubuntu16.04 这个容器,可以这么做:

docker pause b58a44432c7b

e9HowV.png

  1. 终止容器
    终止容器可以使用 stop 命令,命令语法为:
docker [container] stop [-t=10]

我们将刚才创建的ubuntu16.04 容器在20秒后彻底终止掉,可以这么做:

docker stop -t=20 b58a44432c7b

执行结果如下:
e9OLAx.png

四、进入容器

进入容器docker 官方推荐使用 attachexec 命令

  1. attach
    该命令是docker 自带的命令,语法格式如下:
docker [container] attach

常用参数有如下几个:

  • –detach-keys[=[]]:指定推出attach 模式的快捷键,默认是 ctrl+p ctrl+q;
  • –no-stdim=true|false:是否关闭标志输入,默认是false;
  • –sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认是true。

我们进入ubuntu16.04容器:

docker attach --no-stdin b58a44432c7b

运行结果如下:

e9jUW8.png

  1. exec
    该命令是docker最新支持的命令,因为 attach 命令在多窗口的情况下会出现所有窗口同步显示,当某个窗口阻塞时,其他窗口无法使用,因此 exec 命令出现了。该命令的语法为:
docker [container] exce

该命令参数有如下几个:

  • -d, --detach:在容器中后台执行命令;
  • –detach-keys:指定将容器切换回后台的案件;
  • -e, --env:设置环境变量;
  • -i, --interactive=true|fale:打开标准输入命令,默认值为false;
  • –privileged=true|false:是否以最高权限执行命令,默认值为false;
  • -t, --tty=true|false:是否开启伪终端,默认值为false;
  • -u, --user:执行命令的用户名或ID。

我们进入刚才创建的ubuntu16.04:

docker exec -it b58a44432c7b /bin/bash

运行结果如下:
eCpqMT.png

四、删除容器

删除命令比较简单,可以使用 rm 命令,命令语法如下:

docker [container] rm

rm 命令主要参数如下:

  • -f, --force:是否强强行终止并删除一个正在运行的容器,默认值false;
  • -l, --link:是否删除容器链接,保留容器,默认值为false;
  • -v,–volumes:是否删除容器挂在的数据卷,默认值为false;

我们这里删除正在运行的ubuntu16.04 容器:

docker rm -f b58a44432c7b

执行结果如下:
eC9X1P.png

注:强行删除一个正在运行中的容器,docker 会先发送SIGKILL给容器,终止容器运行,然后强行删除。

五、容器导入导出

当我们将一个容器从一个地方迁移到另一个地方往往需要导入导出。

  1. 导出容器
    使用 export 命令,命令格式为:
docker [container] -o export

-o 表示要到将容器导出的位置

例如将ubuntu16.04 容器导出到 /etc/test/ub.tar

docker export -o /etc/test/test.tar 0daa01b513c6

执行结果如图:
eCikLT.png

  1. 导入容器
    使用 import 命令导入容器,命令格式为:
docker [container] import -c

-c 代表容器tar文件的位置

下面我们导入刚才导出的容器:

docker import /etc/test/test.tar

运行结果如下:
eCFrg1.png

六、查看容器
  1. 查看所有容器
    查看所有容器可以使用 ps 命令,该命令经常使用,命令语法如下:
docker [container] ps [-a]

-a 代表查看所有容器,如果不加该参数,则代表之查看运行中的容器。

我们来查看一下所有的容器的命令:

docker ps -a

运行结果如下:
eCA1O0.png

  1. 查看详情
    查看详情使用 inspect 命令,命令语法如下:
docker container inspect

现在查看ubuntu16.04 容器的详情:

docker container inspect 0daa01b513c6

执行结果如下:

eCVvwV.png

  1. 查看进程
    有时我们需要确定容器内应用是否在运行,这时我们可以使用查看进程命令 top ,语法如下:
docker  [container] top

例如我们查看容器 ubuntu16.04 中的进程信息:

docker top 08a3ebe39b2e

eCePN8.png

  1. 查看统计信息
    查看统计信息使用 stats 命令,利用该命令可以查看CUP、内存、存储和网络等的使用情况,语法如下:
docker [container] stats

该命令常用参数如下:

  • -a -all:输出全部统计系信息;
  • -format:格式化信息输出;
  • -no-stream:不持续输出;
  • -no-trunc:不截断输出信息。

统计ubuntu16.04 的资源统计信息:

docker stats 08a3ebe39b2e

执行结果如下:
eCndpD.png
3764046492)]

  1. 查看统计信息
    查看统计信息使用 stats 命令,利用该命令可以查看CUP、内存、存储和网络等的使用情况,语法如下:
docker [container] stats

该命令常用参数如下:

  • -a -all:输出全部统计系信息;
  • -format:格式化信息输出;
  • -no-stream:不持续输出;
  • -no-trunc:不截断输出信息。

统计ubuntu16.04 的资源统计信息:

docker stats 08a3ebe39b2e

执行结果如下:
[外链图片转存中…(img-37m1XXMn-1563764046493)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker容器是一种轻量级、可移植的虚拟化技术,用于在操作系统级别隔离应用程序和其依赖的运行环境。通过使用Docker容器,可以将应用程序及其所有依赖项打包到一个独立的、可移植的容器中,然后在任何支持Docker的环境中运行。 以下是一些常见的Docker容器相关概念和工具: 1. Docker镜像(Docker Image):Docker镜像是一个只读的模板,包含了运行应用程序所需的所有文件和依赖项。可以通过Docker镜像创建Docker容器。 2. Docker容器Docker Container):Docker容器Docker镜像的运行实例。每个Docker容器都是相互隔离的,具有自己的文件系统、进程空间和网络接口。 3. Docker引擎(Docker Engine):Docker引擎是Docker的核心组件,负责管理和运行Docker容器。它包括了一个守护进程(dockerd)和一组命令行工具(docker命令)。 4. Docker Compose:Docker Compose是一个用于定义和管理多个Docker容器的工具。通过编写一个YAML文件来描述应用程序的各个组件及其依赖关系,然后使用docker-compose命令来启动、停止和管理这些容器。 5. Kubernetes:Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它可以与Docker结合使用,提供了更高级的容器编排和管理功能。 6. Docker Hub:Docker Hub是一个公共的Docker镜像仓库,可以从中获取各种预构建的Docker镜像。同时,也可以将自己构建的镜像推送到Docker Hub上进行分享和存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵叔哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值