Docker數據卷管理和資源限制

2021-02-14 牧羊人的方向

本文簡要介紹了Docker容器對數據卷管理以及CPU、內存和IO等系統資源限制方式

1、Docker數據卷管理

數據卷是Docker容器保存數據的方式,跟bind mounts方式相比,有以下優勢:

數據卷更容易備份遷移

使用Docker CLI或者Docker API對數據卷進行管理

數據卷可以在多個容器間共享和復用

Volumes driver可以將卷內容存儲在遠端主機上

可以使用Docker填充新的數據卷內容

數據卷內容存在Docker容器之外,並不會增加容器本身大小

1.1 創建和管理卷

1)創建卷

[root@tango-01 ~]# docker volume create my-volume
my-volume

2)List卷

[root@tango-01 ~]# docker volume ls
DRIVER VOLUME NAME
local my-volume

3)Inspect volume查看卷詳細信息

[root@tango-01 ~]# docker volume inspect my-volume
[
{
"CreatedAt": "2020-10-06T20:25:50+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-volume/_data",
"Name": "my-volume",
"Options": {},
"Scope": "local"
}
]

4)Remove volume

[root@tango-01 ~]#  docker volume rm my-volume
my-volume

5)使用-v選項添加一個數據卷

[root@tango-01 docker]# docker run -d  --name voltest   -v my-vol1:/data nginx:latest
966f73c1e518adfd115b5bb3321effc9b5692a10a64a2dbf992e533465dc516c
[root@tango-01 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
966f73c1e518 nginx:latest "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 80/tcp voltest
[root@tango-01 docker]# docker volume ls
DRIVER VOLUME NAME
local my-vol1

創建數據卷綁定到到新建容器,新建容器中會創建/data數據卷,如果卷不存在,Docker會創建一個新的volume。

>>掛載時創建卷<<

1)掛載卷

[root@tango-01 docker]# docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
66bc9c834237cc2f0bf47e63a7f3a2eb0ce51a6689309a6f740dc268403a44ff
[root@tango-01 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66bc9c834237 nginx:latest "/docker-entrypoint.…" 6 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp mystifying_banzai

容器內站點目錄: /usr/share/nginx/html

2)在宿主機寫入數據,查看

[root@tango-01 /]# echo "hello tango" >/data/index.html
[root@tango-01 /]# curl 192.168.112.10
hello tango

3)設置共享卷,使用同一個卷啟動一個新的容器

[root@tango-01 /]# docker run -d -p 8080:80 -v /data:/usr/share/nginx/html nginx:latest
b2cb700cd9937674e6d08326ede94932855d59d327c90427ba027903d9c90e61
[root@tango-01 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2cb700cd993 nginx:latest "/docker-entrypoint.…" 6 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp charming_wright
66bc9c834237 nginx:latest "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp mystifying_banzai
[root@tango-01 /]# curl 192.168.112.10:8080
hello tango

4)查看卷列表

[root@tango-01 /]# docker volume ls
DRIVER VOLUME NAME
local 4a77c195a70ff39c151ad75367d41f7db1f48de06e0ebb0333189724ca6c389a
local 73cca56105d152363bf63789bb3093443ec239559029caffc66da1a78257f200
local 548de7d0ba3d0a8c85a4b25e1234ba1b2a5891068a3062858825389a3ee4fc42
local my-vol1

>>創建卷後掛載<<

1)使用卷創建

[root@tango-01 /]# docker run -d -p 9080:80 -v my-vol1:/usr/share/nginx/html nginx:latest
43be86f4ec307e509c36d4145de3cd874c7d8adacff53e32f2a994953b86f7a0

2)宿主機測試

[root@tango-01 /]# echo 'hello tango' > /var/lib/docker/volumes/my-vol1/_data/index.html
[root@tango-01 /]# curl 192.168.112.10:9080
hello tango

3)設置卷

