一、创建容器

  容器是Docker另一个核心的概念,简单来说,容器是镜像的一个运行实例,所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层

1.1. 新建容器

  使用docker create命令来新建容器

[root@rsync131 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 5182e96772bf 6 weeks ago 200 MB
[root@rsync131 ~]# docker create centos
b9dd06b5dcba561b178b1892631cd318f0babd4a9a3f067761963a6ab61fe078
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9dd06b5dcba centos "/bin/bash" 9 seconds ago Created sleepy_sammet

1.2. 启动容器

  使用docker start命令来启动容器

[root@rsync131 ~]# docker start b9dd06b5dcba
b9dd06b5dcba
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9dd06b5dcba centos "/bin/bash" About a minute ago Exited (0) 4 seconds ago sleepy_sammet

  PS:不知道为什么我使用这样的方式是启动不了容器的,待解释

1.3. 新建并启动容器

  一般在创建容器的是我们不会使用上面的两步的方式来进行创建,有个更简单的方式就是在创建的时候直接启动

  使用docker run 命令,创建并启动容器

[root@rsync131 ~]# docker run -it -d --name test_centos centos
159a08c11fece853626516ab94b401464efd85d69c1f88706ec17a29178fee54
[root@rsync131 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 3 seconds ago Up 3 seconds test_centos docker run:死命令
-i:让容器的标准输入保持打开
-t:分配个伪终端
-d:守护状态运行
--name:指定容器名字参数
test_centos:容器名字
centos:镜像名或者镜像ID

  这里我们说一下docker run执行的时候都干了什么

    检查本地镜像是否存在,不存在则会自动去公有仓库去下载

    利用镜像创建容器,并启动容器

    分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层

    从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中

    从网桥的地址池配置一个IP给容器

    执行用户指定的应用程序

1.4. 查看容器运行日志

  使用命令docker logs 来查看日志

[root@rsync131 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 21 minutes ago Up 21 minutes test_centos
[root@rsync131 ~]# docker logs 159a08c11fec

二、终止容器

2.1. 终止容器

  使用docker stop 来终止正在运行的容器

语法格式:
docker stop 容器名 常用选项:
-t,--time[=10] : 10秒后发送终止信号

  使用docker kill 命令可以直接终止容器

  docker kill 命令会直接发送SIGKILL信号来强行终止容器

[root@rsync131 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 29 minutes ago Up 29 minutes test_centos
[root@rsync131 ~]# docker stop 159a08c11fec
[root@rsync131 ~]# docker kill 159a08c11fec

2.2. 查看终止的容器

  使用docker ps 只是可以查看正在运行的容器

  使用docker ps -a 则可以看到所有的容器包括正在运行的和已经终止的容器

[root@rsync131 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 30 minutes ago Up 30 minutes test_centos
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 30 minutes ago Up 30 minutes test_centos
b9dd06b5dcba centos "/bin/bash" 36 minutes ago Exited (0) 9 minutes ago sleepy_sammet

  

2.3. 启动和重启已经终止的容器

  已经终止的容器我们可以使用docker start 命令来启动

  也可以使用docker restart 命令将一个正在运行的容器先stop后start

[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 30 minutes ago Up 30 minutes test_centos
b9dd06b5dcba centos "/bin/bash" 36 minutes ago Exited (0) 9 minutes ago sleepy_sammet
[root@rsync131 ~]# docker start b9dd06b5dcba
b9dd06b5dcba
[root@rsync131 ~]# docker restart 159a08c11fec
159a08c11fec

  

三、进入容器

  在使用 -d 选项来运行容器的时候,容器会在后台运行,用户是无法看到容器的信息的,也无法进入操作

  这个时候如果我们要进入容器进行操作,应该怎么办呢?在docker 中进入docker中的方法有很多种,比如官方的attach和exec命令,以及第三方的nsenter工具(这个没有用过 最常用的还是exec)等

3.1. attach 命令

attach命令是docker自带的命令
语法格式:
docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER 支持的常用主要选项:
--detach-keys[=[]]:指定退出attach模式的快捷键序列,默认是CTRL+p CTRL-q
--no-stdin=true|false :是否关闭标准输入,默认true
--sig-proxy=true|false : 是否代理收到的系统信号给应用程序,默认是true
[root@rsync131 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 41 minutes ago Up 10 minutes test_centos
[root@rsync131 ~]# docker attach 159a08c11fec
[root@159a08c11fec /]#

PS:使用attach命令进入容器是很不方便的,就是这个命令只允许一个人使用容器,在开多个窗口同时用attach进入容器的时候,窗口执行的命令会同步,当一个窗口阻塞了,其他窗口就不能玩了,所有不用这个命令,太坑了

3.2. exec 命令

  为了解决上面的坑,docker在1.3.0版本提供了exec这个命令解决了attach命令的坑

语法格式:
docker exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG....] 主要选项参数:
-i, --interactive=true|false: 打开标准输入接收用户输入的命令,默认false
--privileged=true|false :是否给执行命令以高权限,默认false
-t,--tty=true|false:分配伪终端 默认false
-u,--user="" : 执行命令的用户或者ID
[root@rsync131 ~]# docker exec -it 159a08c11fec bash
[root@159a08c11fec /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@159a08c11fec /]#

  可以看到,一个bash终端打开了,在不影响容器内其他应用的前提下,用户可以很容易的与容器进行交互

PS:通过制定 -it 参数保持标准输入,并且分配个伪终端,是很推荐的方式哦

四、删除容器

  使用docker rm 命令来删除处于终止或者退出状态的容器

语法格式:
docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER.....] 主要选项参数:
-f,--force=false:是否强行终止并删除运行中的容器
-l,--link=false:删除容器的链接,但是保留容器
-v,--volumes=false:删除容器挂载的数据卷
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 2 hours ago Up About an hour test_centos
b9dd06b5dcba centos "/bin/bash" 2 hours ago Exited (0) About an hour ago sleepy_sammet
[root@rsync131 ~]# docker rm b9dd06b5dcba
b9dd06b5dcba
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 2 hours ago Up About an hour test_centos

  默认情况下,docker rm命令只能删除已经终止的容器,不能删除运行中的容器,想要删除运行中的容器可以使用 -f 参数,来强制的删除

五、容器的导入与导出

  在做容器迁移的时候我们就要先把容器导出,然后在导入到其他的地方

5.1. 导出容器

  使用命令docker export 命令来导出容器

语法格式:
docker export [-o|--output[=""]] CONTAINER 主要选项参数:
-o,--output:指定导出的tar文件名
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159a08c11fec centos "/bin/bash" 2 hours ago Up About an hour test_centos
[root@rsync131 ~]# docker export -o centos_test.tar.gz 159a08c11fec
或者
[root@rsync131 ~]# docker export 159a08c11fec > centos_test.tar.gz
[root@rsync131 ~]# ll
总用量 273536
-rw-------. 1 root root 1513 8月 20 20:25 anaconda-ks.cfg
-rw------- 1 root root 280093696 9月 23 11:51 centos_test.tar.gz

5.2. 导入容器

  使用命令docker import 导入变成镜像

语法格式:
docker import [-c|--change[=[]]] [-m|--messge[=MESSAGE]] file|URL|- [REPOSITORY[:TAG]] 用户可以通过-c 选项在导入的同时执行对容器进行修改的Dockerfile指令
[root@rsync131 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@rsync131 ~]# ll
总用量 273536
-rw-------. 1 root root 1513 8月 20 20:25 anaconda-ks.cfg
-rw-r--r-- 1 root root 280093696 9月 23 11:52 centos_test.tar.gz
[root@rsync131 ~]# docker import centos_test.tar.gz centos:1.0
sha256:f54ee7febeda5d3d8af11cc4756c1e6661feb84b2af6280654ef07ddf8bdead2
[root@rsync131 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1.0 f54ee7febeda 5 seconds ago 271 MB
docker.io/centos latest 5182e96772bf 6 weeks ago 200 MB

  

Docker容器(三)的更多相关文章

  1. 初步了解Docker容器(三)

    目录 一.初步了解 1.docker run运行容器 2.docker images查看镜像 3.docker ps查看容器 4.查看其Dockerfile文件 二.Docker 知识问答 小结 一. ...

  2. 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)

    容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信. IP 通信 从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡. 满足这 ...

  3. Docker容器镜像瘦身的三个小窍门(转)

    [转自:http://dockone.io/article/8174] 在构建Docker容器时,我们应尽可能减小镜像的大小.使用共享层的镜像尺寸越小,其传输和部署速度越快. 不过在每个RUN语句都会 ...

  4. Docker容器互访三种方式

    我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢.下面介绍三种方法解决容器互访问题. 方式一.虚拟ip访问 安装docker时,docker会默认创建一个内 ...

  5. Docker 系列三(容器管理).

    一.运行容器 1.基于镜像新建一个容器并启动 : tomcat:8.0 -i:交互式操作 -t:终端 -rm:容器退出后随之将其删除,可以避免浪费空间 -p :端口映射 -d :容器在后台运行 指明了 ...

  6. 【Docker】第三篇 Docker容器管理

    一.Docker容器概述: 简单理解容器是镜像的一个实例. 镜像是静态的只读文件,而容器的运行需要可写文件层. 二.创建容器 [root@web130 ~]# docker create -it ub ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  8. AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排

    一.前言 上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来. 如果该应用继续引入mysql.redis.job等若干服务,到时候发布一次得工作量之大 ...

  9. Docker(三):利用Kubernetes实现容器的弹性伸缩

    一.前言 前两章有的介绍docker与Kubernetes.docker是项目运行的容器,Kubernetes则是随着微服务架构的演变docker容器增多而进行其编排的重要工具.Kubernetes不 ...

随机推荐

  1. Devexpress VCL Build v2014 vol 14.2.6 发布

    终于支持XE8 了.需要这么长时间吗? New Major Features in 14.2 What's New in VCL Products 14.2 Feature Highlights To ...

  2. 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)

    传送门 支持区间加w(i−ql+1)2" role="presentation" style="position: relative;">w(i ...

  3. xampp环境 安装 用法 composer

    准备工作 1.打开PHP配置文件E:\xampp\php\php.ini确认以下模块已开启(移除前面的分号). extension=php_openssl.dll, extension=php_cur ...

  4. MySQL 的IFNULL()、ISNULL()和NULLIF()函数

    参考与http://blog.csdn.net/xingyu0806/article/details/52080962 IFNULL(expr1,expr2) 假如expr1不为NULL,则 IFNU ...

  5. UVa 12230 && HDU 3232 Crossing Rivers (数学期望水题)

    题意:你要从A到B去上班,然而这中间有n条河,距离为d.给定这n条河离A的距离p,长度L,和船的移动速度v,求从A到B的时间的数学期望. 并且假设出门前每条船的位置是随机的,如果不是在端点,方向也是不 ...

  6. Learning ROS for Robotics Programming - Second Edition(《ROS机器人编程学习-第二版》)

    Learning ROS for Robotics Programming - Second Edition <ROS机器人编程学习-第二版> ----Your one-stop guid ...

  7. 20145209 2016-2017-2 《Java程序设计》第6周学习总结

    20145209 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 4.1 Y86指令集体系结构 •有8个程序寄存器:%eax.%ecx.%edx.%ebx.% ...

  8. hdu 5025 bfs+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5025 N*N矩阵 M个钥匙 K起点,T终点,S点需多花费1点且只需要一次,1-9表示9把钥匙,只有当前有I号钥匙 ...

  9. Dreamweaver杀手!Illustrator终结者?Flash的末日?图形图像设计程序之网页版

    Dreamweaver杀手!Illustrator终结者?Flash的末日?图形图像设计程序之网页版 阅读:  评论:  作者:Rybby  日期:  来源:rybby.com Adobe 家的 Il ...

  10. MySQL中不允许使用列别名作为查询条件

    在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件.比如有下面一个表: select     ID,     title,     concept,     conceptLength,   ...