Docker中,容器是独立运行的一个或一组应用,以及应用运行的环境;对应传统的虚拟化,虚拟机可以理解为模拟操作系统和运行在上面的应用。

启动容器

启动容器一般有两种方式,一种是新建容器并启动,一种是将终止状态的容器重新启动,Docker容器非常的轻量级,能够很好的支持用户随时删除和创建容器。

新建并启动容器

docker使用docker run命令来新建并启动容器,如:

例如如下命令表示输出一个HelloWorld,之后终止容器。

[root@legaoyun10514 ~]# docker run centos:7.2.1511 bin/echo 'helloworld'

helloworld

下面是新建并启动一个容器,包含bash终端,允许用户进行交互

[root@legaoyun10514 ~]# docker run -i -t centos:7.2.1511 bin/bash

[root@b3dbe17e8ce4 /]# uname -a

Linux b3dbe17e8ce4 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[root@b3dbe17e8ce4 /]# cat /proc/version

Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018

[root@b3dbe17e8ce4 /]#

其中-i表示让容器的标准输入保持打开,-t表示让docker分配一个伪终端给容器,并绑定到容器的标准输入上

docker run命令的执行步骤是:

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

启动已终止容器

可以利用docker start命令,将一个已终止容器启动运行。

容器的核心是所执行的应用程序,所需要的资源都是应用程序所必须的,除此之外没有其他资源占用,可以在伪终端中利用top或者ps命令查看容器中的进程信息。

[root@b3dbe17e8ce4 /]# ps

  PID TTY          TIME CMD

    1 pts/0    00:00:00 bash

   20 pts/0    00:00:00 ps

可以看到容器中只运行了bash应用,所以docker的虚拟化是非常轻量级的,对资源的利用率非常高。

使用docker ps命令可以查看docker容器列表,其中

默认,不加参数表示,所有启动状态的容器

