docker 是一個開源的應用容器引擎,主要利用 linux 內核 namespace 實現沙盒隔離,用cgroup 實現資源限制。html
Docker 支持三種不一樣的鏡像層次存儲的 drivers:linux
aufs、devicemapper、btrfs ;ios
Aufs:nginx
AUFS (AnotherUnionFS) 是一種 Union FS, 簡單來講就是支持將不一樣目錄掛載到同一個虛git
擬 文 件 系 統 下 (unite several directories into a single virtual filesystem) 的 文 件 系 統 。 Aufsgithub
driver 是 docker 最先支持的 driver,可是 aufs 只是 linux 內核的一個補丁集並且不太能夠會web
被合併加入到 linux 內核中。可是因爲 aufs 是惟一一個 storage driver 能夠實現容器間共享可docker
執行及可共享的運行庫, 因此當你跑成千上百個擁有相同程序代碼或者運行庫時時候,aufsubuntu
是個至關不錯的選擇。centos
Device Mapper:
Device mapper 是 Linux 2.6 內核中提供的一種從邏輯設備到物理設備的映射框架機制,在
該機制下,用戶能夠很方便的根據本身的須要制定實現存儲資源的管理策略 ( 詳
見:http://www.ibm.com/developerworks/cn/linux/l-devmapper/index.html) 。
Device mapper driver 會建立一個 100G 的簡單文件包含你的鏡像和容器。每個容器被限
制 在 10G 大 小 的 卷 內 。 ( 如 果 想 要 調 整 , 參考 :http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/ 。 中 文 譯 文 :
http://zhumeng8337797.blog.163.com/blog/static/100768914201452405120107/ )
你能夠在啓動 docker daemon 時用參數-s 指定 driver:
docker -d -s devicemapper ;
Btrfs:
Btufs driver 在 docker build 能夠很高效。可是跟 devicemapper 同樣不支持設備間共享存儲(文檔裏是 does not share executable memory between devices)。
在 沒 有 aufs 支 持 的 linux 發 行 版 本 上 (CentOS,opensuse 等 ) 安 裝 docker 可 能 就 使 用 了devicemapper driver。
安裝
[root@server docker]# rpm -ivh docker-engine-1.10.3-1.el7.centos.x86_64.rpm
warning: docker-engine-1.10.3-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:docker-engine-1.10.3-1.el7.centos################################# [100%]
[root@server docker]# systemctl start docker
[root@server docker]# docker load -i ubuntu.tar
[root@server docker]# docker p_w_picpaths
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 07c86167cdc4 14 months ago 187.9 MB
[root@server docker]# docker run -it ubuntu #-it交互模式
root@910dbd82e909:/# [root@server docker]#
[root@server docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
910dbd82e909 ubuntu "/bin/bash" 18 seconds ago Up 13 seconds adoring_lovelace
[root@foundation88 docker]# which brctl
/sbin/brctl
[root@foundation88 docker]# rpm -qf /sbin/brctl
bridge-utils-1.5-9.el7.x86_64
[root@server docker]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02428cec69f4 no veth5b3bf12
[root@server docker]# docker run -it ubuntu
root@5aace2fb8630:/# exit
exit
[root@server docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
910dbd82e909 ubuntu "/bin/bash" 8 minutes ago Up 8 minutes adoring_lovelace
[root@server docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5aace2fb8630 ubuntu "/bin/bash" 18 seconds ago Exited (0) 12 seconds ago stoic_saha
910dbd82e909 ubuntu "/bin/bash" 8 minutes ago Up 8 minutes
[root@server docker]# docker rm 5a
5a
[root@server docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
910dbd82e909 ubuntu "/bin/bash" 11 minutes ago Up 10 minutes adoring_lovelace
root@c4d727868a0b:/# [root@server docker]#
[root@server docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4d727868a0b ubuntu "/bin/bash" 26 seconds ago Up 22 seconds vm1
910dbd82e909 ubuntu "/bin/bash" 12 minutes ago Up 12 minutes adoring_lovelace
[root@server docker]# docker attach vm1
root@c4d727868a0b:/# ip addr show
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
root@c4d727868a0b:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.199 ms
[root@server ~]# ip addr
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:8c:ec:69:f4 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
[root@server docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4d727868a0b ubuntu "/bin/bash" 7 minutes ago Up 7 minutes vm1
910dbd82e909 ubuntu "/bin/bash" 19 minutes ago Up 19 minutes adoring_lovelace
[root@server docker]# docker stop 91
91
[root@server docker]# docker rm 91
91
[root@server docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4d727868a0b ubuntu "/bin/bash" 7 minutes ago Up 7 minutes vm1
[root@server docker]#
[root@server docker]# docker run -d ubuntu
de3211baa651006b40a48d6765e1c7428779e1a5b3806b379f15700971071046
[root@server docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de3211baa651 ubuntu "/bin/bash" 17 seconds ago Exited (0) 12 seconds ago determined_brown
[root@server ~]# docker stop `docker ps -aq`
fd799738de8f
c7b5d3645fc6
736d7669bb13
[root@server ~]# docker rm `docker ps -aq`
fd799738de8f
c7b5d3645fc6
736d7669bb13
刪除鏡像
[root@server ~]# docker rmi ubuntu
Untagged: ubuntu:latest
Deleted: sha256:07c86167cdc4264926fa5d2894e34a339ad27f730e8cc81a16cd21b7479e8eac
Deleted: sha256:0aaccda2aadfc70ab2248437568fd17f4e8860cf612cc4b7e154b97222dccf91
Deleted: sha256:220d2912ab1dbae4cb19007b1181991c51d7e9e71d83894f0ace0528df383eb3
Deleted: sha256:9dcfe19e941956c63860afee1bec2e2318f6fbd336bc523094ed609a9c437a01
Deleted: sha256:cc77a2e3d72c7dcb24ed23a23479e3b90ad64e3a91b2f0ce2320580979076d44
[root@server docker]# docker cp /etc/passwd vm2:/mnt/
[root@server docker]# docker attach vm2
root@2999982a1428:/# cd /mnt/
root@2999982a1428:/mnt# ls
passwd
[root@server mnt]# docker diff vm2
C /mnt
A /mnt/passwd
C /root
A /root/.bash_history
[root@server mnt]# docker history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
07c86167cdc4 14 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
220d2912ab1d 14 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB
cc77a2e3d72c 14 months ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
c8fa7cdceff3 14 months ago /bin/sh -c #(nop) ADD file:b9504126dc55908988 187.7 MB
nginx
建立容器端口映射:直接訪問本地的端口,便可實現對容器的訪問 注意:映射端口不能和本地衝突!!!
[root@server mnt]# docker run -d --name web2 -p 8000:80 nginx
f942d148a0b48148eaf2dd4f0b46f872587d4435c16ae45fbb0914ae2768c959
[root@server mnt]# netstat -antlp |grep 8000
tcp6 0 0 :::8000 :::* LISTEN 3166/docker-proxy
[kiosk@foundation88 Desktop]$ curl 172.25.88.15:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
[root@server mnt]# cat /proc/partitions major minor #blocks name 8 0 8388608 sda 8 1 512000 sda1 8 2 7875584 sda2 253 0 6991872 dm-0 253 1 839680 dm-1 7 0 104857600 loop0 7 1 2097152 loop1 253 2 104857600 dm-2 253 3 10485760 dm-3 253 4 10485760 dm-4