[root@tango-01 /]# docker run  -d  -P  --volumes-from 43be86f4ec30 nginx:latest
5acebbac45d74890819ab36aa38241f2d5fcd0673d7624bf4a55894d3e11efcf
[root@tango-01 /]#
[root@tango-01 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5acebbac45d7 nginx:latest "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp upbeat_einstein
43be86f4ec30 nginx:latest "/docker-entrypoint.…" 9 minutes ago Up 8 minutes 0.0.0.0:9080->80/tcp elated_lederberg
b2cb700cd993 nginx:latest "/docker-entrypoint.…" 15 minutes ago Up 14 minutes 0.0.0.0:8080->80/tcp charming_wright
66bc9c834237 nginx:latest "/docker-entrypoint.…" 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp mystifying_banzai
[root@tango-01 /]# curl 192.168.112.10:32768
hello tango

1.2 備份、恢復或遷移數據卷

1)數據卷備份

[root@tango-01 /]# docker run -v /testdata --name voltest ubuntu /bin/bash
[root@tango-01 /]# docker run --rm --volumes-from voltest -v $(pwd):/backup ubuntu tar cvf /backup/test.tar /testdata
tar: Removing leading `/' from member names
/testdata/

啟動一個新的容器並且從voltest容器中掛載卷,然後掛載當前目錄到容器中為backup,並備份test卷中所有的數據為test.tar,執行完成之後刪除容器--rm,此時備份就在當前的目錄下,名為test.tar。

注意:後面的/data是數據卷的目錄路徑(即數據卷創建時在容器裡的路徑)

2)數據卷恢復或遷移

可以恢復給同一個容器或者另外的容器,新建容器並解壓備份文件到新的容器數據卷

[root@tango-01 /]# docker run -v /testdata --name voltest1 ubuntu /bin/bash
[root@tango-01 /]# docker run --rm --volumes-from voltest1 -v $(pwd):/backup ubuntu bash -c "cd /testdata && tar xvf /backup/test.tar --strip 1"

恢復之前的文件到新建卷中,執行完後自動刪除容器

>>數據卷備份恢復操作實戰<<

1)先創建一個容器voltest,包含兩個數據卷/var/volume1和/var/volume2(這兩個目錄是在容器裡的數據卷路徑)

[root@tango-01 /]# docker run -t -i -v /var/volume1 -v /var/volume2 --name voltest ubuntu /bin/bash
root@881631b3f8c5:

根據Docker的數據持久化之數據卷容器可知,上面創建的voltest數據卷容器掛載了/var/volume1和/var/volume2兩個目錄。

2)在數據卷裡寫些數據,以供測試

root@881631b3f8c5:/# cd /var/volume1
root@881631b3f8c5:/var/volume1# echo "test1" > test1
root@881631b3f8c5:/var/volume1# echo "test11" > test11
root@881631b3f8c5:/var/volume1# echo "test111" > test111
root@881631b3f8c5:/var/volume1# ls
test1 test11 test111
root@881631b3f8c5:/var/volume1# cd /var/volume2
root@881631b3f8c5:/var/volume2# echo "test2" > test2
root@881631b3f8c5:/var/volume2# echo "test22" > test22
root@881631b3f8c5:/var/volume2# echo "test222" > test222
root@881631b3f8c5:/var/volume2# ls
test2 test22 test222

3)進行數據卷的備份操作

為了利用數據卷容器備份,使用--volumes-from標記來創建一個加載voltest容器卷的容器,並從主機掛載當前目錄到容器的/backup目錄。並備份voltest卷中的數據,執行完成之後刪除容器--rm,此時備份就在當前的目錄下了。

a) 備份voltest容器中的/var/volume1數據卷數據

[root@tango-01 /]# docker run -i -t --volumes-from voltest -v $(pwd):/backup ubuntu tar cvf /backup/backup1.tar /var/volume1
tar: Removing leading `/' from member names
/var/volume1/
/var/volume1/test1
/var/volume1/test11
/var/volume1/test111

b) 備份voltest容器中的/var/volume2數據卷數據

