Skip to content

Commit 4b172a0

Browse files
authored
Update docker笔记.md
1 parent 8d43e60 commit 4b172a0

File tree

1 file changed

+269
-18
lines changed

1 file changed

+269
-18
lines changed

docs/2019/docker笔记.md

Lines changed: 269 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,34 @@
11

2+
23
## 概述
34
- Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
45
- Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
56

67
## CentOS7 Docker 安装
78
Docker 要求 CentOS 系统的内核版本高于 3.10
8-
uname -r 命令查看你当前的内核版本
9+
910
```bash
11+
# uname -r 命令查看你当前的内核版本
1012
[root@izadux3fzjykx7z ~]# uname -r
11-
```
12-
>安装Docker
1313

1414
安装一些必要的系统工具:
15-
```bash
1615
[root@izadux3fzjykx7z ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
17-
```
16+
1817
添加软件源信息:
19-
```bash
2018
[root@izadux3fzjykx7z ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
21-
```
19+
2220
更新 yum 缓存:
23-
```bash
2421
[root@izadux3fzjykx7z ~]# sudo yum makecache fast
25-
```
22+
2623
安装 Docker-ce:
27-
```bash
2824
[root@izadux3fzjykx7z ~]# sudo yum -y install docker-ce
2925
```
26+
3027
## 启动 Docker 后台服务
3128
```bash
3229
[root@izadux3fzjykx7z ~]# sudo systemctl start docker
33-
```
30+
3431
测试运行 hello-world
35-
```bash
3632
[root@izadux3fzjykx7z ~]# docker run hello-world
3733
```
3834
![](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 命令查看你当前的内核版本
5349
```bash
5450
$ sudo yum remove docker-ce
5551
$ sudo rm -rf /var/lib/docker
56-
5752
```
5853

5954
## Docker常用命令
60-
6155
列出本地镜像: docker images
62-
```
56+
```bash
6357
docker images -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
6458
docker images --digests :显示镜像的摘要信息;
6559
docker images -f :显示满足条件的镜像;
6660
docker images --format :指定返回值的模板文件;
6761
docker images --no-trunc :显示完整的镜像信息;
6862
docker images -q :只显示镜像ID。
6963
```
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 -ti 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 -ti 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+
-rw-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`文件
70284
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+
```
71322
72323
73324
## 使用docker安装ElasticSearch
@@ -79,17 +330,17 @@ docker images -q :只显示镜像ID。
79330
#拉取镜像
80331
[root@izadux3fzjykx7z ~]$ docker pull elasticsearch:6.5.0
81332
```
82-
启动一个ElasticSearch容器
83-
84-
```bash
333+
启动一个ElasticSearch容器d
85334
[root@izadux3fzjykx7z ~] $ docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms214m -Xmx214m" -p 9200:9200 -p 9300:9300 elasticsearch:6.5.0
86335
```
87336

88337

89338

90339

340+
91341
## 参考地址
92342
* Docker中文网站 https://www.docker-cn.com/
93343
* Docker安装手册:https://docs.docker-cn.com/engine/installation/
94344
* 网易加速器:http://hub-mirror.c.163.com
95345
* 菜鸟教程:http://www.runoob.com/docker/centos-docker-install.html
346+
* Docker技术入门与实战

0 commit comments

Comments
 (0)