容器是一个打包了应用和服务的环境,是一个轻量级的虚拟机,每一个容器都由一组特定的应用和必要的依赖库组成。

容器的管理操作

容器常见的命令:查看、创建、启动、终止和删除

创建容器

docker create

docker run

二者的区别在于docker create创建的容器处于停止状态,docker run 创建的容器处于启动状态

用docker create创建一个停止状态的容器

[root@docker ~]# docker create centos:6.7
Unable to find image 'centos:6.7' locally
6.7: Pulling from centos 3690474eb5b4: Pull complete
3624df1f7cf0: Pull complete
505dff91e9c8: Pull complete
2352e8cfa843: Pull complete
a8b4df3be85c: Pull complete
Digest: sha256:1fbc7ab8bd38dcb1c5b9608ac5358dbc1d3718b8e85c69bf5224d72e5f6d2e22
Status: Downloaded newer image for centos:6.7
a4cca9f1f77695ef11912963ec60b15e2fb4663c50792583c2e4fe2c375a35b6
[root@docker ~]#
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4cca9f1f776 centos:6.7 "/bin/bash" seconds ago clever_pasteur
[root@docker ~]#

创建成功后,Docker会返回容器的ID,如上述中的:a4cca9f1f77695ef11912963ec60b15e2fb4663c50792583c2e4fe2c375a35b6。ID是可以唯一标识一个容器,每个容器的ID都是唯一的。

指定系统直接加centos,如果想要设置版本则需要centos:6.7

提示:Unable to find image 'centos:6.7' locally,则是因为当执行docker run命令后,docker现在本地找指定的系统的镜像,如果找不到就会到共有的仓库Docker Hub中继续搜索,找到后下载并保存在本地

容器的文件系统是在只读的镜像文件上增加一层可读写的文件层,这样可以保证镜像不变而只记录改变的数据,这对容器的共享和传输都非常有利。

docker ps 可以查看正在运行的容器

docker ps –a 可以查看所有容器

docker run 相当于docker create 然后在使用docker start启动容器

使用docker run 命令可以创建两种类型的容器:

后台型、交互型容器

交互型容器:运行在前台,通常会指定有交互的控制台,给容器输入,也可以得到容器的输出。创建该容器的终端被关闭,在容器内部使用exit命令或者调用了doker stop/docker kill命令后,容器会变成停止状态

后台型容器:运行在后台,创建启动之后就与终端无关。即便终端关闭了,该后台容器也依然存在,只有调用docker stop 或docker kill命令后,容器会变成停止状态

创建交互型容器

[root@docker ~]# docker run -i -t --name=inspect_shell centos:6.7 /bin/bash
[root@285ee5d386cf /]#

参数说明:

1、-i用于打开容器的标准输入(STDIN)

2、-t表示建立一个命令行终端

上述的两个标志就表示创建了一个交互shell,是创建交互容器的基本设置

3、--name表示为容器指定一个名字,如果不指定系统将随机产生一个名字

4、centos表示要使用的镜像,:6.7表示要用的linux版本

这样创建的交互容器通过ctrl+d或者exit命令退出该容器

容器只是停止并没有销毁,只是不再是运行状态

创建后台型容器

通过参数-d 既可以实现创建后台型容器

[root@docker ~]# docker run --name daemon_while -d centos:6.7 /bin/bash -c "while true;do echo hello world;sleep 1;done"
35872eb5410af88fca93ab37aa38b79dfea1badbac91c90907bbbfa01e61f24e
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35872eb5410a centos:6.7 "/bin/bash -c 'while 15 seconds ago Up 14 seconds daemon_while
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35872eb5410a centos:6.7 "/bin/bash -c 'while 17 seconds ago Up 16 seconds daemon_while
285ee5d386cf centos:6.7 "/bin/bash" minutes ago Exited () About a minute ago inspect_shell
a4cca9f1f776 centos:6.7 "/bin/bash" About an hour ago clever_pasteur
[root@docker ~]#

这里也可以验证docker ps 以及docker ps –a的区别

docker ps 显示的为正在运行的容器

docker ps –a 显示所有的容器

docker ps的其他参数:

docker ps –l 显示最后创建的容器

docker ps –n=x显示最后创建的x个容器

docker ps –a –q 显示所有的容器名并只显示id

关于docker ps命令输入解释:

  1. CONTAINER ID :唯一标识容器的ID,是一个64位的十六进制数
  2. IMAGE:创建容器时使用的镜像
  3. COMMAND:容器最后运行的命令
  4. CREATED:创建容器的时间
  5. STATUS:容器的状态。如果是运行状态,则类似Up 16 seconds

如果是停止状态,则是类似Exited (0) About a minute ago,其中0是容器退出的错误代码,0为正常退出,其他数字则表示容器内部出现错误

  1. PORTS:对外开放的端口
  2. NAMES:容器名。和容器ID一样都可以唯一标识一个容器,同一台宿主主机上不允许有相同的容器存在,否则会冲突

启动容器

docker start 容器名/ID

