docker——容器(container)
容器相关命令一览表:
- docker create
- docker run
- docker start/stop/restart
- docker attach/exec
- docker rm
- docker export/import
- docker ps
1.创建容器
(1)docker create
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
使用docker create创建的容器处于停止状态,可以使用docker start来启动它。
没有指定执行程序的时候,默认是打开BASH终端。
如果这里没有给它分配一个伪终端,那么启动这个程序也会瞬间就被关闭。
(2)docker start
查看状态:
确定已经运行
(3)docker run(=docker create + docker start) 新建并启动容器
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-t:分配一个为终端并绑定到容器的标准输入上,
-i:让容器的标准输入保持打开
从另一个控制台查看容器状态:
可以看出正在运行。
当利用docker run来创建并启动容器的时候,Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
- 利用镜像创建一个容器,并启动该容器;
- 分配一个文件系统给容器,并在只读的镜像层外边挂载一层可读写曾;
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
- 从网桥的地址池配置一个IP地址给容器;
- 执行用户执行的应用程序;
- 执行完毕之后容器自动终止;
使用Ctrl+d或输入exit命令来退出容器。这里的退出时容器已经被关闭。
在许多时候,需要docker容器在后台以守护态运行,需要指定-d参数。
使用ctrl+p+q退出容器但不关闭。
某些时候,执行docker run会出错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码。
常见的错误代码包括:
- 125:Docker daemon执行错误;
- 126:所指定命令无法执行,例如权限出错;
- 127:容器内命令无法找到;
2.终止容器
docker stop:终止一个正在运行的容器
docker stop [--help] [-t|--time[=10]] CONTAINER [CONTAINER...]
参数解释:
-t, --time=10:在杀死容器之前等待容器停止的秒数。 默认值为10秒。
docker restart:重启一个正在运行的容器
3.进入容器
使用-d参数,容器会以守护态运行,用户无法看到容器中的信息,业务发进行操作。
下面介绍两种基础方法进入容器:
(1)attach
docker attach [--detach-keys[=[]]] [--help] [--no-stdin] [--sig-proxy[=true]] CONTAINER
参数解释:
--detach-keys="":指定退出attach模式的快捷键序列,默认是crtl+p crtl+q
--no-stdin=true|false:是否关闭标准输入,默认是打开状态
--sig-proxy=true|false:是否代理收到的系统信号给应用程序,默认为true
使用attach有时候并不是非常方便。当多个窗口同时attach到一个容器的时候,所有的窗口都会同步显示,也就是操作一个窗口,其它的所有窗口都会出现结果。
当某个窗口因命令阻塞时,其它窗口也无法执行操作了。
(2)exec
docker exec [-d|--detach] [--detach-keys[=[]]] [-e|--env[=[]]] [--help] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
参数解释:
-d, --detach=true|false:分离模式:后台运行命令,默认是false
--detach-keys="":重写用于拆卸容器的键序列
-e, --env=[]:设置环境变量
-i, --interactive=true|false:打开标准输入接受用户输入指令,默认false
--privileged=true|false::是否给执行命令以高权限,默认false
-t, --tty=true|false:分配为终端,默认为false
-u, --user="":执行命令的用户名或ID
使用exec就不会出现attach的问题。
4.删除容器
docker rm:删除处于终止或退出状态的容器。
docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]
参数解释:
-f, --force=true|false:是否强制终止并删除一个处于运行状态的容器
-l, --link=true|false:删除容器的连接,但保留容器
-v, --volumes=true|false:删除容器挂载的数据卷
删除:
再次查看已经被删除:
如果所删除的容器正处于运行状态,就会报错。
52a正在运行
报错了,如果要强制删除必须添加-f操作。
5.查看容器
docker ps:列出本地存储库中的容器
docker ps [-a|--all] [-f|--filter[=[]]] [--format="TEMPLATE"] [--help] [-l|--lat‐est] [-n[=-1]] [--no-trunc] [-q|--quiet] [-s|--size]
参数说明:
-a, --all=true|false: 展示所有容器,默认情况下只会展示正在运行的容器
-f, --filter=[]:过滤
--format="TEMPLATE":格式化输出
-l, --latest=true|false:仅展示最新创建的容器
-n=-1:显示最后创建的容器(包括所有状态)。
--no-trunc=true|false: 不要截断输出,默认是false
-q, --quiet=true|false:仅显示ID,默认为false
-s, --size=true|false:显示总文件大小
--filter实例:
- exited=<int> an exit code of <int> 退出代码
- label=<key> or label=<key>=<value>
- status=(created|restarting|running|paused|exited|dead),通过状态过滤(已创建/正在重启/正在运行/暂停/离开/死亡)
- name=<string> a container's name 通过容器名
- id=<ID> a container's ID 通过容器id
- is-task=(true|false) - containers that are a task (part of a service managed by swarm)
- before=(<container-name>|<container-id>) 在哪个容器之前创建
- since=(<container-name>|<container-id>) 从那个容器开始到现在创建的
- ancestor=(<image-name>[:tag]|<image-id>| ⟨image@digest⟩) - containers created from an image or a descendant.从那个镜像创建
- volume=(<volume-name>|<mount-point-destination>)
- network=(<network-name>|<network-id>) - containers connected to the provided network 通过容器的IP地址
- health=(starting|healthy|unhealthy|none) - filters containers based on healthcheck status
例子:
docker ps -qa --filter=ancestor=docker.io/centos
docker ps -a --filter=before=2d412139865b
docker ps -q --filter=name=con_test
docker ps -qa --filter=status=exited
6.导入和导出容器
某些时候需要将容器从一个系统导入到另一个系统,这个时候不论是直接导出容器还是说先将容器制作成镜像都是可行的。
docker export:导出一个容器到一个文件,不管此时的容器是否处于运行状态。
docker export [--help] [-o|--output[=""]] CONTAINER
参数解释:
-o: 指定导出的tar文件名
docker import:将导出的文件导入变成镜像。
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] [--help] file|URL|-[REPOSITORY[:TAG]]
参数解释:
-c, --change=[]:在导入时应用指定的dockfile指令
-m, --message="":为导入的镜像设置提交信息。
导出文件:
导入文件:
查看:
我们发现dockers load和docker import十分类似。都可以将一个文件导入到镜像库中。
docker export类似快照,只会保存容器的快照状态,容器快照文件将丢弃所有历史记录和元数据信息(即仅保存容器当时的快照状态)
而镜像存储文件将保存完整记录,体积也更大。此外,从容器快照文件导入时可以重新指定标签元数据信息。
6.docker create和docker run的参数说明
docker create和docker run都可以创建容器,二者的参数完全相同。
與容器運行模式相關的選項:
-a, --attach=[]:是否綁定到標準輸入、輸出和錯誤。
--add-host=[]:在容器内添加一个主机名到IP地址的映射关系(通过/etc/hosts文件)
--blkio-weight=:容器读写块设备的IO性能权重,默认为0;
--blkio-weight-device=[DEVICE_NAME:WEIGHT]:指定各个块设备的IO性能权重;
--cpu-shares=:允许容器使用CPU资源的相对权重,默认一个容器能用满一个核的CPU。
--cap-add=[]:增加容器的LINUX指定安全能力
--cap-drop=[]:移除容器的LINUX指定安全能力
--cgroup-parent="":容器cgoups限制的创建路径
--cidfile="":指定容器的进程ID号写道文件
--cpu-count=:限制容器可执行的CPU数量
--cpu-percent=:限制在Windows守护程序上运行的容器可执行的CPU百分比
--cpu-period=:限制容器在CFS调度器下的CPU占用时间片
--cpuset-cpus="":限制容器能使用那些CPU核心
--cpuset-mems="":NUMA架构下使用那些核心的内存
--cpu-quota=:限制CPU在CFS调度器下的CPU配额
--cpu-rt-period=:限制容器的实时CPU使用率。
--cpu-rt-runtime=:以微秒为单位限制CPU实时运行时间
--cpus=0.0:CPU的数量
--device=[]:将主机设备添加到容器中
--device-read-bps=[]:挂载设备的读吞吐率(以bps为单位)限制
--device-read-iops=[]:挂载设备的读吞吐率(以每秒i/o次数为单位)限制
--device-write-bps=[]:挂载设备的写吞吐率(以bps为单位)限制
--device-write-iops=[]:挂载设备的写吞吐率(以每秒i/o次数为单位)限制
--dns=[]:自定义的DNS服务器
--dns-option=[]:自定义的DNS选项
--dns-search=[]:DNS搜索域
-e, --env=[]:指定容器内环境变量
--entrypoint="":镜像存在入口命令时,覆盖为新的命令
--env-file=[]:从文件中读取环境变量到容器
--expose=[]:指定容器会暴露出来的端口或端口范围
--group-add=[]:运行容器的用户组
-h, --hostname="":指定容器内的主机名
-i, --interactive=true|false
--ip="":指定容器内的IPV4地址
--ip6="":指定容器内的IPV6地址
--ipc="":容器IPC命名空间,可以为其它容器或主机
--isolation="default":容器使用的隔离机制
--kernel-memory="":限制容器使用内核的内存大小,单位可以是b、k、m或g
-l, --label=[]:将元数据添加到容器
--label-file=[]:从文件中读取标签。 用EOL分隔每个标签。
--link=[]:以<name或id>的形式添加指向另一个容器的链接:alias或just
--link-local-ip=[]:将一个或多个链接本地IPv4 / IPv6地址添加到容器的接口
--log-driver="json-file|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs|none":指定容器的日志驱动类型
--log-opt=[]:传递给日志驱动的选项
-m, --memory="":限制容器内应用使用的内存,单位可以是b、k、m或g
--mac-address="":指定容器的MAC地址。
--memory-reservation="":当系统内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值。
--memory-swap="LIMIT":限制容器使用内存和交换区的总大小
--memory-swappiness="":调整容器的内存swappiness行为。 接受0到10之间的整数
--name="":指定容器的别名
--network="bridge|none|container|host":指定容器网络模式
--network-alias=[]:容器在网络中的别名
--oom-kill-disable=true|false:内存耗尽时是否杀死容器
--oom-score-adj="":调整容器的内存耗尽参数
-P, --publish-all=true|false:通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口
-p, --publish=[]:指定如何映射到本地主机端口
--pid="":为容器设置PID
--userns="":启用userns-remap选项时,为容器设置usernamespace模式。
--pids-limit="":限制容器的PID个数
--privileged=true|false:是否给容器以高权限
--read-only=true|false:是否让容器内的文件系统只读
--restart="no":容器的重启策略,包括no, on-failure[:max-retry], always, unless-stopped
--rm=true|false:容器退出后是否自动删除,不能跟-d同时使用
--shm-size="":/dev/shm的大小
--security-opt=[]:指定一些安全参数,包括权限、安全能力等
--storage-opt=[]:每个容器的存储驱动程序选
--stop-signal=SIGTERM:指定停止容器的系统信息
--stop-timeout=:停止容器的超时(以秒为单位)。 默认值为10。
--sysctl=SYSCTL:在运行时配置命名空间的内核参数
-t, --tty=true|false:是否分配一个伪终端,默认为false
--tmpfs=[]:将临时文件系统(tmpfs)mount挂载到容器中
-u, --user="":指定在容器内执行命令的用户信息
--ulimit=[]:通过ulimit来限制最大文件数、最大进程数
--uts=host:设置容器的UTS模式
-v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]:挂载主机上的文件到容器内
docker——容器(container)的更多相关文章
- 如何获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 如何获取 docker 容器(container)的 ip 地址(转)
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 014-docker-终端获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- Docker 容器(container)及资源限制
Container: 既然container是由image运行起来的,那么是否可以理解为container和image有某种关系?先来看张图: 其实可以理解为container只是基于image之后的 ...
- 获取 docker 容器(container)的 ip 地址
获取单个IP docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-ID> 获取所有容器IP doc ...
- docker 容器container运行后,如何进入容器内部?
docker exec -ti 容器ID /bin/bash
- docker容器入门最佳教程
为什么要写这个 简单回答是:容器技术非常热门,但门槛高. 容器技术是继大数据和云计算之后又一炙手可热的技术,而且未来相当一段时间内都会非常流行. 对 IT 行业来说,这是一项非常有价值的技术.而对 I ...
- docker容器的学习
什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源 ...
- docker容器介绍
Docker容器 一.什么是Docker? Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Git ...
随机推荐
- 欧拉函数 & 【POJ】2478 Farey Sequence & 【HDU】2824 The Euler function
http://poj.org/problem?id=2478 http://acm.hdu.edu.cn/showproblem.php?pid=2824 欧拉函数模板裸题,有两种方法求出所有的欧拉函 ...
- HDU1717--小数化分数2
这道题是将输入的小数(有可能是无限循环小数)来化为分数.刚開始看到以为枚举(千万不要嘲笑我),可是感觉不正确. 所以百度了小数化为分数的方法,然后看到了各种方法,原来是这这样,在这我採用的是小数化为分 ...
- MySQL的innodb_flush_log_at_trx_commit配置值的设定
MySQL的innodb_flush_log_at_trx_commit配置值的设定 mysql的配置文件中innodb_flush_log_at_trx_commit的默认值是1,修改成0或者2,速 ...
- LoadRunner中winsocket协议学习
首先让我们先看一下loadrunner- winsock 函数 一览表: lrs_accept_connection 接受侦听套接字连接 lrs_close_socket 关闭打开的套接 ...
- C++ map修改指定key的value
对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢? C++ Code 12345678910111213141516171819202122 ...
- __construct __destory __call __get __set
1,__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. 我们知道 php5对象模型 < ,所以__construct()作为类的默认的构造函数 而不会调用同类名函 ...
- input的disable和readonly
在设计网页时,有时需要将输入框设置为只读状态,即其中的内容不可编辑,实现这种设计的方法有两种:使用input的disable和readonly两个属性. 先来看下二者的区别: <input ty ...
- 关于metaspolit中进行JAVA反序列化渗透RMI的原理分析
一.背景: 这里需要对java反序列化有点了解,在这里得推广下自己的博客嘛,虽然写的不好,广告还是要做的.原谅我: 1.java反序列化漏洞原理研习 2.java反序列化漏洞的检测 二.攻击手法简介 ...
- MYSQL常用命令(转载)
1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldu ...
- 160323、理解Java虚拟机体系结构
今天看到一篇文章,觉得写得不错,特拿来跟大家分享一下 1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一 ...