运行容器docker

运行容器

标签(空格分隔): docker


三种启动容器时执行命令的方法

1、CMD
2、ENDPOINT
3、docker run

# docker run ubuntu pwd
启动容器时执行pwd命令 返回容器中的当前目录 然后容器就退出运行状态 Exited
# docker ps -a
# docker container ls #查看所有运行状态的容器

让容器长期运行

容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器就不会退出

# docker run -d ubuntu /bin/bash -c "while true; do sleep 1;done"

CONTAINER ID 容器的短ID
NAMES字段显示容器的名字 在启动容器时通过 --name 参数指定容器名 容器默认自动分配容器名

通过while 启动的容器虽然能保持运行,但实际上没有任何意义。容器的用途是运行后台服务

进入容器

# docker attach 可以到容器启动的终端(附着

# docker exec
# docker exec -it ubuntu /bin/bash

交互模式打开 执行bash ,打开了一个bash终端
进入容器,容器的hostname就是其短ID
可以像linux中一样执行命令
执行exit退出容器

1、attach直接进入容器 启动命令的终端,不会产生新的进程
2、exec 是在容器中打开新的终端
3、如果想直接在终端中查看启动命令的输出,用attach 其他情况使用exec
4、只是为了查看启动命令的输出可以使用 docker logs命令

最佳实践

两类:服务类和工具类
1、服务类以daemon的形式运行,对外提供服务 web 数据库等 通过-d以后台方式启动这类容器
2、工具类容器通常能给我们提供一个临时工作环境
# docker run -it busybox

容器运行相关

1、当CMD或Entrypoint或docker run 命令行指定的命令运行结束时,容器停止
2、通过-d参数在后台启动容器
3、通过-exec -it 进入容器 并打开一个新的终端

指定容器的三方法

1、短ID
2、长ID
3、容器名称 可通过docker rename 重命名

docker stop 停止运行的容器
容器在docker host中只是一个进程。如果想快速停止容器可以使用docker kill 命令

docker start 运行停止的容器
保留容器的第一次启动时的所有参数

docker restart 可以重启容器,其作用是依次执行 stop、start

--restart=always 意味着无论容器因何种原因退出(包括正常退出)就立即重启
—-restart=on-failure:3 如果启动进程退出代码非0,则重启容器,最多3次

docker pause
让容器暂停工作一段时间 这时候容器不会占用CPU资源 STATUS 状态会显示 pause
docker unpause
恢复暂停的容器
docker rm
删除容器 rm可以一次指定多个容器
docker rm -v $(docker ps -aq -f status=exited) 删除全部退出状态的容器

1、容器可以先创建,而不启动
docker create 命令创建的容器处于created状态
2、使用 docker start 启动容器 docker run 其实是 create 和 start 的组合命令

3、只有当容器命令退出时 --restart 才生效
容器退出分为正常退出和非正常退出 docker 会根据--restart 的策略判断是否需要重启容器

限制容器对资源的使用

内存限额

容器可使用的内存分为 物理内存和swap
-m --memory 参数设置物理内存的使用量
--memory-swap 设置物理内存和swap内存的使用总量

# docker create --memory 200M --memory-swap 300M --network=my_net0 ubuntu bash -c "while true; do sleep 1;done"
限制物理内存的使用量为200M swap为300-200M
默认不指定的情况下 上面两组参数为 -1 即不做限制

# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 199M
--vm 1 启动一个内存工作进程
--vm-bytes 199M 每个进程分配199M内存

云主机没有swap分区,超过200M启动失败

stress: FAIL: [1] (422) kill error: No such process

stress: FAIL: [1] (452) failed run completed in 0s

如果在启动容器时只指定 -m 而不指定 --memory-swap,那么 --memory-swap 默认为 -m 的两倍,内存和swap相同量

CPU限额

默认设置下所有容器平等的使用cpu资源
-c --cpu-shares 设置容qin器使用cpu的权重。默认为1024
按权重分配cpu只会发生在cpu资源紧张的情况下、在cpu空闲状态 被限制的容器也可以获取到全部cpu资源
# docker run --name container_A -it -c 1024 progrium/stress --cpu 1
# docker run --name container_B -it -c 512 progrium/stress --cpu 1
--cpu 用来限制工作线程的数量

block IO权重

默认情况下,所有容器能平等地读写磁盘
--blkio-weight 参数来改变容器 block IO 的优先级
--blkio-weight 和 --cpu-shares类似,设置的是相对权重值 默认为500
docker run -it --name con_A --blkio-weight 600 ubuntu

bps和iops

bps 是 byte per second,每秒读写的数据量。
iops 是 io per second,每秒 IO 的次数

--device-read-bps,限制读某个设备的 bps
--device-write-bps,限制写某个设备的 bps
--device-read-iops,限制读某个设备的 iops
--device-write-iops,限制写某个设备的 iops

docker run -it --device-write-bps /dev/sda:30MB ubuntu

cgroup 全称 control group linux操作系统通过cgroup可以设置进程使用CPU、MEM、IO资源的限制

# docker run -d --cpu-shares 512 centos bash -c "while true; do sleep 1;done"
/sys/fs/cgroup
/sys/fs/cgroup/cpu/docker 目录中包含所有与 cpu 相关的 cgroup 配置
/sys/fs/cgroup/memory/docker
/sys/fs/cgroup/blkio/docker

namespace

每个容器中,都有文件系统、网卡 每个容器都会认为自己有独立的物理设备 她使容器更像一个独立的计算机
linux实现这种方式的技术是namespace。 namespace掌管着host中的全部资源,并让每个容器都觉的自己独占使用它

namespace实现了容器间资源隔离

  1. mount namespace 让容器看上去拥有全部文件系统 让容器拥有根文件系统
  2. UTS namespace 让容器有自己的hostname 默认情况下hostname是他的短ID
  3. IPC namespace 让容器拥有自己的共享内存和信号量semaphore来实现进程间通信 而不会和host和其他容器的IPC混在一起
  4. PID namespace 让容器拥有一套自己的PID
    ps axf 可以看到容器的进程和容器内自己的子进程
  5. Network namespace 让容器拥有自己独立的网卡、IP、路由
  6. User namespace 让容器管理自己的用户,和宿主机进行隔离
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容