[root@legaoyun10514 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                      PORTS               NAMES

b3dbe17e8ce4        centos:7.2.1511     "bin/bash"              21 minutes ago      Up 9 minutes                                    blissful_proskuriakova

c8485a2e06bd        centos:7.2.1511     "bin/bash"              24 minutes ago     

使用 docker start启动已终止容器

[root@legaoyun10514 ~]# docker start c8485a2e06bd

c8485a2e06bd

后台(background)运行

一般情况下,需要docker容器在后台运行,而不是将容器的命令执行结果输出到宿主主机,后台运行docker容器可以通过-d参数来实现。

执行下面的命令,使用-d,和不适用-d的效果。

[root@legaoyun10514 ~]# docker run centos:7.2.1511 /bin/sh -c 'for i in `seq 100`; do echo $i; sleep 1; done'

1

2

3

4

5

… …

[root@legaoyun10514 ~]# docker run -d centos:7.2.1511 /bin/sh -c 'for i in `seq 100`; do echo $i; sleep 1;

48df4126c4a42fb92154812528697ce7438f28f00e669a95e8f4095958736b5d

后台运行的容器,可以通过docker logs [容器id]命令来查看容器命令的执行结果,如:

[root@legaoyun10514 ~]# docker logs 48df4126c4a4

1

2

3

4

… …

终止容器

使用docker stop来终止一个运行中的容器,如:

[root@legaoyun10514 ~]# docker stop b3dbe17e8ce4

b3dbe17e8ce4

当docker容器中的应用程序终结时,docker容器也会终结,如只启动/bin/bash终端的容器,当exit或者ctrl+d终结时,容器终止。

docker restart可以重新启动一个容器

进入容器

使用docker run -d容器启动的docker容器,可以使用docker attach命令或者nsenter命令进入容器,进行操作。

attach命令

[root@legaoyun10514 lot]# docker run -itd centos:7.2.1511

f37a4155b59a5814e80f05c6f69876b8c4931bc4d5478084698b14c314ad32ad

[root@legaoyun10514 lot]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

f37a4155b59a        centos:7.2.1511     "/bin/bash"         4 seconds ago       Up 3 seconds                            relaxed_goldwasser

[root@legaoyun10514 lot]# docker attach relaxed_goldwasser

[root@f37a4155b59a /]# uname -a

Linux f37a4155b59a 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

attache命令使用时是有弊端的,当多个终端同事attach到一个容器中的时候,所有的窗口都会同步显示,当某个窗口的应用阻塞是,所有的终端也都会阻塞。

nsenter命令

通过-d参数启动容器后,根据容器id查询容器信息,容器信息中包含容器的进程ID

[root@legaoyun10514 lot]# docker inspect ebc3700aa8b1 | grep Pid

            "Pid": 28210,

            "PidMode": "",

            "PidsLimit": 0

通过这个进程id就可以连接到容器中去

[root@legaoyun10514 lot]# nsenter --target 28210 --mount --uts --ipc --net --pid

[root@ebc3700aa8b1 /]#

导入导出容器

导出容器

使用docker export命令导出容器到本地文件系统,导出的文件称为容器的快照

[root@legaoyun10514 lot]# docker export 6e8941b320c4 > centos.tar

[root@legaoyun10514 lot]# ls

centos.tar

[root@legaoyun10514 lot]#

导入容器快照

使用docker import命令导入本地快照为镜像,并制定镜像标签

[root@legaoyun10514 lot]# docker import - testimport/centos < centos.tar

sha256:55ce6d23ccf360444a1c5e7d610ac03b401281544c4a6b9c21d9866d528b628d

[root@legaoyun10514 lot]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

testimport/centos   latest              55ce6d23ccf3        7 seconds ago       195MB

使用docker load,docker import,docker save,docker load命令的区别:

  • docker import可以重新指定镜像的名字,docker load不可以
  • docker export是保存容器的当前状态,会丢失历史数据和元数据
  • docker save用于持久化镜像,不会丢失历史数据和元数据
  • docker load用于导入镜像,不能指定镜像的名称

删除容器

可以使用docker rm来删除一个处于终止状态的容器,但是不能删除运行状态的容器,如

[root@legaoyun10514 lot]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

6e8941b320c4        centos:7.2.1511     "/bin/bash"         11 minutes ago      Up 11 minutes                                   zen_mirzakhani

ebc3700aa8b1        centos:7.2.1511     "/bin/bash"         21 minutes ago      Exited (0) 11 seconds ago                       eager_roentgen

[root@legaoyun10514 lot]# docker rm zen_mirzakhani

Error response from daemon: You cannot remove a running container 6e8941b320c4d8a833944888bf421b07deba49d6dc8cdac0293cc7f1d7e91895. Stop the container before attempting removal or force remove

[root@legaoyun10514 lot]# docker rm eager_roentgen

eager_roentgen

[root@legaoyun10514 lot]#

如果要删除运行状态的容器,需要使用docker rm -f 命令来删除

清理所有处于终止状态的容器

删除所有终止状态的容器

docker rm $(docker ps -a -q)

删除所有容器

docker rm -f $(docker ps -a -q)

(完)

Docker实践(三)容器相关推荐

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分+微序幕就此拉开之Docker(Docker概念:容器、镜像、仓库)、操作命令、Docker网络、分层、K8S<->Docker~整起

    架构知识+分+微序幕就此拉开之Docker 一.为什么要搞这个Docker,咱们为啥要学,盖房子? 二.Docker的镜像与容器 1.预备知识:虚拟(机).容器(化) 2.Docker.镜像.容器 3 ...

  2. Docker(三)之镜像与容器

    镜像与容器 镜像和容器作为 Docker 里最基础的概念,我们很有必要了解 Docker 对它们的很多定义以及其他与它们有关的知识.在这一小节里,我们就专门针对镜像与容器两个概念展开,细致的梳理与这两 ...

  3. 平安容器云平台 Padis--传统金融企业的 Docker 实践

    https://blog.csdn.net/u010646653/article/details/53099016 基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安 ...

  4. Docker(三):镜像导入与导出、保存与加载、在Docker容器中安装软件

    相关阅读: Docker(一):Docker的安装与常用命令 Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit Docker(三):Docker镜像导入与导 ...

  5. 容器-Docker《三》容器管理

    容器-Docker<三>容器管理 下载镜像只是相当于将软件下载下来安装好,但是并不代表把它运行起来,类似于root@ubuntu2204:~# apt install nginx = do ...

  6. Docker(三)- 从镜像运行启动容器

    文章目录 一.从镜像运行启动容器 二.容器启动后运行的命令 三.`ENTRYPOINT` 和 `CMD` 四.启动容器时覆盖 `ENTRYPOINT` 和 `CMD` 五.`-d` 后台运行 六.`d ...

  7. Docker实践7:容器与主机拷贝数据

    在Docker实践2中使用-v参数将主机与容器中相关目录联系在一起(挂载),所以我们可以用这个通道将想要互相拷贝的数据放入其中,这样就可以用cp命令来复制文件了. 除了这个办法,我们还可以分别用不同的 ...

  8. Docker 第三章 容器

    操作 Docker 容器 容器是docker 的核心概念,容器是一个或一组独立运行的应用,以及它们的运行环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上 ...

  9. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...

最新文章

  1. django -- url 的 name 属性
  2. js判断输入是否为正整数、浮点数等数字的函数代码
  3. Xamarin 2017.11.9更新
  4. HDOJ 2049 不容易系列之(4)——考新郎
  5. 云炬Android开发笔记 11主界面-商品分类开发(多布局Section RecyclerView)
  6. React开发(117):ant design 新方式
  7. 信息学奥赛一本通 1160:倒序数
  8. Python 的几种推导式
  9. 测试可变字符序列stringBuilder
  10. windows 域名+虚拟目录 (php)
  11. 实战爬虫:python爬虫之爬取虎扑湖人专区新闻中科比相关新闻
  12. nginx之头部变量x_forwarded_for
  13. python教程视频ajax_Ajax异步请求实战案例讲解视频教程
  14. 查找计算机的dos,dos命令dir查找文件的用法及实例
  15. 直播丨上海传智播客-黑马程序员/黑马设计师-封箱之作-“大神季”
  16. Unity模拟榴弹运动轨迹
  17. wpf 点击按钮弹出新对话框_WPF学习弹出新窗口
  18. 三十一、利用微信搜索抓取公众号文章
  19. Cesium.js解析第一篇 Cartesian3
  20. Linux进程和轻量级进程(LWP)

热门文章

  1. mysql备份恢复数据库据/表
  2. 获取请求消息行信息案例代码
  3. 训练代码_无需一行代码,完成模型训练和部署,这个AI工具开始公测
  4. anyview下载java,下载AnyviewMobile Games Java - 596763 - ebook txt Anyview | mobile9
  5. linux 取消nologin_Linux中nologin的应用 转
  6. mysql server8 jdbc_mysql8.0 jdbc连接注意事项
  7. 中根遍历二叉查找树所得序列一定是有序序列_数据结构考研学习笔记(九)树、森林...
  8. 喜欢初音未来的桌面壁纸看过来
  9. 适合节日促销的海报设计PSD分层模板|夜晚烟花,浓浓喜庆氛围
  10. 相比JPG,PNG矢量图片才是设计师的首选素材