Docker容器
4.1 運(yùn)行容器
[root@docker01 ~]# docker run centos pwd
/
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7f729d0ee39 centos "pwd" About a minute ago Exited (0) About a minute ago sleepy_shannon
4.1.1 容器后臺(tái)運(yùn)行
| 參數(shù) |
說(shuō)明 |
| -d |
后臺(tái)運(yùn)行 |
| /bin/bash -c "while true;do sleep 1;done" |
while語(yǔ)句讓bash不會(huì)退出 |
[root@docker01 ~]# docker run -d centos /bin/bash -c "while true;do sleep 1;done"
97202faac0b3fd6f6689de4b055d270d4ab43e77fac23b168ced57aed3551f7f
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97202faac0b3 centos "/bin/bash -c 'whi..." 20 seconds ago Up 19 seconds distracted_roentgen
| 參數(shù) |
說(shuō)明 |
| --name |
指定容器名稱 |
| start/stop |
啟動(dòng)或停止容器 |
| pause/unpause |
暫?;蚧謴?fù)容器 |
| restart(always、on-failure:3) |
重啟容器 |
[root@docker01 ~]# docker run --name=centos_hello centos /bin/echo "Hello"
Hello
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82806f7a2b93 centos "/bin/echo Hello" 17 seconds ago Exited (0) 17 seconds ago centos_hello
[root@docker01 ~]# docker start centos_hello
centos_hello
[root@docker01 ~]# docker run -d --restart=always httpd
4.1.2 進(jìn)入容器方法
| 參數(shù) |
說(shuō)明 |
| attach |
直接進(jìn)入容器啟動(dòng)命令的終端,不會(huì)啟動(dòng)新的進(jìn)程。 |
| exec |
在容器中打開(kāi)新的終端,并且可以啟動(dòng)新的進(jìn)程。 |
[root@docker01 ~]# docker run -d centos /bin/bash -c "while true;do sleep 1;echo hello;done"
79003a8a467a1a4134cf5f0c4bc646319bf5f4b6208f126f4805f87482b7aa07
[root@docker01 ~]# docker attach 79003a8a467a1a4134cf5f0c4bc646319bf5f4b6208f126f4805f87482b7aa07
hello
hello
hello
hello
#可通過(guò)Ctrl+p,然后Ctrl+q組合鍵退出
[root@docker01 ~]# docker run -d centos /bin/bash -c "while true;do sleep 1;echo hello;done"
76da0eba3cc9fc769ac418f16bd63c2845eb8fee2618088ec023022e11f25a93
[root@docker01 ~]# docker exec -it 76da0eba3cc9fc769ac418f16bd63c2845eb8fee2618088ec023022e11f25a93 bash
如果想在終端查看啟動(dòng)命令的輸出用attach,其他情況exec。
4.1.3 運(yùn)行容器最佳實(shí)踐
服務(wù)器容器(-d 后臺(tái)運(yùn)行,如需排查問(wèn)題exec -it進(jìn)入)
工具類容器(run -it 臨時(shí)環(huán)境)
4.2 刪除容器
#docker rm 容器ID
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab76beae0172 httpd "httpd-foreground" 6 minutes ago Up About a minute 80/tcp gracious_brattain
[root@docker01 ~]# docker stop ab76beae0172
ab76beae0172
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab76beae0172 httpd "httpd-foreground" 7 minutes ago Exited (0) 9 seconds ago gracious_brattain
[root@docker01 ~]# docker rm ab76beae0172
ab76beae0172
4.3 刪除鏡像
#docker rmi 鏡像ID
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/httpd latest 19459a872194 4 weeks ago 154 MB
jzhang0451/centos_apache v1 80b2eee15b08 2 months ago 346 MB
docker.io/nginx latest e445ab08b2be 2 months ago 126 MB
docker.io/centos latest 9f38484d220f 7 months ago 202 MB
docker.io/registry 2 f32a97de94e1 7 months ago 25.8 MB
docker.io/hello-world latest fce289e99eb9 9 months ago 1.84 kB
docker.io/centos/mysql-56-centos7 latest 8ef375298394 17 months ago 407 MB
[root@docker01 ~]# docker rmi fce289e99eb9
Untagged: docker.io/hello-world:latest
Untagged: docker.io/hello-world@sha256:b8ba256769a0ac28dd126d584e0a2011cd2877f3f76e093a7ae560f2a5301c00
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
4.4 資源限制
4.4.1 內(nèi)存限額
| 參數(shù) |
說(shuō)明 |
| -m或--memory |
設(shè)置內(nèi)存使用限額 |
| --memory-swap |
設(shè)置內(nèi)存+swap的使用限額 |
[root@docker01 ~]# docker run -it -m 100M --memory-swap=100M centos
#測(cè)試鏡像
[root@docker01 ~]# docker run -it -m 100M --memory-swap=100M docker.io/progrium/stress --vm 1 --vm-bytes 200M
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogvm worker 1 [6] forked
stress: dbug: [6] allocating 209715200 bytes ...
stress: dbug: [6] touching bytes in strides of 4096 bytes ...
stress: FAIL: [1] (416) <-- worker 6 got signal 9
stress: WARN: [1] (418) now reaping child worker processes
stress: FAIL: [1] (422) kill error: No such process
stress: FAIL: [1] (452) failed run completed in 0s
4.4.2 CPU限額
| 參數(shù) |
說(shuō)明 |
| -c或--cpu-shares |
設(shè)置CPU的權(quán)重 |
| --cpu |
設(shè)置工作線程數(shù)量(當(dāng)前只有一顆CPU,1個(gè)線程就能將CPU壓滿) |
[root@docker01 ~]# docker run -it -c 1024 centos
#測(cè)試鏡像
單獨(dú)SSH通道:
[root@docker01 ~]# docker run --name container_A -it -c 1024 docker.io/progrium/stress --cpu 1
stress: info: [1] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogcpu worker 1 [6] forked
單獨(dú)SSH通道:
[root@docker01 ~]# docker run --name container_B -it -c 512 docker.io/progrium/stress --cpu 1
stress: info: [1] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogcpu worker 1 [6] forked
單獨(dú)SSH通道:
[root@docker01 ~]# top
top - 12:21:45 up 9 min, 3 users, load average: 1.65, 0.62, 0.25
Tasks: 110 total, 3 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu(s): 99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863224 total, 1458196 free, 159508 used, 245520 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1500368 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7610 root 20 0 7304 100 0 R 66.4 0.0 1:36.97 stress
7697 root 20 0 7304 96 0 R 33.2 0.0 0:25.19 stress
7515 root 20 0 161360 6196 4792 S 0.3 0.3 0:00.11 sshd
7614 root 20 0 0 0 0 S 0.3 0.0 0:00.16 kworker/0:3
單獨(dú)SSH通道:
[root@docker01 ~]# docker pause container_A
container_A
[root@docker01 ~]# docker pause container_B
container_B
4.4.3 Block IO帶寬限額
| 參數(shù) |
說(shuō)明 |
| --blkio-weight |
設(shè)置權(quán)重權(quán) |
| --device-read-bps |
限制讀某個(gè)設(shè)備的bps |
| --device-write-bps |
限制寫(xiě)某個(gè)設(shè)備的bps |
| --device-read-iops |
限制讀某個(gè)設(shè)備的iops |
| --device-write-iops |
限制寫(xiě)某個(gè)設(shè)備的iops |
bps(byte per second,每秒讀寫(xiě)的數(shù)據(jù)量)
iops(io per second,每秒IO的次數(shù))
#測(cè)試鏡像
[root@docker01 ~]# docker run -it --device-write-bps /dev/sda:30MB centos
[root@efbdee8c0921 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 26.6203 s, 31.5 MB/s
real 0m26.631s
user 0m0.011s
sys 0m0.422s
[root@efbdee8c0921 /]#
[root@docker01 ~]# docker run -it centos
[root@b96e8fa4a4b7 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 0.534064 s, 1.6 GB/s
real 0m0.537s
user 0m0.004s
sys 0m0.339s
[root@b96e8fa4a4b7 /]#
4.5 實(shí)現(xiàn)容器的底層技術(shù)
4.5.1 cgroup資源限制
[root@docker01 ~]# ls /sys/fs/cgroup/
blkio cpuacct cpuset freezer memory net_cls,net_prio perf_event systemd
cpu cpu,cpuacct devices hugetlb net_cls net_prio
4.5.2 namespace資源隔離
| 參數(shù) |
說(shuō)明 |
| Mount |
文件系統(tǒng),容器擁有自己的/目錄。 |
| UTS |
讓容器擁有自己的hostname。啟動(dòng)容器時(shí)可以能過(guò) -h 指定。 |
| IPC |
讓容器擁有自己的共享內(nèi)存和信號(hào)量來(lái)實(shí)現(xiàn)進(jìn)程間通信。 |
| PID |
讓容器擁有自己的進(jìn)程號(hào)。 |
| Network |
讓容器擁有自己的獨(dú)立網(wǎng)卡、IP、路由等資源。 |
| User |
讓容器能夠管理自己的用戶。 |