[root@tango-01 /]# docker run -i -t --volumes-from voltest -v $(pwd):/backup ubuntu tar cvf /backup/backup2.tar /var/volume2
tar: Removing leading `/' from member names
/var/volume2/
/var/volume2/test2
/var/volume2/test22
/var/volume2/test222

c) 備份voltest容器中的/var/volume1和/var/volume2數據卷數據

[root@tango-01 /]# docker run -i -t --volumes-from voltest -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/volume1 /var/volume2
tar: Removing leading `/' from member names
/var/volume1/
/var/volume1/test1
tar: Removing leading `/' from hard link targets
/var/volume1/test11
/var/volume1/test111
/var/volume2/
/var/volume2/test2
/var/volume2/test22
/var/volume2/test222
[root@tango-01 /]# ls -l
total 68
-rw-r--r-- 1 root root 10240 Oct 6 22:04 backup1.tar
-rw-r--r-- 1 root root 10240 Oct 6 22:05 backup2.tar
-rw-r--r-- 1 root root 10240 Oct 6 22:06 backup.tar

這樣,數據卷容器中的數據就備份完成了

4)恢復數據給同一個容器

a) 為了測試效果,先刪除數據卷

[root@tango-01 /]# docker start voltest
voltest
[root@tango-01 /]# docker attach voltest
root@881631b3f8c5:/# ls /var/volume1
test1 test11 test111
root@881631b3f8c5:/# ls /var/volume2
test2 test22 test222
root@881631b3f8c5:/# rm -rf /var/volume1
rm: cannot remove '/var/volume1': Device or resource busy
root@881631b3f8c5:/# rm -rf /var/volume2
rm: cannot remove '/var/volume2': Device or resource busy
root@881631b3f8c5:/# ls /var/volume1
root@881631b3f8c5:/# ls /var/volume2

b) 進行數據卷恢復,恢復數據卷中的所有數據:

[root@tango-01 /]# docker run --rm --volumes-from voltest -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /
var/volume1/
var/volume1/test1
var/volume1/test11
var/volume1/test111
var/volume2/
var/volume2/test2
var/volume2/test22
var/volume2/test222

注意-C後面的路徑,這個路徑表示將數據恢復到容器裡的路徑。命令中用"/",即表示將backup.tar中的數據解壓到容器的/路徑下。後面跟什麼路徑,就解壓到這個路徑下,因此這裡用"/"。

c) 再次到容器裡查看,發現數據卷裡的數據已經恢復了

[root@tango-01 /]# docker start voltest
voltest
[root@tango-01 /]# docker attach voltest
root@881631b3f8c5:/# ls /var/volume1
test1 test11 test111
root@881631b3f8c5:/# ls /var/volume2
test2 test22 test222

5)恢復數據給另外的容器,新建容器並解壓備份文件到新的容器數據卷

即新建一個容器voltest1,將上面備份的數據卷數據恢復到這個新容器裡

[root@tango-01 /]# docker run -t -i -v /var/volume1 -v /var/volume2 --name voltest1 ubuntu /bin/bash
root@7acb459cbe1c:/# ls /var/volume1
root@7acb459cbe1c:/# ls /var/volume2

恢復數據到新的容器voltest1中:

[root@tango-01 /]# docker run --rm --volumes-from voltest1 -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /
var/volume1/
var/volume1/test1
var/volume1/test11
var/volume1/test111
var/volume2/
var/volume2/test2
var/volume2/test22
var/volume2/test222
[root@tango-01 /]# docker start voltest1
voltest1
[root@tango-01 /]# docker attach voltest1
root@7acb459cbe1c:/# ls /var/volume1
test1 test11 test111
root@7acb459cbe1c:/# ls /var/volume2
test2 test22 test222

註:新容器創建時掛載的數據卷路徑最好是和之前備份的數據卷路徑一致

6)新建容器掛載的數據卷只是備份數據卷的一部分,那麼恢復的時候也只是恢復一部分數據。如下,新容器創建時只掛載/var/volume1

[root@tango-01 /]# docker run -t -i -v /var/volume1 --name voltest2 ubuntu /bin/bash
root@e2c453c81390:/# ls /var/volume1
root@e2c453c81390:/# ls /var/volume2
ls: cannot access '/var/volume2': No such file or directory

恢復數據到新的容器voltest2中:

[root@tango-01 /]# docker run --rm --volumes-from voltest2 -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /
var/volume1/
var/volume1/test1
var/volume1/test11
var/volume1/test111
var/volume2/
var/volume2/test2
var/volume2/test22
var/volume2/test222
root@e2c453c81390:/# ls /var/volume1
test1 test11 test111

查看容器,發現只恢復了/var/volume1的數據,/var/volume2數據沒有恢復,因為沒有容器創建時沒有掛載這個。

7)如果新容器創建時掛載的數據卷目錄跟之前備份的路徑不一致

[root@tango-01 /]# docker run -t -i -v /var/volume3 --name voltest3 ubuntu /bin/bash
root@06bfbfc830a7:/# ls /var/volume3

如果解壓時-C後面跟的路徑不是容器掛載的容器,那麼數據恢復不了,如下

[root@tango-01 /]# docker run --rm --volumes-from voltest3 -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /
var/volume1/
var/volume1/test1
var/volume1/test11
var/volume1/test111
var/volume2/
var/volume2/test2
var/volume2/test22
var/volume2/test222

發現容器內數據沒有恢復

root@06bfbfc830a7:/# ls /var/volume3
root@06bfbfc830a7:/#

但是如果解壓時-C後面跟的是容器掛載的路徑,數據就能正常恢復

[root@tango-01 /]# docker run --rm --volumes-from voltest3 -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /var/volume3
var/volume1/
var/volume1/test1
var/volume1/test11
var/volume1/test111
var/volume2/
var/volume2/test2
var/volume2/test22
var/volume2/test222

發現容器內數據已經恢復了

root@06bfbfc830a7:/# ls /var/volume3
var
root@06bfbfc830a7:/# ls /var/volume3/var
volume1 volume2
root@06bfbfc830a7:/# ls /var/volume3/var/volume1
test1 test11 test111
root@06bfbfc830a7:/# ls /var/volume3/var/volume2
test2 test22 test222
root@06bfbfc830a7:/#

2、Docker容器資源限制2.1 Namespace資源隔離

Docker使用Linux namespace技術實現容器間的資源隔離

>>以PID namespace為例<<

1)啟動一個容器

[root@tango-01 /]# docker run -it  --name pidtest ubuntu /bin/bash

2)查看容器中的進程id(可以看到/bin/sh的pid=1)

root@e9fcfb4c6f17:/# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
8 pts/0 00:00:00 ps

3)查看宿主機中的該/bin/sh的進程id

[root@tango-01 /]# ps -ef|grep ubuntu
root 3079 1671 0 14:48 pts/0 00:00:00 docker run -it --name pidtest ubuntu /bin/bash
root 3146 2387 0 14:49 pts/1 00:00:00 grep --color=auto ubuntu

可以看到,在Docker裡最開始執行的/bin/sh,就是這個容器內部的第1號進程(PID=1),而在宿主機上看到它的PID=3709。這就意味著,前面執行的/bin/sh,已經被Docker隔離在了一個跟宿主機完全不同的世界當中。這就是Docker在啟動一個容器(創建一個進程)時使用了PID namespace

2.2 Cgroup資源限制

Cgroup是Control Groups的縮寫,是Linux 內核提供的一種可以限制、記錄、隔離進程組所使用的物理資源(如 cpu、memory、磁碟IO等等) 的機制。Docker 通過內核的 cgroups 來做容器的資源限制;包括CPU、內存、磁碟三大方面。

2.2.1 內存限制

Docker 提供的內存限制功能有以下幾點:

容器能使用的內存和交換分區大小。

容器的核心內存大小。

容器虛擬內存的交換行為。

容器內存的軟性限制。

是否殺死佔用過多內存的容器。

執行docker run命令時能使用的和內存限制相關的所有選項如下:

2.2.2 CPU限制

docker run命令和CPU限制相關的所有選項如下:

其中--cpuset-cpus用於設置容器可以使用的 vCPU 核。-c,--cpu-shares用於設置多個容器競爭 CPU 時,各個容器相對能分配到的 CPU 時間比例。--cpu-period和--cpu-quata用於絕對設置容器能使用 CPU 時間。

>>CPU限制例子<<

1)配置控制組

[root@tango-01 cgroup]# cd /sys/fs/cgroup/cpu
[root@tango-01 cpu]# mkdir testcpulimit
[root@tango-01 cpu]# cd testcpulimit/
[root@tango-01 testcpulimit]# ls
cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
[root@tango-01 testcpulimit]# cat /sys/fs/cgroup/cpu/testcpulimit/cpu.cfs_quota_us
-1
[root@tango-01 testcpulimit]# cat /sys/fs/cgroup/cpu/testcpulimit/cpu.cfs_period_us
100000

創建的這個目錄testcpulimit就稱為一個「控制組」,作業系統會在新創建的目錄下,自動生成該子系統對應的資源限制文件。可以看到testlimit控制組裡的CPU quota還沒有任何限制(即:-1),CPU period則是默認的100000us。

2)配置一個只能使用30% cpu的限制,即長度為cfs_period的一段時間內,只能被分配到總量為cfs_quota的CPU時間。

[root@tango-01 testcpulimit]# echo 30000 > /sys/fs/cgroup/cpu/testcpulimit/cpu.cfs_quota_us
[root@tango-01 testcpulimit]# cat /sys/fs/cgroup/cpu/testcpulimit/cpu.cfs_quota_us
30000

3)在容器中執行腳本

[root@tango-01 /]# docker run -it  --name cputest ubuntu /bin/bash
root@be59c323f3ad:/#
root@be59c323f3ad:/# while : ; do : ; done &
[1] 10
root@be59c323f3ad:/# top
top - 07:24:47 up 1:04, 0 users, load average: 0.08, 0.44, 0.31
Tasks: 3 total, 2 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 30.0 us, 0.3 sy, 0.0 ni, 69.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 976.3 total, 136.2 free, 440.4 used, 399.7 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 362.4 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10 root 20 0 4232 748 180 R 30.3 0.1 3:39.46 bash
1 root 20 0 4232 2208 1640 S 0.0 0.2 0:00.13 bash
11 root 20 0 6100 1812 1292 R 0.0 0.2 0:00.07 top

4)使用cgroup限制該進程的cpu

[root@tango-01 testcpulimit]# echo 3564 > /sys/fs/cgroup/cpu/testcpulimit/tasks
[root@tango-01 testcpulimit]#
[root@tango-01 testcpulimit]# top
top - 15:23:21 up 1:03, 2 users, load average: 0.38, 0.59, 0.34
Tasks: 130 total, 2 running, 128 sleeping, 0 stopped, 0 zombie
%Cpu(s): 29.6 us, 0.3 sy, 0.0 ni, 70.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999696 total, 138896 free, 378192 used, 482608 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 370456 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3564 root 20 0 4232 748 180 R 29.9 0.1 3:13.66 bash

看到使用剛才創建的testcpulimit控制組,將cpu被限制到了30%左右

2.2.3 磁碟IO配額控制

相對於CPU和內存的配額控制,docker對磁碟IO的控制相對不成熟,大多數都必須在有宿主機設備的情況下使用。主要包括以下參數:

>>磁碟IO配額控制示例<<

1)blkio-weight

要使–blkio-weight生效,需要保證IO的調度算法為CFQ。可以使用下面的方式查看:

[root@tango-01 /]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq

使用下面的命令創建兩個–blkio-weight值不同的容器:

[root@tango-01 /]# docker run -ti --rm --blkio-weight 10 ubuntu
[root@tango-01 /]# docker run -ti --rm --blkio-weight 1000 ubuntu

在容器中同時執行下面的dd命令,進行測試:

time dd if=/dev/zero of=test.out bs=1M count=1024 oflag=direct

最終輸出如下所示:

##--blkio-weight 10
[root@tango-01 /]# docker run -ti --rm --blkio-weight 10 ubuntu
root@8f5bd8c7b853:/# time dd if=/dev/zero of=test.out bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.6883 s, 100 MB/s

real 0m10.690s
user 0m0.001s
sys 0m0.633s
root@8f5bd8c7b853:/#
##--blkio-weight 1000
[root@tango-01 testcpulimit]# docker run -ti --rm --blkio-weight 1000 ubuntu
root@0248a935fa36:/# time dd if=/dev/zero of=test.out bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.74697 s, 110 MB/s

real 0m9.839s
user 0m0.001s
sys 0m0.673s
root@0248a935fa36:/#

2)device-write-bps

使用下面的命令創建容器,並執行命令驗證寫速度的限制。

docker run -tid –name disk1 –device-write-bps /dev/sda:1mb ubuntu

通過dd來驗證寫速度,輸出如下圖示:

[root@tango-01 /]# docker run -tid --name disk1 --device-write-bps /dev/sda:1mb ubuntu
33c0cac7c8966e2d16850f9239b2e354c169a275199ed2c5900dfe1959232c19
[root@tango-01 /]# docker exec -ti disk1 bash
root@33c0cac7c896:/# dd if=/dev/zero of=test.out bs=1M count=100 oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 100.003 s, 1.0 MB/s

可以看到容器的寫磁碟速度被成功地限制到了1MB/s。

參考資料

https://docs.docker.com/storage/volumes/

https://www.cnblogs.com/kevingrace/p/6238195.html

https://www.cnblogs.com/zhuochong/p/9728383.html

https://blog.csdn.net/songcf_faith/article/details/82749011

https://blog.csdn.net/songcf_faith/article/details/82748987

相關焦點

  • docker技術篇-數據卷管理
    用戶在使用Docker的過程中,往往會涉及到數據的備份,容器間數據共享,在此我們介紹一下容器的數據管理操作。
  • ​Docker 數據卷的管理及自動構建docker鏡像
    掛載時創建卷[root@docker01 ~]# docker run -d -p 80:80
  • Docker - 數據管理
    如:把 lxfubuntu1 容器中 /data 目錄下的 lxf.sh 文件,拷貝到宿主機 ~/lxf/ 目錄下docker cp lxfubuntu1:/data/lxf.sh ~/lxf/數據卷管理數據卷管理就是將容器的某個目錄,映射到宿主機,作為數據存儲同步的目錄命令
  • Docker 容器資源管理,你真的學會了嗎?
    要想了解容器的核心原理,甚至自己動手寫容器,不深入了解容器資源管理的相關的內容是絕對不行的。本文將以容器資源管理為主題,解決以下三個問題:哪些分配給容器的資源可被我們管理?容器實際使用了多少資源?如何對容器使用的資源進行管理?
  • 上手 Docker 容器數據管理
    在這一篇文章中,我們將帶你通過理論和實戰的方式掌握 Docker 的兩種常用的數據管理方式:數據卷(Volume)和綁定掛載(Bind Mount),從而能夠遊刃有餘地處理好數據,為你的應用提供強有力的支撐和保障。
  • Docker集群管理之Docker Compose
    同時資料庫解決方案也在發生在變化,多種持久化混合方案(Polyglot Persistence)提倡將數據存放在最適合的資料庫解決方案中,而傳統的資料庫解決方案將數據存在在同一個資料庫服務中。服務數量的增加也就意味著容器數量的增多,逐漸增加的容器數量為容器部署,運行及管理帶來了挑戰。Docker Compose的出現解決多個容器部署的問題並提高了多個容器解決方案的可移植性。
  • (附Docker學習資源匯總)
    數據卷可以提供很多有用的特性,如下所示:數據卷可以在容器之間共享和重用,容器間傳遞數據將變得高效方便;對數據卷內數據的修改會立馬生效,無論是容器內操作還是本地操作;對數據卷的更新不會影響鏡像,解耦了應用和數據;卷會一直存在,直到沒有容器使用,可以安全地卸載它。
  • 雲計算核心技術Docker教程:Docker CPU管理
    來源:TechWeb.com.cnDocker在默認情況下,容器使用的資源是不受限制的。也就是可以使用主機內核調度器所允許的最大資源。如果不對容器可以使用的 CPU 資源進行限制,一旦發生容器內程序異常使用 CPU 的情況,很可能把整個主機的 CPU 資源耗盡,從而導致更大的災難。本文將介紹如何設置容器可以使用的 CPU 資源。Docker 的資源限制和隔離完全基於 Linux cgroups。對 CPU 資源的限制方式也和 cgroups 相同。
  • 巧用Docker Volume:數據備份的新潮流!
    >本文可全文轉載,但需要保留原作者和出處。創建數據卷在運行容器之前,先使用docker volume create 創建一個數據卷,用於掛載映射mysql容器數據文件:[root用docker 數據卷,我們只用關心文件!很簡單的備份方式,將mysql_data 目錄打包,並上傳到ftp或者docker倉庫(我們選用後者)。
  • Docker圖形化工具:Portainer
    Docker圖形化工具:Portainer 平時我們常常對著shell對著這些命令行客戶端,審美會很疲勞,如果有漂亮的圖形化界面可以直觀查看docker資源信息,也是非常方便的。今天我們就搭建單機版的某些常用圖形頁面管理工具。
  • 攻擊和審計Docker容器01
    </title>2、Docker管理學習一些命令更好的管理鏡像和容器2.1 Inspecting container or imagesdocker inspect: 獲取容器/鏡像的元數據。
  • 全網最系統、最清晰的Docker和K8s,深入微服務架構,就在今天
    容器中管理數據主要有兩種方式:數據卷(Data Volumes);數據卷容器(Data Volumes Dontainers )。因此,容器刪除時,不會刪除其掛載的數據卷,也不會存在類似的垃圾機制對容器存在的數據卷進行處理。數據卷的特性:數據卷在容器啟動時初始化,如果容器使用的鏡像在掛載點包含了數據,這些數據會複製到新初始化的數據卷中。數據卷可以在容器之間共享和重用。
  • Docker常用命令就該這麼學!
    Docker 是一個用於開發,交付和運行應用程式的開放平臺。Docker 使您能夠將應用程式與基礎架構分開,從而可以快速交付軟體。 藉助 Docker,您可以與管理應用程式相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
  • Docker入門知識|Docker資源容器 與 VM虛擬機的區別與聯繫
    身體大數據時代,我們幾乎每個人都得了解一下虛擬機與大數據平臺。趨勢如此,要不什麼也很難前行。的確如此,從網格運算思想的出現,再到了後來virtual-box、VMware、kvm、virtual PC等等方案。到了前兩年,也許是因為是亞馬遜公司太過尊大,虛擬機的集成方案cloudstack、openstack、zstack應運而生。
  • CoreOS實踐指南(七):Docker容器管理服務
    本文將主要介紹在具體的場景下,如何在CoreOS中恰當的管理Docker容器。事實上,Android實現沙盒同樣的基於Linux內核的cgroup和namespace機制用於限制和隔離資源的使用,所使用的技術與Docker如出一轍。這些早在Linux 2.6.x版本就已經加入了的新特性,已經通過了較長時間的檢驗,被證實是可行並且可靠的。
  • 搭建前端開發環境――docker篇
    docker暴露出來的埠進行請求轉發,這樣後端的開發機上面只需要安裝docker就能夠訪問前端的靜態資源,不需要訪問前端開發機。 其次,Docker 中最重要的三個概念是 Container(容器)、Image(鏡像)和 Volume(卷)。 Image 是靜態內容,如果你要把某個 Image 跑起來,那就需要一個 Container。這裡面有一點很重要:Container 中所做的改動不會保存到 Image。
  • 不懂這些知識點,你還好意思說懂 Docker?
    作者 | 唐華敏(華敏)  阿里雲容器平臺技術專家本文整理自《CNCF x Alibaba 雲原生技術公開課》第 15 講,點擊「閱讀原文
  • Java架構進階Docker實戰,看完我成功拿到了字節跳動的offer
    由於篇幅限制,文末有這電子書文檔的領取方式這個電子書的適用人群:這裡可以根據軟體需求劃分出一些能閱讀本書的用戶團體:DocKer用戶和愛好者DocKer代碼開發自願者>什麼是dockerdocker解決了什麼問題為什麼docker如此重要何時何處使用docker案例"Hello World"
  • 雲計算核心技術Docker教程:docker-compose命令up,run以及start...
    通常,您需要docker-compose up。使用up啟動或重新啟動所有定義的服務docker-compose.yml。該docker-compose up命令匯總每個容器的輸出(本質上是docker-compose logs -f)。當命令退出時,所有容器都將停止。
  • 從Docker Machine到K8S:容器管理為啥有這麼多工具?
    OS以及以上的容器層;有些場景下,例如企業需要構建容器雲平臺,就需要將整個數據中心的資源統籌調度進行資源抽象和任務調度,這個時候你就需要Mesos了。Mesos可以將整個數據中心的資源(包括CPU、內存、存儲、網絡等)進行抽象和調度,使得多個應用同時運行在集群中分享資源,並無需關心資源的物理分布情況。如果把數據中心中的集群資源看做一臺伺服器,那麼Mesos要做的事情,其實就是今天作業系統內核的職責:「抽象資源+調度任務」。