Docker容器(三)
一、创建容器
容器是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容器(三)的更多相关文章
- 初步了解Docker容器(三)
目录 一.初步了解 1.docker run运行容器 2.docker images查看镜像 3.docker ps查看容器 4.查看其Dockerfile文件 二.Docker 知识问答 小结 一. ...
- 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信. IP 通信 从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡. 满足这 ...
- Docker容器镜像瘦身的三个小窍门(转)
[转自:http://dockone.io/article/8174] 在构建Docker容器时,我们应尽可能减小镜像的大小.使用共享层的镜像尺寸越小,其传输和部署速度越快. 不过在每个RUN语句都会 ...
- Docker容器互访三种方式
我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢.下面介绍三种方法解决容器互访问题. 方式一.虚拟ip访问 安装docker时,docker会默认创建一个内 ...
- Docker 系列三(容器管理).
一.运行容器 1.基于镜像新建一个容器并启动 : tomcat:8.0 -i:交互式操作 -t:终端 -rm:容器退出后随之将其删除,可以避免浪费空间 -p :端口映射 -d :容器在后台运行 指明了 ...
- 【Docker】第三篇 Docker容器管理
一.Docker容器概述: 简单理解容器是镜像的一个实例. 镜像是静态的只读文件,而容器的运行需要可写文件层. 二.创建容器 [root@web130 ~]# docker create -it ub ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
一.前言 上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来. 如果该应用继续引入mysql.redis.job等若干服务,到时候发布一次得工作量之大 ...
- Docker(三):利用Kubernetes实现容器的弹性伸缩
一.前言 前两章有的介绍docker与Kubernetes.docker是项目运行的容器,Kubernetes则是随着微服务架构的演变docker容器增多而进行其编排的重要工具.Kubernetes不 ...
随机推荐
- 2081.09.22 Kuma(非旋treap)
描述 有N张卡片,编号从0到n-1, 刚开始从0到n-1按顺序排好. 现有一个操作, 对于p. l,表示从第p张卡片之后的l张卡片拿到 最前面. 例如n=7的时候, 刚开始卡片序列为0 1 2 3 4 ...
- 2018.07.22 bzoj3613: [Heoi2014]南园满地堆轻絮(逆序对结论题)
传送门 做这道题有一个显然的结论,就是要使这个数列单调不减,就要使所有逆序对保证单调不减,也就是求出所有逆序对的最大差值,然后除以2然后就没了. 代码如下: #include<bits/stdc ...
- (KMP扩展 利用循环节来计算) Cyclic Nacklace -- hdu -- 3746
http://acm.hdu.edu.cn/showproblem.php?pid=3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others ...
- (最小生成树 )还是畅通工程 -- HDU--1233
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- Hibernate和spring中的session总结
1.this.getSession() 是org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一个方法,它可以从当前事务或 ...
- java实现WC项目
个人项目:WC wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单 ...
- 好久不发帖,转一下公司技术美术独立完成的U3D模拟暗黑泰瑞尔翅膀物理运动效果
想入公司倍培养成为优秀的技术型美术,欢迎call我! Max制作翅膀模型部分 新建一个片面,模型给一些段数,赋予一张左右二方连续贴图. 加个FFD 4*4*4,并稍微拉出一点弧度. 将头尾的Alpha ...
- Android DalivkVM与JVM的比较
JVM 与 DalivkVM的区别 Android 为什么还有搞一个Dalivk虚拟机,不是已经就有Java虚拟机了吗,为什么还要专门搞一个Dalivk虚拟机呢? 答: 1.以前Java是Sun公司的 ...
- 挂载Linux云主机硬盘到本地计算机
现在移动硬盘已经是每个人的生活必需品了,当然网络也是我们生活的必需品,我们现在就是要用网络存储代替硬盘存储,当然再实际使用过程中需要考虑到以下两个问题: 网络延迟 云主机磁盘IO 以上两个关键 ...
- [ACM_数据结构] POJ2352 [树状数组稍微变形]
Description Astronomers often examine star maps where stars are represented by points on a plane and ...