容器运行过程中,总会有各种问题导致容器异常退出。默认情况下容器是不会重启的,为了让容器能够自动重启需要用—restart参数

--restart标志会检查容器的退出码,并决定是否需要重启

--restart=always:表示不管返回什么代码,Docker都会尝试重启容器

--restart=on-failure:5 :表示接收到一个非0的返回代码时最多可以重启5次

终止容器

交互型容器退出容器的方法:

ctrl+d

exit

交互型容器以及后台型容器都可以通过stop命令退出

docker stop 容器名/ID

强制退出:docker kill

删除容器

删除容器:docker rm 容器名 注意:这个命令无法删除正在运行的容器

强制删除:docker rm –f 容器名

如果想要删除所有的容器,可以:

docker rm `docker ps –a -q`

容器内信息获取和命令执行

依附容器

先启动交互型容器:docker start 容器名

然后从宿主机进入到容器中

docker attach 容器名

注意:这里执行过docker attach 容器名 后,需要多按一次回车才会进入到容器的shell交互界面

这里切记:attach是无法进入到后台型容器的

后台型容器本身就不接受用户交互输入

查看容器日志

docker logs –f 容器名 可以查看容器的日志

参数:

-tail 可以查看输入日志的行数

-f 将只需输入最新的日志

查看容器进程

docker top 容器名 可以查看容器中的进程

查看容器信息

docker inspect用于查看容器的配置信息,包含容器名、环境变量、运行命令,主机配置、网络配置合数据卷配置等

[root@docker ~]# docker inspect centos
[
{
"Id": "18a2b5dd12c14efb63e27ad2af35240ee4eb27bbe40fe4ebfbdeb81e220df358",
"Created": "2016-12-05T08:24:26.525587402Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": ,
"ExitCode": ,
"Error": "",
"StartedAt": "2016-12-05T08:25:19.214428588Z",
"FinishedAt": "2016-12-05T08:25:06.506871439Z"
},
"Image": "a8b4df3be85c08ad6b8331c700fc6d2f389795f6ad64a6b139775ff6592d5fa2",
"NetworkSettings": {
"Bridge": "",
"EndpointID": "51415b7ddc2d36af63108f39d51afcc46736cbf9e7659daa4813be6f389896e3",
"Gateway": "172.17.42.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": ,
"HairpinMode": false,
"IPAddress": "172.17.0.7",
"IPPrefixLen": ,
"IPv6Gateway": "",
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": ,
"MacAddress": "02:42:ac:11:00:07",
"NetworkID": "c5fda424aba3566c01770cb53d21e94269c431daeb879936f52a236d2541d82d",
"PortMapping": null,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/18a2b5dd12c1",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null
},
"ResolvConfPath": "/var/lib/docker/containers/18a2b5dd12c14efb63e27ad2af35240ee4eb27bbe40fe4ebfbdeb81e220df358/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/18a2b5dd12c14efb63e27ad2af35240ee4eb27bbe40fe4ebfbdeb81e220df358/hostname",
"HostsPath": "/var/lib/docker/containers/18a2b5dd12c14efb63e27ad2af35240ee4eb27bbe40fe4ebfbdeb81e220df358/hosts",
"LogPath": "/var/lib/docker/containers/18a2b5dd12c14efb63e27ad2af35240ee4eb27bbe40fe4ebfbdeb81e220df358/18a2b5dd12c14efb63e27ad2af35240ee4eb27bbe40fe4ebfbdeb81e220df358-json.log",
"Name": "/centos",
"RestartCount": ,
"Driver": "devicemapper",
"ExecDriver": "native-0.2",
"MountLabel": "",
"ProcessLabel": "",
"Volumes": {},
"VolumesRW": {},
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LxcConf": [],
"Memory": ,
"MemorySwap": ,
"CpuShares": ,
"CpuPeriod": ,
"CpusetCpus": "",
"CpusetMems": "",
"CpuQuota": ,
"BlkioWeight": ,
"OomKillDisable": false,
"Privileged": false,
"PortBindings": {},
"Links": null,
"PublishAllPorts": false,
"Dns": null,
"DnsSearch": null,
"ExtraHosts": null,
"VolumesFrom": null,
"Devices": [],
"NetworkMode": "bridge",
"IpcMode": "",
"PidMode": "",
"UTSMode": "",
"CapAdd": null,
"CapDrop": null,
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount":
},
"SecurityOpt": null,
"ReadonlyRootfs": false,
"Ulimits": null,
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"CgroupParent": ""
},
"Config": {
"Hostname": "18a2b5dd12c1",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"PortSpecs": null,
"ExposedPorts": null,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "centos:6.7",
"Volumes": null,
"VolumeDriver": "",
"WorkingDir": "",
"Entrypoint": null,
"NetworkDisabled": false,
"MacAddress": "",
"OnBuild": null,
"Labels": {
"License": "GPLv2",
"Vendor": "CentOS"
}
}
}
]
[root@docker ~]#

容器内执行命令

[root@docker ~]# docker exec -d centos touch /home/fan.txt

