Docker入门
Docker入门,来自Docker官方文档 《Docker User Guide》
Docker安装
参见之前的博文
使用Docker Hub
从Docker Hub中下载镜像比较慢,可以从docker.cn网站下载。
docker@boot2docker:~$ sudo docker pull docker.cn/docker/ubuntu Pulling repository docker.cn/docker/ubuntu b39b81afc8ca: Download complete 511136ea3c5a: Download complete 53f858aaaf03: Download complete 837339b91538: Download complete 615c102e2290: Download complete Status: Downloaded newer image for docker.cn/docker/ubuntu:latest
查看本机镜像
docker@boot2docker:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.cn/docker/ubuntu 14.04 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu 14.04.1 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu trusty b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu latest b39b81afc8ca 2 weeks ago 192.7 MB
打包应用:Hello, World
Hillo World
可以在容器中直接运行命令:
docker@boot2docker:~$ sudo docker run docker.cn/docker/centos:7 /bin/echo 'Hello world' Hello world
交互容器
在容器中运行可交互的终端
docker@boot2docker:~$ sudo docker run -t -i docker.cn/docker/ubuntu:14.04 /bin/bash root@5a8de7e19c28:/# root@5a8de7e19c28:/# pwd / root@5a8de7e19c28:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
守护程序
使用选项-d创建后台运行的容器
docker@boot2docker:~$ sudo docker run -d docker.cn/docker/ubuntu:14.04 /bin/bash -c "while true; do echo hello world; sleep 1; done" a920deccbc11b5c21cd2d21503e300db3ee731541004475072cfcdd90cd46675
返回的字符串为容器的ID号。
查看当前容器:docker ps
docker@boot2docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a920deccbc11 docker.cn/docker/ubuntu:14.04 "/bin/bash -c 'while 40 seconds ago Up 40 seconds prickly_lumiere
NAMES是自动生成的容器名,可以使用参数人为指定。
查看某个容器的输出:docker logs
docker@boot2docker:~$ sudo docker logs prickly_lumiere hello world hello world hello world hello world hello world hello world
停止容器运行:docker stop
docker@boot2docker:~$ sudo docker stop prickly_lumiere prickly_lumiere
操控容器
在容器中运行web应用
docker@boot2docker:~$ sudo docker run -d -P training/webapp python app.py bc1bc53376983ca3129d2d8a05184be3f5fdd1442e04ad019e8d71f917b3e4e2
参数-P表示让Docker自动将容器所有需要的端口映射到宿主机上。
查看web应用容器
docker@boot2docker:~$ sudo docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc1bc5337698 training/webapp:latest "python app.py" 18 seconds ago Up 18 seconds 0.0.0.0:49153->5000/tcp sick_kirch
PORTS列显示将容器内的5000端口映射到宿主机的49153端口,这就是应为设置-P选项。
可以用-p选项指定映射的端口:
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
查看web应用日志
使用-f选项动态更新
docker@boot2docker:~$ sudo docker logs -f sick_kirch * Running on //0.0.0.0:5000/ 172.17.42.1 - - [04/Feb/2015 12:57:50] "GET / HTTP/1.1" 200 -
查看web应用容器进程
docker@boot2docker:~$ sudo docker top sick_kirch PID USER COMMAND 1996 root python app.py
查看web应用容器
docker@boot2docker:~$ sudo docker inspect sick_kirch
[{
"AppArmorProfile": "",
"Args": [
"app.py"
],
"Config": {
"AttachStderr": false,
"AttachStdin": false,
"AttachStdout": false,
"Cmd": [
"python",
"app.py"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": null,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"ExposedPorts": {
"5000/tcp": {}
},
"Hostname": "bc1bc5337698",
"Image": "training/webapp",
"MacAddress": "",
"Memory": 0,
"MemorySwap": 0,
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": false,
"PortSpecs": null,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": null,
"WorkingDir": "/opt/webapp"
},
"Created": "2015-02-04T12:56:20.532265159Z",
"Driver": "aufs",
"ExecDriver": "native-0.2",
"HostConfig": {
"Binds": null,
"CapAdd": null,
"CapDrop": null,
"ContainerIDFile": "",
"Devices": [],
"Dns": null,
"DnsSearch": null,
"ExtraHosts": null,
"IpcMode": "",
"Links": null,
"LxcConf": [],
"NetworkMode": "bridge",
"PortBindings": {},
"Privileged": false,
"PublishAllPorts": true,
"RestartPolicy": {
"MaximumRetryCount": 0,
"Name": ""
},
"SecurityOpt": null,
"VolumesFrom": null
},
"HostnamePath": "/mnt/sda1/var/lib/docker/containers/bc1bc53376983ca3129d2d8a05184be3f5fdd1442e04ad019e8d71f917b3e4e2/hostname",
"HostsPath": "/mnt/sda1/var/lib/docker/containers/bc1bc53376983ca3129d2d8a05184be3f5fdd1442e04ad019e8d71f917b3e4e2/hosts",
"Id": "bc1bc53376983ca3129d2d8a05184be3f5fdd1442e04ad019e8d71f917b3e4e2",
"Image": "31fa814ba25ae3426f8710df7a48d567d4022527ef2c14964bb8bc45e653417c",
"MountLabel": "",
"Name": "/sick_kirch",
"NetworkSettings": {
"Bridge": "docker0",
"Gateway": "172.17.42.1",
"IPAddress": "172.17.0.5",
"IPPrefixLen": 16,
"MacAddress": "02:42:ac:11:00:05",
"PortMapping": null,
"Ports": {
"5000/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "49153"
}
]
}
},
"Path": "python",
"ProcessLabel": "",
"ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/bc1bc53376983ca3129d2d8a05184be3f5fdd1442e04ad019e8d71f917b3e4e2/resolv.conf",
"State": {
"Error": "",
"ExitCode": 0,
"FinishedAt": "0001-01-01T00:00:00Z",
"OOMKilled": false,
"Paused": false,
"Pid": 1996,
"Restarting": false,
"Running": true,
"StartedAt": "2015-02-04T12:56:20.831535966Z"
},
"Volumes": {},
"VolumesRW": {}
}
]停止容器
docker@boot2docker:~$ sudo docker stop sick_kirch sick_kirch docker@boot2docker:~$ sudo docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc1bc5337698 training/webapp:latest "python app.py" 6 minutes ago Exited (-1) 28 seconds ago sick_kirch
重新启动容器
docker@boot2docker:~$ sudo docker start sick_kirch sick_kirch docker@boot2docker:~$ docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc1bc5337698 training/webapp:latest "python app.py" 11 hours ago Up 25 seconds 0.0.0.0:49154->5000/tcp sick_kirch
也可以使用docker restart重新启动。
删除容器
删除正在运行的容器会出错
docker@boot2docker:~$ sudo docker rm sick_kirch Error response from daemon: You cannot remove a running container. Stop the container before attempting removal or use -f FATA[0000] Error: failed to remove one or more containers
需要先停止容器
docker@boot2docker:~$ sudo docker stop sick_kirch sick_kirch docker@boot2docker:~$ sudo docker rm sick_kirch sick_kirch
操控docker镜像
列出宿主机上的所有docker镜像
docker@boot2docker:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.cn/docker/ubuntu 14.04 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu 14.04.1 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu latest b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu trusty b39b81afc8ca 2 weeks ago 192.7 MB training/webapp latest 31fa814ba25a 8 months ago 278.8 MB
使用image时最好指定标签。
获取镜像
docker@boot2docker:~$ sudo docker pull training/sinatra Pulling repository training/sinatra f0f4ab557f95: Download complete f0f4ab557f95: Pulling image (latest) from training/sinatra 3e76c0a80540: Download complete be88c4c27e80: Download complete bfab314f3b76: Download complete e809f156dc98: Download complete ce80548340bb: Download complete 79e6bf39f993: Download complete Status: Downloaded newer image for training/sinatra:latest
查找镜像
docker@boot2docker:~$ sudo docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is an open source key-value store th... 483 [OK] dockerfile/redis Trusted automated Redis (//redis.io/)... 84 [OK] …
创建自己的镜像
docker@boot2docker:~$ sudo docker run -t -i training/sinatra /bin/bash root@1ed4657f2410:/# gem install json Fetching: json-1.8.2.gem (100%) Building native extensions. This could take a while... Successfully installed json-1.8.2 1 gem installed Installing ri documentation for json-1.8.2... Installing RDoc documentation for json-1.8.2... root@1ed4657f2410:/# exit exit
提交镜像
docker@boot2docker:~$ sudo docker commit -m "Added json gem" -a "Perilla Roc" 1ed4657f2410 perillaroc/sinatra:v2 25391254d3343d1aab9595fd3581ce8d5c1992214eb6b307b7321107a02c4de2
查看是否生成镜像
docker@boot2docker:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE perillaroc/sinatra v2 25391254d334 22 seconds ago 451.9 MB docker.cn/docker/ubuntu 14.04 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu 14.04.1 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu latest b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu trusty b39b81afc8ca 2 weeks ago 192.7 MB training/sinatra latest f0f4ab557f95 8 months ago 447 MB training/webapp latest 31fa814ba25a 8 months ago 278.8 MB
从Dockerfile创建镜像
折腾一上午没有搞定ubuntu,更新时总出错。只好改为用centos。
gem安装时也需要添加国内淘宝源地址,删掉原有的地址。
Dockerfile
ROM docker.cn/docker/centos:7 MAINTAINER Perilla Roc <perillaroch@gmail.com> RUN yum install -y ruby ruby-dev RUN gem sources --remove https://rubygems.org/ RUN gem sources -a //ruby.taobao.org/ RUN gem install sinatra
创建镜像
docker@boot2docker:~/sinatra$ sudo docker build -t perillaroc/sinatra:v2 . Sending build context to Docker daemon 3.584 kB Sending build context to Docker daemon Step 0 : FROM docker.cn/docker/centos:7 ---> 8efe422e6104 Step 1 : MAINTAINER Perilla Roc <perillaroch@gmail.com> ---> Using cache ---> beabb310825d Step 2 : RUN yum install -y ruby ruby-dev ---> Using cache ---> dc2dd2888cee Step 3 : RUN gem sources -a //ruby.taobao.org/ ---> Running in e3d2f7198396 //ruby.taobao.org/ added to sources ---> 3854da67967c Removing intermediate container e3d2f7198396 Step 4 : RUN gem install sinatra ---> Running in 3c635f2ee88e docker@boot2docker:~/sinatra$ vi Dockerfile docker@boot2docker:~/sinatra$ sudo docker build -t perillaroc/sinatra:v2 . Sending build context to Docker daemon 3.584 kB Sending build context to Docker daemon Step 0 : FROM docker.cn/docker/centos:7 ---> 8efe422e6104 Step 1 : MAINTAINER Perilla Roc <perillaroch@gmail.com> ---> Using cache ---> beabb310825d Step 2 : RUN yum install -y ruby ruby-dev ---> Using cache ---> dc2dd2888cee Step 3 : RUN gem sources --remove https://rubygems.org/ ---> Running in cc78a36ba221 https://rubygems.org/ removed from sources ---> 351a2610b26e Removing intermediate container cc78a36ba221 Step 4 : RUN gem sources -a //ruby.taobao.org/ ---> Running in 52036271a4a8 //ruby.taobao.org/ added to sources ---> 25bc1357a6b3 Removing intermediate container 52036271a4a8 Step 5 : RUN gem install sinatra ---> Running in c52754722cd8 unable to convert "\x89" from ASCII-8BIT to UTF-8 for lib/sinatra/images/404.png, skipping unable to convert "\x89" from ASCII-8BIT to UTF-8 for lib/sinatra/images/500.png, skipping Successfully installed rack-1.6.0 Successfully installed tilt-1.4.1 Successfully installed rack-protection-1.5.3 Successfully installed sinatra-1.4.5 Parsing documentation for rack-1.6.0 Installing ri documentation for rack-1.6.0 Parsing documentation for tilt-1.4.1 Installing ri documentation for tilt-1.4.1 Parsing documentation for rack-protection-1.5.3 Installing ri documentation for rack-protection-1.5.3 Parsing documentation for sinatra-1.4.5 Installing ri documentation for sinatra-1.4.5 4 gems installed ---> ad9bcb3d31e8 Removing intermediate container c52754722cd8 Successfully built ad9bcb3d31e8
当前镜像
docker@boot2docker:~/sinatra$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE perillaroc/sinatra v2 ad9bcb3d31e8 30 minutes ago 329.4 MB ubuntu 14.04 5ba9dab47459 7 days ago 188.3 MB docker.cn/docker/ubuntu 14.04 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu 14.04.1 b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu latest b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/ubuntu trusty b39b81afc8ca 2 weeks ago 192.7 MB docker.cn/docker/centos latest 8efe422e6104 4 weeks ago 210 MB docker.cn/docker/centos 7 8efe422e6104 4 weeks ago 210 MB docker.cn/docker/centos centos7 8efe422e6104 4 weeks ago 210 MB training/sinatra latest f0f4ab557f95 8 months ago 447 MB training/webapp latest 31fa814ba25a 8 months ago 278.8 MB
设置镜像标签
docker@boot2docker:~/sinatra$ sudo docker tag ad9bcb3d31e8 perillaroc/sinatra:devel docker@boot2docker:~/sinatra$ sudo docker images perillaroc/sinatra REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE perillaroc/sinatra v2 ad9bcb3d31e8 33 minutes ago 329.4 MB perillaroc/sinatra devel ad9bcb3d31e8 33 minutes ago 329.4 MB
上传镜像
上传镜像到Docker Hub
docker@boot2docker:~/sinatra$ sudo docker push perillaroc/sinatra
从宿主机删除镜像
docker@boot2docker:~$ docker rmi training/sinatra Untagged: training/sinatra:latest Deleted: f0f4ab557f954f3e04177663a3af90e88641bcdcce1f02ac900dbd9768ef4945 Deleted: 79e6bf39f99322cc062a79bec4a09de0dd19cb7f5f735b4b6b7832c04b13bb45 Deleted: ce80548340bb03726d391bb8fa4d134f8418c2fff90be9a7323560debdea9bd2 Deleted: e809f156dc985e07105fdc86ec05eb03eb7aac8636dc210e8595d31b55787f4a Deleted: bfab314f3b766eddf9778f8dce089f44e84ea028f4a44ce68740dce81a844ec8 Deleted: be88c4c27e80023b6aea82f0f2e15fb21c6f4193fe814e5b58010d356dd7846b Deleted: 3e76c0a80540a0d36493ae7110796fc92f559a191454e3ac19c1d4c650bdd9e0
链接容器
之前介绍过可以通过端口链接docker容器,本节先复习网络端口映射方法,再介绍一种新的方法:容器链接。
网络端口映射
-P参数
docker@boot2docker:~$ sudo docker run -d -P training/webapp python app.py 65137a2370b0c34c2a44f0b48e0d71324a4799e2551d64ea7938a2c20132a0d1 docker@boot2docker:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65137a2370b0 training/webapp:latest "python app.py" 10 seconds ago Up 9 seconds 0.0.0.0:49155->5000/tcp determined_poincare
-p参数
docker@boot2docker:~$ sudo docker run -d -p 5000:5000 training/webapp python app.py 43d21d4291b8df1950fd5e8fcdb4edb3698cec43dd5264023d399ec2f0f58756 docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 43d21d4291b8 training/webapp:latest "python app.py" 13 seconds ago Up 13 seconds 0.0.0.0:5000->5000/tcp insane_stallman 65137a2370b0 training/webapp:latest "python app.py" 4 minutes ago Up 4 minutes 0.0.0.0:49155->5000/tcp determined_poincare
指定ip地址+端口
docker@boot2docker:~$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py b6499e6e79ad4236e728fedbc0b40607dea08fa9081a9a2bee1c3c81f8cf2e9f docker@boot2docker:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b6499e6e79ad training/webapp:latest "python app.py" 9 seconds ago Up 8 seconds 127.0.0.1:5000->5000/tcp ecstatic_darwin
使用udp
docker@boot2docker:~$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py e83db66af8dcb5fd785e37212b4e87d07fa88f8d72e03a99cdf0f81cbff0c916 docker@boot2docker:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e83db66af8dc training/webapp:latest "python app.py" 8 seconds ago Up 7 seconds 5000/tcp, 127.0.0.1:5000->5000/udp compassionate_ptolemy
查看端口映射
docker@boot2docker:~$ docker port insane_stallman 5000 0.0.0.0:5000
容器链接
容器命名
容器链接需要用到容器名,之前已经看到docker会自动给容器命名,也可以使用–name给容器命名。
docker@boot2docker:~$ sudo docker run -d -P --name web training/webapp python app.py f40febde7b8df75c3b3af89e81daac88f662f1e0ecf8b8eb43690a5ad68ddd12 docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f40febde7b8d training/webapp:latest "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:49156->5000/tcp web
容器链接
运行postgres镜像,并命名为db
ocker@boot2docker:~$ sudo docker run -d --name db training/postgres Unable to find image 'training/postgres:latest' locally Pulling repository training/postgres 258105bea10d: Download complete 258105bea10d: Pulling image (latest) from training/postgres 35f6dd4dd141: Download complete 7baf0ef6f14a: Download complete e497c7c1bfbb: Download complete 5cf8fd909c6c: Download complete 8726e050fbc9: Download complete 043c01407567: Download complete 65a89e6a06f8: Download complete 6af9ddfabfd3: Download complete 316f4525806b: Download complete bfbc096044e3: Download complete 444db2eae2c3: Download complete e06e512105c3: Download complete Status: Downloaded newer image for training/postgres:latest 50a082a75f0249c3e1210232fdc11a84abff6b1dfc447641bd00940a51d40df7
删除之前创建的web容器
docker@boot2docker:~$ sudo docker rm -f web web
创建web容器,连接db容器
docker@boot2docker:~$ sudo docker run -d -P --name web --link db:db training/webapp python app.py 75236101aa2e87dbac0df57d531213833da0d9dd1f1e545e868e774c4eae064d
查看信息
docker@boot2docker:~$ sudo docker inspect -f "{{ .HostConfig.Links }}" web
[/db:/web/db]容器链接使得源容器向目标容器提供信息,两种方式暴露信息:
环境变量
更新/etc/hosts文件
环境变量
详情参看docker文档
docker@boot2docker:~$ sudo docker run --rm --name web2 --link db:db training/webapp env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=10280270bd64 DB_PORT=tcp://172.17.0.45:5432 DB_PORT_5432_TCP=tcp://172.17.0.45:5432 DB_PORT_5432_TCP_ADDR=172.17.0.45 DB_PORT_5432_TCP_PORT=5432 DB_PORT_5432_TCP_PROTO=tcp DB_NAME=/web2/db DB_ENV_PG_VERSION=9.3 HOME=/
推荐使用hosts方式
更新/etc/hosts文件
打开一个容器终端
docker@boot2docker:~$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash root@06a865e78435:/opt/webapp#
查看hosts文件
root@06a865e78435:/opt/webapp# cat /etc/hosts 172.17.0.48 06a865e78435 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.45 db
测试
root@06a865e78435:/opt/webapp# apt-get install -yqq inetutils-ping root@06a865e78435:/opt/webapp# ping db PING db (172.17.0.45): 48 data bytes 56 bytes from 172.17.0.45: icmp_seq=0 ttl=64 time=0.214 ms 56 bytes from 172.17.0.45: icmp_seq=1 ttl=64 time=0.093 ms 56 bytes from 172.17.0.45: icmp_seq=2 ttl=64 time=0.121 ms ^C--- db ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.093/0.143/0.214/0.052 ms
重启source容器,连接容器的hosts会自动更新
docker@boot2docker:~$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash root@a9222435bf31:/opt/webapp# cat /etc/hosts 172.17.0.50 a9222435bf31 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.49 db
另一个窗口中重启源容器
docker@boot2docker:~$ docker restart db db
当前窗口再次查看hosts
root@a9222435bf31:/opt/webapp# cat /etc/hosts 172.17.0.50 a9222435bf31 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.51 db
操控容器中的数据
两种方式:
Data volumes
Data volume containers
Data volumes
添加data volumes
docker@boot2docker:~$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py 98ae22fa1d6b4f36e98785034574130d394015ff330378752458a1b582870828
Dockerfile中使用VOLUME设置
挂载主机目录
docker@boot2docker:~$ sudo docker run -d -P --name web -v /opt/webapp:/opt/webapp training/webapp python app.py
ad27c5b88dacaf969f2abcefccd70297c478ffe06d9987fb70653820a299014a
docker@boot2docker:~$ docker inspect web
…
"HostConfig": {
"Binds": [
"/opt/webapp:/opt/webapp"
],
…只读挂载
docker@boot2docker:~$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
fe5f6051d4d26acc07585f79837f26011c3d123c841a61f9119d153c822ef646
"HostConfig": {
"Binds": [
"/src/webapp:/opt/webapp:ro"
],挂载文件
可以挂载文件,但推荐挂载父目录
创建并加载Data volume container
docker@boot2docker:~$ sudo docker create -v /dbdata --name dbdata training/postgres 977e296a5c1581b86c2598d86853e529d66155ccf51e83fe5a14ddb62b9cf713 docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 977e296a5c15 training/postgres:latest "su postgres -c '/us 2 seconds ago dbdata 50a082a75f02 training/postgres:latest "su postgres -c '/us 14 hours ago Up 13 hours 5432/tcp db docker@boot2docker:~$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres df092111f49caea21bec767c37224d86a9eff068368756295c43e7df4b426c87 docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES df092111f49c training/postgres:latest "su postgres -c '/us 4 seconds ago Up 3 seconds 5432/tcp db1 977e296a5c15 training/postgres:latest "su postgres -c '/us 30 seconds ago dbdata 50a082a75f02 training/postgres:latest "su postgres -c '/us 14 hours ago Up 13 hours 5432/tcp db docker@boot2docker:~$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres 0f65c4d1fe52ad30a15c1da57fb872a1bacbe3f986d5e9f7bfbd287564cead29 docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f65c4d1fe52 training/postgres:latest "su postgres -c '/us 2 seconds ago Up 2 seconds 5432/tcp db2 df092111f49c training/postgres:latest "su postgres -c '/us 24 seconds ago Up 24 seconds 5432/tcp db1 977e296a5c15 training/postgres:latest "su postgres -c '/us 50 seconds ago dbdata 50a082a75f02 training/postgres:latest "su postgres -c '/us 14 hours ago Up 13 hours 5432/tcp db docker@boot2docker:~$ sudo docker run -d --name db3 --volumes-from db1 training/postgres f7209c0ec9ff210e0260a830eb79088c009d6ca934c1ac3400e0451a5283c749 docker@boot2docker:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7209c0ec9ff training/postgres:latest "su postgres -c '/us 2 seconds ago Up 1 seconds 5432/tcp db3 0f65c4d1fe52 training/postgres:latest "su postgres -c '/us 24 seconds ago Up 23 seconds 5432/tcp db2 df092111f49c training/postgres:latest "su postgres -c '/us 46 seconds ago Up 45 seconds 5432/tcp db1 977e296a5c15 training/postgres:latest "su postgres -c '/us About a minute ago dbdata 50a082a75f02 training/postgres:latest "su postgres -c '/us 14 hours ago Up 13 hours 5432/tcp db
备份、恢复或迁移data volume
备份
docker@boot2docker:~$ sudo docker run --volumes-from dbdata -v $(pwd):/backup docker.cn/docker/ubuntu tar cvf /backup/backup.tar /dbdata tar: Removing leading `/' from member names /dbdata/
恢复
docker@boot2docker:~$ sudo docker run -v /dbdata --name dbdata2 docker.cn/docker/ubuntu /bin/bash docker@boot2docker:~$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
该部分还没有实际应用过,待以后补充。
