1
1
2
+
2
3
## 概述
3
4
- Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
4
5
- Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
5
6
6
7
## CentOS7 Docker 安装
7
8
Docker 要求 CentOS 系统的内核版本高于 3.10
8
- uname -r 命令查看你当前的内核版本
9
+
9
10
``` bash
11
+ # uname -r 命令查看你当前的内核版本
10
12
[root@izadux3fzjykx7z ~ ]# uname -r
11
- ```
12
- > 安装Docker
13
13
14
14
安装一些必要的系统工具:
15
- ``` bash
16
15
[root@izadux3fzjykx7z ~ ]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
17
- ```
16
+
18
17
添加软件源信息:
19
- ``` bash
20
18
[root@izadux3fzjykx7z ~ ]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
21
- ```
19
+
22
20
更新 yum 缓存:
23
- ``` bash
24
21
[root@izadux3fzjykx7z ~ ]# sudo yum makecache fast
25
- ```
22
+
26
23
安装 Docker-ce:
27
- ``` bash
28
24
[root@izadux3fzjykx7z ~ ]# sudo yum -y install docker-ce
29
25
```
26
+
30
27
## 启动 Docker 后台服务
31
28
``` bash
32
29
[root@izadux3fzjykx7z ~ ]# sudo systemctl start docker
33
- ```
30
+
34
31
测试运行 hello-world
35
- ``` bash
36
32
[root@izadux3fzjykx7z ~ ]# docker run hello-world
37
33
```
38
34
![ ] ( https://img-blog.csdnimg.cn/2019041017350624.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTAzOTEzNDI=,size_16,color_FFFFFF,t_70 )
@@ -53,21 +49,276 @@ uname -r 命令查看你当前的内核版本
53
49
``` bash
54
50
$ sudo yum remove docker-ce
55
51
$ sudo rm -rf /var/lib/docker
56
-
57
52
```
58
53
59
54
## Docker常用命令
60
-
61
55
列出本地镜像: docker images
62
- ```
56
+ ``` bash
63
57
docker images -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
64
58
docker images --digests :显示镜像的摘要信息;
65
59
docker images -f :显示满足条件的镜像;
66
60
docker images --format :指定返回值的模板文件;
67
61
docker images --no-trunc :显示完整的镜像信息;
68
62
docker images -q :只显示镜像ID。
69
63
```
64
+ docker pull : 从镜像仓库中拉取或者更新指定镜像
65
+ ``` bash
66
+ docker pull -a :拉取所有 tagged 镜像
67
+ docker pull --disable-content-trust :忽略镜像的校验,默认开启
68
+ docker pull java : 下载java最新版镜像
69
+ docker pull -a java
70
+
71
+ ```
72
+ docker inspec 获取容器/镜像的详细信息
73
+ ``` bash
74
+ docker inspec 94errf55dter
75
+ docker inspec 镜像ID -f :指定返回值的模板文件。
76
+ docker inspec 镜像ID -s :显示总的文件大小。
77
+ docker inspec 镜像ID --type :为指定类型返回JSON。
78
+ ```
79
+ docker search : 从Docker Hub查找镜像
80
+ ``` bash
81
+ docker search mysql
82
+
83
+ --automated :只列出 automated build类型的镜像;
84
+ --no-trunc :显示完整的镜像描述;
85
+ -s :列出收藏数不小于指定值的镜像。
86
+ ```
87
+ docker rmi : 删除本地一个或多少镜像(容器)
88
+ ``` bash
89
+ docker rmi mysql
90
+
91
+ -f :强制删除;
92
+ --no-prune :不移除该镜像的过程镜像,默认移除;
93
+ ```
94
+ docker ps : 列出容器
95
+ ![ ] ( https://img-blog.csdnimg.cn/20190419130626584.png )
96
+ ``` bash
97
+ -a :显示所有的容器,包括未运行的。
98
+ -f :根据条件过滤显示的内容。
99
+ --format :指定返回值的模板文件。
100
+ -l :显示最近创建的容器。
101
+ -n :列出最近创建的n个容器。
102
+ --no-trunc :不截断输出。
103
+ -q :静默模式,只显示容器编号。
104
+ -s :显示总的文件大小。
105
+ ```
106
+
107
+
108
+ ## 如何创建一个镜像
109
+ > 创建镜像的方法又三种:基于已有镜像的容器创建,基于本地模板导入,基于` Dockerfile ` 创建
110
+
111
+ ` docker commit ` :从容器创建一个新的镜像
112
+ ``` bash
113
+ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
114
+ -a :提交的镜像作者;
115
+ -c :使用Dockerfile指令来创建镜像;
116
+ -m :提交时的说明文字;
117
+ -p :在commit时,将容器暂停。
118
+ ` ` `
119
+
120
+ 首先启动一个镜像 为容器重新分配一个伪输入终端 以交互模式运行容器
121
+ ` ` ` bash
122
+ docker run -t i ubuntu:14.04 /bin/bash
123
+ # 运行后启动进入命令 记住容器ID
124
+ root@97cc221196d7:/#
125
+ # 创建一个test文件 并退出
126
+ root@97cc221196d7:/# touch test
127
+ root@97cc221196d7:/# exit
128
+ # 此时容易和原来的相比已经发生改变, 可以docker commit提交一个新的镜像,提交时用ID或名称指定容器
129
+ docker commit -m " add a new file is name test" -a " qxw" 97cc221196d7 test
130
+ # 成功返回新的镜像ID
131
+ sha256:342175794310960ce0b0932bb05b818fb4abc2bcc5d29824018d7783f83d76a9
132
+ # 再次查看镜像列表
133
+ [root@izadux3fzjykx7z ~ ]# docker images
134
+ REPOSITORY TAG IMAGE ID CREATED SIZE
135
+ test latest 342175794310 2 minutes ago 188MB
136
+ ubuntu 14.04 390582d83ead 5 weeks ago 188MB
137
+ hello-world latest fce289e99eb9 3 months ago 1.84kB
138
+ ` ` `
139
+
140
+ # # 存储和载入镜像
141
+ > 可以使用` docker save` 和` docker load` 来存储和载入镜像
142
+
143
+ ` docker save` : 将指定镜像保存成 tar 归档文件
144
+ ` ` ` bash
145
+ # 保存咋当前目录下
146
+ docker save -o test.tar test
147
+ ` ` `
148
+ ` docker load` : 载入一个镜像
149
+ ` ` ` bash
150
+ docker load --input test.tar
151
+ 或
152
+ docker load < test.tar
153
+ ` ` `
154
+ # # 上传镜像
155
+ docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
156
+
157
+ ` ` ` bash
158
+ # 可以先添加新的标签 user/test:latest 然后用docker push 上传
159
+ docker tag test:latest user/test:latest
160
+ docker push user/test:latest
161
+ # # 第一次使用会提示登录信息或注册
162
+ ` ` `
163
+
164
+ # # 容器的基本操作
165
+ > 容器是镜像的一个实例,所不同的是,它带有额外的可写文件层
166
+ # ## 创建容器
167
+ ` docker create` :创建一个新的容器但不启动它
168
+
169
+ ` ` ` bash
170
+ [root@izadux3fzjykx7z ~ ]$ docker create -it ubuntu:14.04
171
+ 1140d5e5a0a6b9d79adc053fc5d359209e860bf474327a52b3a8da5337173c74
172
+ ` ` `
173
+ 新建并启动容器
174
+ ` ` ` bash
175
+ [root@izadux3fzjykx7z ~ ]$ docker run ubuntu:14.04 /bin/echo ' hello world'
176
+ hello world
177
+ ` ` `
178
+
179
+ 后台启动一个容器运行
180
+ ` ` ` bash
181
+ [root@izadux3fzjykx7z ~ ]$ docker run -d ubuntu /bin/sh -c " while true;do echo hello word;sleep 1;done"
182
+ [root@izadux3fzjykx7z ~ ]$ docker ps
183
+ CONTAINER ID IMAGE
184
+ 47168308c196 ubuntu
185
+
186
+ # 获取容器的输出信息
187
+ [root@izadux3fzjykx7z ~ ]$ docker logs 471
188
+ ` ` `
189
+ # ## 终止容器
190
+ * ` docker stop` 命令来中止一个运行中的容器,它会向容器发送信号,等待一段时间后在发送信号终止器
191
+ * ` docker kill` 命令会直接中止容器
192
+ ` ` ` bash
193
+ [root@izadux3fzjykx7z ~ ]$ docker stop 471
194
+ 471
195
+ ` ` `
196
+
197
+ 查看处于中止状态的容器ID
198
+ ` ` ` bash
199
+ [root@izadux3fzjykx7z ~ ]$ docker ps -a -q
200
+ 47168308c196
201
+ 97765732ff5a
202
+ ` ` `
203
+
204
+ 处于中止的容器 可以用过 ` docker start` 重新启动
205
+ ` ` ` bash
206
+ [root@izadux3fzjykx7z ~ ]$ docker start 471
207
+ 471
208
+ ` ` `
209
+ 重启一个容器
210
+
211
+ ` ` ` bash
212
+ [root@izadux3fzjykx7z ~ ]$ docker restart 471
213
+ 471
214
+ ` ` `
215
+ # ## 如何进入容器
216
+ * ` docker attach ` :连接到正在运行中的容器。
217
+ * 当多个窗口同时attach 到同一个容器时,所有窗口都会同步显示,如果某个窗口操作的命令阻塞了,所有的窗口都会阻塞
218
+
219
+ ` ` ` bash
220
+ [root@izadux3fzjykx7z ~ ]$ docker attach 471
221
+ hello word
222
+ hello word
223
+ hello word
224
+ ` ` `
225
+ * ` docker exec` :在运行的容器中执行命令。可以直接进入容器操作命令
226
+ ` ` ` bash
227
+ [root@izadux3fzjykx7z ~ ]$ docker exec -t i 47168308c196 /bin/bash
228
+ root@47168308c196:/$ ls -l
229
+ drwxr-xr-x 2 root root 4096 Mar 7 21:01 bin
230
+ drwxr-xr-x 2 root root 4096 Apr 24 2018 boot
231
+ ......
232
+
233
+ ` ` `
234
+ # ## 删除容器
235
+ * 可以使用` docker rm` 命令删除处于终止状态的容器。命令为 ` docker rm`
236
+ * -f ,--force=false 强行终止并删除一个运行中的容器
237
+ * -l,--link=false 删除容器的链接 但保留容器
238
+ * -v,--volumes=false, 删除容器挂载的数据券
239
+
240
+ ` ` ` bash
241
+ [root@izadux3fzjykx7z ~ ]$ docker ps -a
242
+ CONTAINER ID IMAGE COMMAND CREATED
243
+ 8714bb6a3cee hello-world " /hello" 4 hours ago
244
+ [root@izadux3fzjykx7z ~ ]$ docker rm 8714 或 docker rm -f 8714
245
+ 8714
246
+ ` ` `
247
+ # ## 导入和导出容器
248
+ * ` docker export` :将文件系统作为一个tar归档文件导出。不管这个容器是否处于运行状态
249
+
250
+ ` ` ` bash
251
+ [root@izadux3fzjykx7z ~ ]$ docker export 47168 > test_stop.tar
252
+ [root@izadux3fzjykx7z ~ ]$ ls -l
253
+ -r w-r--r-- 1 root root 72308736 Apr 19 14:59 test_stop.tar
254
+ ` ` `
255
+ * 导出的容器可以使用` docker import` 导入成为镜像
256
+
257
+ ` ` ` bash
258
+ [root@izadux3fzjykx7z ~ ]$ cat test_stop.tar | docker import - test/ubuntu:v1.0
259
+ sha256:c6c6209a648fd9520fb3a9b3cfcec5f9e53bf82aeffcc2e9edba01942f7c9100
260
+ [root@izadux3fzjykx7z ~ ]$ docker images
261
+ REPOSITORY TAG IMAGE ID CREATED SIZE
262
+ test/ubuntu v1.0 c6c6209a648f 5 seconds ago 69.8MB
263
+ ` ` `
264
+ * 既可以使用` docker load` 命令导入一个镜像文件。也可以使用` docker import` 导入一个容器快照到本地镜像库。两者的区别在于:快照文件将丢弃所有的历史记录和元数据信息。而镜像存储文件将保存完整记录。体积也要大。从容器快照文件导入时可以重新指定标签等元数据信息。
265
+
266
+ # # 创建和使用私有仓库
267
+ * 官方提供了registry镜像来搭建一套本地私有仓库的环境
268
+ * ` -v` 用户指定镜像文件存储的路径 默认路径是容器的 ` /tmp/registry` 目录下
269
+ ` ` ` bash
270
+ # 自动下载并启动一个registry容器 创建一个本地私有仓库
271
+ [root@izadux3fzjykx7z ~ ]$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
272
+ # 此时本地将启动一个私有仓库,监听端口为5000
273
+ ` ` `
274
+ 然后在本地电脑上安装一个` docker` 上传镜像到服务器
275
+ ` ` ` bash
276
+ # 首先使用docker命令标记一个镜像格式为
277
+ docker tag hello-world 39.108.144.143:5000/hellp-world
278
+ # 使用docke push 上传至服务器
279
+ docker push 39.108.144.143:5000/hellp-world
280
+ ` ` `
281
+ * Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误
282
+ ! [](https://img-blog.csdnimg.cn/20190419162858537.png)
283
+ * 这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改` daemon.json` 文件
70
284
285
+ ` ` ` json
286
+ {
287
+ " registry-mirrors" : [" http://hub-mirror.c.163.com" ],
288
+ " insecure-registries" :[" 39.108.144.143:5000" ]
289
+ }
290
+ ` ` `
291
+ > 查看镜像推送结果:` curl http:39.108.144.143:5000/v1/search`
292
+ > 下载私有仓库镜像: ` docker pull 39.108.144.143:5000/hellp-world`
293
+
294
+ # # 数据管理
295
+ * 容器中管理数据主要有两种方式: 数据卷,数据卷容器
296
+
297
+ # ## 数据卷
298
+ 数据卷是一个可供容器使用的特许目录,它绕过文件系统,可以提供很多有用的特性
299
+ * 数据卷可以在容器之间共享和重用
300
+ * 对数据卷的修改会立即生效
301
+ * 对数据卷的更新,不会影响镜像
302
+ * 卷会一直存在,直到没有容器使用。数据卷的使用类似Linux目录下或文件mount操作。
303
+
304
+ ** 如何在容器中创建一个数据卷**
305
+
306
+ ` ` ` bash
307
+ # 使用training/webapp创建一个web容器,并创建一个数据卷挂载到容器的/webapp目录
308
+ [root@izadux3fzjykx7z ~ ]$ docker run -d -P --name web -v /webapp training/webapp python app.py
309
+
310
+ - P :只允许外部访问容器需要暴露的端口
311
+ -v :也可以指定挂载一个本地的已有目录到容器中去作为数据卷
312
+
313
+ # 加载主机的src/webapp目录到容器opt/webapp 目录下
314
+ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
315
+
316
+ # docker 挂载数据默认权限是读写(rw),可以通过ro 指定为只读
317
+ docker run -d -P --name web -v /src/webapp:/opt/webapp ro training/webapp python app.py
318
+
319
+ # 挂载一个本地主机文件作为数据卷,记录在容器中输入过的命令历史
320
+ docker run --rm -it -v ~ /.bash_history:/.bash_history ubuntu /bin/bash
321
+ ` ` `
71
322
72
323
73
324
# # 使用docker安装ElasticSearch
@@ -79,17 +330,17 @@ docker images -q :只显示镜像ID。
79
330
# 拉取镜像
80
331
[root@izadux3fzjykx7z ~ ]$ docker pull elasticsearch:6.5.0
81
332
` ` `
82
- 启动一个ElasticSearch容器
83
-
84
- ``` bash
333
+ 启动一个ElasticSearch容器d
85
334
[root@izadux3fzjykx7z ~ ] $ docker run --name elasticsearch -d -e ES_JAVA_OPTS=" -Xms214m -Xmx214m" -p 9200:9200 -p 9300:9300 elasticsearch:6.5.0
86
335
` ` `
87
336
88
337
89
338
90
339
340
+
91
341
# # 参考地址
92
342
* Docker中文网站 https://www.docker-cn.com/
93
343
* Docker安装手册:https://docs.docker-cn.com/engine/installation/
94
344
* 网易加速器:http://hub-mirror.c.163.com
95
345
* 菜鸟教程:http://www.runoob.com/docker/centos-docker-install.html
346
+ * Docker技术入门与实战
0 commit comments