通过docker attach centos进入容器可以查看创建的文件是否存在

如果想要交互型的执行命令可以通过

[root@docker ~]# docker exec -t -i centos /bin/bash

然后就可以交互性的执行命令

容器的导入和导出

Docker的导入和导出分别由import命令和export命令完成

导出

[root@docker ~]# docker export centos>my_centos.tar
[root@docker ~]# ls
anaconda-ks.cfg install.log install.log.syslog my_centos.tar
[root@docker ~]#

导入

[root@docker ~]# cat my_centos.tar|docker import - imported:centos
4ef3250d4123fea1bb6c01b2436479889f90b434cee23ac62aad7a75a2956fa5
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
imported centos 4ef3250d4123 seconds ago 190.6 MB
centos 6.7 a8b4df3be85c months ago 190.6 MB

res和tag分别表示生成的镜像和标记

同时可以通过网络导入镜像

docker import url res:tag

Docker的容器的更多相关文章

  1. 【转】深入 Docker:容器和镜像

    在本专栏往期的 Flux7 系列教程 里,我们已经简单地探讨了 Docker 的基本操作.而在那篇教程中,我们一直是简单地将容器当成是"正在运行的镜像",并没有深入地区分镜像和容器 ...

  2. 理解Docker单机容器网络

    在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...

  3. docker进入容器的方式

    通过docker创建守护运行(在使用-d参数时)的容器时,容器启动后会进入后台.用户无法看到容器中的信息.某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令.dock ...

  4. Docker与容器快速入门

    Docker之风席卷全球,但很多人觉得docker入门确实不太容易,其原因在于很多知识点上没准备好,在docker解决了什么问题.怎么解决的.用什么技术解决的都还没想清楚的时候就去探索docker组件 ...

  5. Docker系列之(三):Docker微容器Alpine Linux

    1. 前言 使用Docker创建容器时,基础镜像通常选择Ubuntu或Centos,不管哪个镜像的大小都在100MB以上. Alpine Linux是一个面向安全的轻型的Linux发行版. Alpin ...

  6. docker commit容器

    docker commit 容器ID 镜象REPOSITORY 镜象TAG 如docker commit 52b41c68ac7b registry.lenovows.com:5000/video-a ...

  7. FW Docker为容器分配指定物理网段的静态IP

    官方有关于网桥和IP配置的文档地址:https://docs.docker.com/articles/networking/ 1.宿主机(系统采用ubuntu-14.04.1-server-amd64 ...

  8. Docker,容器,虚拟机和红烧肉

    Docker火了,有多火你自己看看下面的统计数据就知道了 在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,并且有超过150个项目和超 ...

  9. Docker: 限制容器可用的 CPU

    默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源 ...

随机推荐

  1. [Linux]在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢

    在linux中,常常用到ctrl和其他按键组合,常用的有哪些及意义呢? Ctrl+c 结束正在运行的程序 Ctrl+d 结束输入或退出shell Ctrl+s 暂停屏幕输出[锁住终端] Ctrl+q ...

  2. C++ 定义全局数组

    数组怎么用,全局数组就怎么用,只是他的作用域不一样才叫全局数组... 在A.h 或 A.cpp中定义char buf[10]; 如果在B.cpp要用,就在其开头中写成 extern char buf[ ...

  3. iOS typedef NS_ENUM 与 NSString

    //在头文件中声明 typedef NS_ENUM(NSUInteger, TransactionState) { TransactionOpened, TransactionPending, Tra ...

  4. MySQL 存储过程控制语句

    变量作用域内部的变量在其作用域范围内享有更高的优先权,当执行到end.变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储过程外再也不能找到这个申明的变量,但是你可以通过out参数或 ...

  5. 为川师大女生支招 15年如何还200W

    就在昨儿一条新闻火遍全网,川师大21岁女生樊师贝发帖称,希望有人借她200万,为父母在城里买房15年还清,至于利息“可以用后半生来陪伴你”.她说,六旬父亲要负担家用,哥哥啃老,而她目前一分钱都还没挣到 ...

  6. CSS笔记1

    一. 列表 列表是有三种形式 1.1   无序列表 无序列表,用来表示一个列表语义,并且每个项目与项目之间是不分先后顺序的 ul 的英文unordered list "无序列表" ...

  7. 13.final关键字

    1.final修饰的变量只能赋一次值,不赋值时,会提示初始化 2.final修饰的方法不能被重写 3.final修饰的类不能被继承

  8. Django URL name详解

    我们基于上一节的代码来开始这一节的内容. 上节源代码:zqxt_views(django 1.4 - django 1.10).zip [更新于 2016-09-06 00:13:23] 1. 打开 ...

  9. JQ第二天

    一.属性.表单过滤选择器 $("div[id]")选取有id属性的<div>//$("div [id]")有空格表示div层当中有id属性的元素 $ ...

  10. SSH整合(Struts2+hibernate+spring)

    1.创建表 create table t_user( id int primary key auto_increment, username varchar(50), password varchar ...