1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
===
参考资料:
Docker 和一个正常的虚拟机有何区别?http:
//developer
.51cto.com
/art/201312/421964
.htm
全球首部Docker书籍:让你迈出使用Docker的第一步(1) http:
//cloud
.51cto.com
/art/201412/461998
.htm
docker镜像与容器存储结构分析 http:
//www
.csdn123.com
/html/topnews201408/94/7494
.htm
===
[root@test01 download]
# yum update
【】安装
[root@test01 download]
# yum install docker-io
[root@test01 download]
# docker -v
Docker version 1.3.2, build 39fa2fa
/1
.3.2
【】启动服务
[root@test01 download]
# service docker start
【】查看状态
[root@test01 download]
# docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
Pool Name: docker-253:0-2228227-pool
Pool Blocksize: 65.54 kB
Data
file
:
/var/lib/docker/devicemapper/devicemapper/data
Metadata
file
:
/var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 305.7 MB
Data Space Total: 107.4 GB
Metadata Space Used: 733.2 kB
Metadata Space Total: 2.147 GB
Library Version: 1.02.89-RHEL6 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.el6.x86_64
Operating System: <unknown>
【】将某个用户加入到docker组,以便已非root用户来运行docker命令。
[root@test01 download]
# useradd Jack
[root@test01 download]
# usermod -a -G docker Jack
[root@test01 download]
# id Jack
uid=500(Jack) gid=500(Jack)
groups
=500(Jack),490(docker)
[root@test01 download]
# su Jack
【】查看images
[Jack@test01 download]$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
从国内的仓库docker.cn上pull一个
[Jack@test01 download]$ docker pull docker.cn
/docker/centos
Pulling repository docker.cn
/docker/centos
34943839435d: Download complete
511136ea3c5a: Download complete
5b12ef8fd570: Download complete
Status: Downloaded newer image
for
docker.cn
/docker/centos
:latest
再次查看
[Jack@test01 download]$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.cn
/docker/centos
centos7 34943839435d 5 weeks ago 224 MB
docker.cn
/docker/centos
latest 34943839435d 5 weeks ago 224 MB
[root@test01 download]
# cd /var/lib/docker/
[root@test01 docker]
# ls
containers devicemapper execdriver graph init linkgraph.db repositories-devicemapper tmp trust volumes
【】查看docker使用的镜像层次存储的driver是devicemapper
查看内容:
[root@test01 download]
# cat /var/lib/docker/repositories-devicemapper |python -mjson.tool
{
"Repositories"
: {
"docker.cn/docker/centos"
: {
"centos7"
:
"34943839435dfb2ee646b692eebb06af13823a680ace00c0adc232c437c4f90c"
,
"latest"
:
"34943839435dfb2ee646b692eebb06af13823a680ace00c0adc232c437c4f90c"
}
}
}
Device mapper driver 会创建一个100G的简单文件包含你的镜像和容器。每一个容器被限制在10G大小的卷内。
磁盘占用:100G不是实际占用,556M才是。
[root@test01 devicemapper]
# cd devicemapper/devicemapper
[root@test01 devicemapper]
# ll -h
total 556M
-rw------- 1 root root 100G Jan 7 14:52 data
-rw------- 1 root root 2.0G Jan 7 19:13 metadata
【】启动一个容器:
语法:
docker run -it -d --name Container_Name REPOSITORY:TAG CMD
-i:开启容器中STDIN
-t:分配一个
tty
来提供一个交互式shell
-d:后台模式
--name: 容器名
[Jack@test01 download]$ docker run -it docker.cn
/docker/centos
/bin/bash
[root@896725223c75 /]
# ip a
13: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link
/loopback
00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1
/8
scope host lo
inet6 ::1
/128
scope host
valid_lft forever preferred_lft forever
14: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link
/ether
02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.4
/16
scope global eth0
inet6 fe80::42:acff:fe11:4
/64
scope link
valid_lft forever preferred_lft forever
[root@896725223c75 /]
# cat /etc/hosts
172.17.0.4 896725223c75
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
该选项指定容器名
[Jack@test01 download]$ docker run --name
test
-docker-01
【】如何用TAG
可以这样:
[Jack@test01 download]$ docker run -it docker.cn
/docker/centos
/bin/bash
也可以这样:
[Jack@test01 download]$ docker run -it docker.cn
/docker/centos
:centos7
/bin/bash
[Jack@test01 download]$ docker run -it docker.cn
/docker/centos
:7
/bin/bash
不能这样:
[Jack@server200-21 ~]$ docker run -it docker.cn
/docker/centos
:centos
/bin/bash
Unable to
find
image
'docker.cn/docker/centos:centos'
locally
Pulling repository docker.cn
/docker/centos
FATA[0000] Tag centos not found
in
repository docker.cn
/docker/centos
【】查看docker进程
docker
ps
-l 该选项会列出最后一次运行的容器,包括正在运行和已经停止的。
docker
ps
-a 显示全部容器
docker
ps
-n 2 显示最近2个容器
[Jack@test01 download]$ docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
896725223c75 docker.cn
/docker/centos
:centos7
"/bin/bash"
3 minutes ago Exited (127) 2 seconds ago condescending_morse
3eb4e1567db2 docker.cn
/docker/centos
:centos7
"/bin/bash"
9 minutes ago Exited (0) 8 minutes ago jolly_archimedes
8a4f4b9e5984 docker.cn
/docker/centos
:centos7
"/bin/bash"
11 minutes ago Exited (0) 10 minutes ago
test
-docker-01
【】重新启动已经停止的容器
[Jack@test01 download]$ docker start
test
-docker-01
test
-docker-01
[Jack@test01 download]$ docker
ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a4f4b9e5984 docker.cn
/docker/centos
:centos7
"/bin/bash"
14 minutes ago Up 22 seconds
test
-docker-01
Docker容器重新启动的时候,会沿用docker run命令时指定的参数来运行,因此我们容器重新启动后会运行一个交互式会话shell。此外,我们也可以用docker attach命令,重新附着到该容器的会话上
[Jack@test01 download]$ docker attach
test
-docker-01
[root@8a4f4b9e5984 /]
# exit
【】守护式容器
除了这些交互式运行的容器(interactive container),我们也可以创建长期运行的容器。
守护式容器 (daemonized container) 没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器。
[Jack@test01 docker]$ docker run --name
test
-docker02-daemon -d docker.cn
/docker/centos
/bin/bash
-c
"while true; do echo hello world; sleep 1; done"
589a71825c044120a5729dca24154dd32c257bfa529d83966a931ea67e2d058f
【】使用logs来查看容器的日志
[Jack@test01 docker]$ docker logs
test
-docker02-daemon
hello world
hello world
类似
tail
-n
[Jack@test01 docker]$ docker logs --
tail
10
test
-docker02-daemon
类似
tail
-f
[Jack@test01 docker]$ docker logs -f
test
-docker02-daemon
查看容器内的进程,类似
top
[Jack@test01 docker]$ docker
top
test
-docker02-daemon
UID PID PPID C STIME TTY TIME CMD
root 28600 26577 0 19:41 ? 00:00:00
/bin/bash
-c
while
true
;
do
echo
hello world;
sleep
1;
done
root 28898 28600 0 19:44 ? 00:00:00
sleep
1
【】在容器内部运行进程
[Jack@test01 docker]$ docker
exec
-d
test
-docker02-daemon
touch
/etc/new_file
【】启动一个诸如打开shell的交互式任务
[Jack@test01 docker]$ docker
exec
-t -i
test
-docker02-daemon
/bin/bash
[root@589a71825c04 /]
# ls /etc/new*
/etc/new_file
【】停止守护式容器
docker stop命令会向Docker容器进程发送SIGTERM信号。
docker
kill
命令来向容器进程发送SIGKILL信号。如果你想快速停止某个容器。
[Jack@test01 docker]$ docker stop
test
-docker02-daemon
test
-docker02-daemon
【】自动重启容器
docker run --restart=always --name
test
-docker03 -d docker.cn
/docker/centos
bin
/bash
-c
"while true; do echo hello world; sleep 1; done"
--restart标志被设置为always。无论容器的退出代码是什么,Docker都会自动重启该容器,除了always。
我们还可以将这个标志设为on-failure,这样,只有当容器的退出代码为非0值的时候,才会自动重启。另外,on-failure``还接受``一个可选的重启次数参数,例如:
--restart=on-failure:5
【】使用inspect得到更多信息
[Jack@test01 docker]$ docker inspect
test
-docker02-daemon
[Jack@test01 docker]$ docker inspect --help
Usage: docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
Return low-level information on a container or image
-f, --
format
=
""
Format the output using the given go template.
--help=
false
Print usage
docker inspect 某个容器名,会返回一堆json格式的数据;
可以指定-f or --
format
后边跟着key的名称,这样可以精确匹配到value
例如:得到容器app1所在的docker host的IP地址:
[Jack@test01 docker]
# docker inspect -f '{{ .NetworkSettings.IPAddress }}' app1
172.17.0.12
【】删除容器
需要注意的是,运行中的Docker容器是无法删除的!你必须先通过docker stop或docker
kill
命令停止容器,才能将其删除。
[Jack@test01 docker]$ docker
rm
test
-docker02-daemon
test
-docker02-daemon
删除所有容器
-a:列出所有容器
-q:只返回容器的ID
[Jack@test01 docker]$ docker
rm
`docker
ps
-aq`
896725223c75
3eb4e1567db2
8a4f4b9e5984
[Jack@test01 docker]$ docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1611825,如需转载请自行联系原作者