Skip to content

Commit f3520bf

Browse files
📚 Update Docker documentation and improve clarity
- Revised installation instructions for Windows, Mac, and Linux, enhancing readability. - Updated core configuration examples and commands for building Docker images. - Improved formatting and consistency throughout the documentation, including command syntax and comments. - Added practical insights on resource usage and troubleshooting for Docker containers. - Included a new section on setting up a Synology server with Docker, providing a comprehensive guide for users.
1 parent 0082eb2 commit f3520bf

File tree

1 file changed

+103
-102
lines changed

1 file changed

+103
-102
lines changed

docs/docs/云原生开发/容器化.md

Lines changed: 103 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,31 @@ title: 容器化
1212

1313
### 安装
1414

15-
#### win和mac安装
15+
#### win 和 mac 安装
1616

1717
[https://www.docker.com/get-started](https://www.docker.com/get-started)
1818

19-
#### Linux-Ubuntu安装
19+
#### Linux-Ubuntu 安装
2020

2121
```language
2222
curl -sSL https://get.daocloud.io/docker | sh
2323
```
2424

2525
### 检查安装版本确认是否安装成功
2626

27-
win检查是否安装成功的命令
27+
win 检查是否安装成功的命令
2828

2929
```language
3030
docker version
3131
```
3232

33-
Linux检查是否安装成功的命令
33+
Linux 检查是否安装成功的命令
3434

3535
```language
3636
docker -v
3737
```
3838

39-
### 核心配置
39+
### 基本命令示例
4040

4141
```bash showLineNumbers
4242
# 构建镜像
@@ -67,22 +67,25 @@ docker stop {container_id}
6767
docker rm {container_id}
6868
```
6969

70-
7170
#### build
7271

73-
build一个镜像的时候,如下关键字必不可少:
72+
build 一个镜像的时候,如下关键字必不可少:
7473

75-
```language
76-
FROM mcr.microsoft.com/playwright/python:v1.22.0-focal
77-
RUN mkdir -p /opt/yueji/spiderCore && mkdir -p /opt/dervice
78-
ADD spiderCore.tar.gz /opt/yueji/spiderCore
79-
RUN pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ && pip install -r /opt/yueji/spiderCore/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ && rm -rf /root/.cache/pip/
80-
RUN playwright install chromium
81-
RUN apt-get update
82-
RUN apt-get install wget
83-
RUN apt-get install vim
84-
WORKDIR /opt/yueji/spiderCore
85-
ENTRYPOINT ["python3","main.py"]
74+
```yaml showLineNumbers
75+
# 设置基础镜像
76+
FROM python:3.12.8
77+
78+
# 设置工作目录
79+
WORKDIR /app
80+
81+
# 复制项目文件
82+
COPY . .
83+
84+
# 安装依赖(可以在任意位置执行多个RUN命令)
85+
RUN pip install -r requirements.txt
86+
87+
# 启动服务
88+
CMD ["python", "chat_routers.py"]
8689
```
8790

8891
#### FROM
@@ -132,7 +135,7 @@ Docker run -p 8080:80 -d {name}
132135
Docker run -p 8080:80 -d nginx
133136
```
134137

135-
拷贝文件至image(类似git里的add暂存)
138+
拷贝文件至 image(类似 git 里的 add 暂存)
136139

137140
```language
138141
docker cp {path} {id}{id_path}
@@ -141,7 +144,7 @@ docker cp {path} {id}{id_path}
141144
docker cp C:/Users/SY/Desktop/docktest/index.html {id}://usr/share/nginx/html
142145
```
143146

144-
保存(类似git里的commit)
147+
保存(类似 git 里的 commit)
145148

146149
```language
147150
Docker commit -m 'fun' {id} 'name'
@@ -150,14 +153,14 @@ Docker commit -m 'fun' {id} 'name'
150153
Docker commit(固定语法) -m(主分支) 'fun'(注释) 'name'(image的名字)
151154
```
152155

153-
删除多余的image
156+
删除多余的 image
154157

155158
```language
156-
Docker rmi {id}
159+
Docker rmi {id}
157160
Docker rmi(删除)
158161
```
159162

160-
如果是在自己的电脑上操作,可以在vscode内下载docker插件,即可查看对应容器状态。选中容器可以右键进行:删除、启动、停止等操作。也可以在Docker可视化界面进行操作
163+
如果是在自己的电脑上操作,可以在 vscode 内下载 docker 插件,即可查看对应容器状态。选中容器可以右键进行:删除、启动、停止等操作。也可以在 Docker 可视化界面进行操作
161164

162165
可以通过如下命令进入到容器内部的命令窗口:
163166

@@ -194,16 +197,14 @@ docker stats --no-stream
194197
docker stats
195198
```
196199

197-
CPU资源占用升到了280%,持续了30分钟,比较离谱。
198-
内存占了8个G,这个程序需要模拟诸多浏览器且要保持缓存以便通信,所以8个G也不算离谱
200+
CPU 资源占用升到了 280%,持续了 30 分钟,比较离谱。
201+
内存占了 8 个 G,这个程序需要模拟诸多浏览器且要保持缓存以便通信,所以 8 个 G 也不算离谱
199202

200-
> docker显示的cpu占用是可以超100%的,表示使用了多个核,200%表示用了2个核。合理的飙升:大数运算环节。异常的飙升:死循环、报错后日志不停歇的高速打印。
203+
> docker 显示的 cpu 占用是可以超 100%的,表示使用了多个核,200%表示用了 2 个核。合理的飙升:大数运算环节。异常的飙升:死循环、报错后日志不停歇的高速打印。
201204
202205
#### 分析并思考
203206

204-
2个可能:
205-
1.因为CPU异常,所以可能是阻塞导致的,要查下阻塞的原因,因为代码里写了很多线程。
206-
2.但是我等了30分钟,也可能是阻塞导致死锁了,这个可能性我觉得更大,内存一直被占着可以解释为死锁后资源无法释放,也合理。
207+
2 个可能: 1.因为 CPU 异常,所以可能是阻塞导致的,要查下阻塞的原因,因为代码里写了很多线程。 2.但是我等了 30 分钟,也可能是阻塞导致死锁了,这个可能性我觉得更大,内存一直被占着可以解释为死锁后资源无法释放,也合理。
207208

208209
> (1)阻塞是由于资源不足引起的排队等待现象。
209210
> (2)死锁是由于两个对象在拥有一份资源的情况下申请另一份资源,而另一份资源恰好又是这两对象正持有的,导致两对象无法完成操作,且所持资源无法释放。
@@ -225,51 +226,6 @@ exit
225226
# 复制日志
226227
docker cp 容器id:文件路径 本机路径
227228
```
228-
229-
## 实战案例:群晖服务器搭建
230-
231-
首先确保自己对每个环节的设备都拥有绝对控制权,在常见的家庭网络环节下,
232-
233-
网络从运营商总部接入小区/园区的控制中心,由控制中心完成基本过滤
234-
用户通过光猫完成光电转换,完成与互联网的信息交换
235-
用户通过路由器链接光猫,完成内网与外网的信息交换
236-
用户通过交换机链接路由器,完成内网设备间的信息交换(中型公司会有)
237-
用户将购买的服务器连接到交换机/路由器,最后一步信息交换
238-
239-
你可能会遇到如下问题:
240-
241-
1.你所居住的小区/园区存在网络控制中心,限制家庭宽带的使用,例如我园区的网络控制中心:限制端口,限制设备数量,限制设备类。可以通过打电话沟通与钞能力解决。
242-
243-
2.运营商提供的设备,例如:光猫,路由器,存在限制,例如我司的光猫仅开启上网功能,不允许端口对外开放,不允许端口映射。可以通过打电话沟通与钞能力解决。
244-
245-
3.路由器、服务器不提供端口映射、仅暴露指定端口。我用的是华为+群晖,总价4K。
246-
247-
那么如果你的服务比较复杂,譬如我司曾经采购一个很古老的系统,我不负责迭代它,但需要维护他,那么打包成一个容器很显然是个不错的主意。
248-
249-
由于群晖有很多版本,路由器也有很多版本,我这里只是提供一个思路,不保证一定能成功。
250-
251-
### 群晖
252-
253-
在群晖套件中心找到 Container Manager
254-
255-
下载宝塔镜像 btpanel-baota
256-
257-
映射端口前请确认端口没有在使用,可以通过群晖官网查询
258-
259-
推荐端口号在4000-5000之间,因为这个端的端口未被使用。
260-
261-
映射需要用到的端口与需要挂载的文件夹
262-
263-
关于映射:如果你把宝塔的登录端口8888映射为群晖服务器的4444,那么此时你就可以通过群晖的4444端口访问宝塔了。
264-
265-
### 路由器
266-
267-
开启设备映射,将群晖设为固定的IP地址,将群晖的端口映射到路由器的端口。
268-
269-
如果你把群晖的4444端口映射为80,并且把域名绑定到公网IP上时
270-
271-
那么当你访问这个域名会跳转到路由器80端口,再跳到群晖的4444端口,再跳到群晖宝塔容器的8888端口。
272-
273229
## docker-compose
274230

275231
docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个 YAML 文件来配置应用程序的服务、网络和卷,并使用一个命令来启动、停止和重新启动这些服务。当你需要启动多个容器时,docker-compose 可以简化这个过程。
@@ -295,36 +251,32 @@ docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工
295251
### 文件示例
296252

297253
```yaml showLineNumbers
298-
version: '3.8' # 指定 Docker Compose 文件的版本
254+
version: "3.8" # 指定 Docker Compose 文件的版本
299255

300-
services: # 定义服务
301-
python-app-frontend: # 新增的 Python 应用服务
302-
build: # 使用 Dockerfile 构建镜像
303-
context: ./frontend # 前端上下文目录
304-
dockerfile: Dockerfile # Dockerfile 文件
256+
services: # 定义服务
257+
python-app-frontend: # 新增的 Python 应用服务
258+
build: # 使用 Dockerfile 构建镜像
259+
context: ./frontend # 前端上下文目录
260+
dockerfile: Dockerfile # Dockerfile 文件
305261
image: jiangmiemie/llmchatf:0.1.0
306262
ports:
307-
- "8501:8501" # 映射 Streamlit 默认端口
308-
command: ["streamlit", "run", "_streamlit/streamlit_app.py"] # 启动命令
263+
- "8501:8501" # 映射 Streamlit 默认端口
264+
command: ["streamlit", "run", "_streamlit/streamlit_app.py"] # 启动命令
309265
depends_on:
310266
- python-app-backend
311267

312-
python-app-backend: # 新增的后端服务
313-
build: # 使用 Dockerfile 构建镜像
314-
context: ./backend # 后端上下文目录
315-
dockerfile: Dockerfile # 后端 Dockerfile 文件
268+
python-app-backend: # 新增的后端服务
269+
build: # 使用 Dockerfile 构建镜像
270+
context: ./backend # 后端上下文目录
271+
dockerfile: Dockerfile # 后端 Dockerfile 文件
316272
image: jiangmiemie/llmchatb:0.1.0
317273
ports:
318-
- "8010:8010" # 映射后端服务端口
319-
command: ["python", "chat_routers.py"] # 启动后端服务的命令
274+
- "8010:8010" # 映射后端服务端口
275+
command: ["python", "chat_routers.py"] # 启动后端服务的命令
320276
volumes:
321-
- ./backend/.env:/app/.env:ro # 添加 .env 文件挂载,ro表示只读
277+
- ./backend/.env:/app/.env:ro # 添加 .env 文件挂载,ro表示只读
322278
```
323279
324-
325-
326-
327-
328280
### 启动说明
329281
330282
1. 首先确保你在包含 `docker-compose.yml` 文件的目录下,然后执行以下命令来构建和启动服务:
@@ -346,7 +298,7 @@ docker-compose up
346298

347299
3. 其他常用命令:
348300

349-
```bash
301+
````bash
350302
# 停止所有服务
351303
docker-compose down
352304

@@ -368,9 +320,10 @@ docker-compose logs -f python-app-backend
368320
3. 查看容器日志排查问题:
369321
```bash
370322
docker-compose logs -f
371-
```
323+
````
372324
373325
4. 如果需要重置环境:
326+
374327
```bash
375328
# 停止并删除所有容器、网络
376329
docker-compose down
@@ -380,6 +333,7 @@ docker-compose down --rmi all
380333
```
381334

382335
记住,任何修改 Dockerfile 或代码后,都需要重新构建镜像:
336+
383337
```bash
384338
docker-compose up -d --build
385339
```
@@ -396,7 +350,6 @@ docker-compose push
396350

397351
### 拉取和运行多个容器
398352

399-
400353
目录结构
401354

402355
```bash showLineNumbers
@@ -407,21 +360,21 @@ docker-compose push
407360

408361
1. 在目标环境创建 docker-compose.yml:
409362

410-
````yaml:docker-compose.yml
363+
```yaml:docker-compose.yml
411364
version: '3.8'
412365
services:
413366
python-app-frontend:
414367
image: jiangmiemie/llmchatf:0.1.0
415368
ports:
416369
- "8501:8501"
417-
370+
418371
python-app-backend:
419372
image: jiangmiemie/llmchatb:0.1.0
420373
ports:
421374
- "8010:8010"
422375
volumes:
423376
- ./backend/.env:/app/.env:ro
424-
````
377+
```
425378

426379
2. 拉取和运行:
427380

@@ -436,18 +389,21 @@ docker-compose up -d
436389
### 补充说明
437390

438391
1. 如果使用私有仓库,需要先登录:
392+
439393
```bash
440394
docker login your-registry
441395
```
442396

443397
2. 可以使用环境变量控制版本:
444-
````yaml:docker-compose.yml
398+
399+
```yaml:docker-compose.yml
445400
services:
446401
frontend:
447402
image: your-registry/frontend:${TAG:-latest}
448-
````
403+
```
449404

450405
3. 可以只操作特定服务:
406+
451407
```bash
452408
# 只推送前端
453409
docker-compose push frontend
@@ -456,6 +412,51 @@ docker-compose push frontend
456412
docker-compose pull backend
457413
```
458414

415+
## 实战案例:群晖服务器搭建
416+
417+
首先确保自己对每个环节的设备都拥有绝对控制权,在常见的家庭网络环节下,
418+
419+
网络从运营商总部接入小区/园区的控制中心,由控制中心完成基本过滤
420+
用户通过光猫完成光电转换,完成与互联网的信息交换
421+
用户通过路由器链接光猫,完成内网与外网的信息交换
422+
用户通过交换机链接路由器,完成内网设备间的信息交换(中型公司会有)
423+
用户将购买的服务器连接到交换机/路由器,最后一步信息交换
424+
425+
你可能会遇到如下问题:
426+
427+
1.你所居住的小区/园区存在网络控制中心,限制家庭宽带的使用,例如我园区的网络控制中心:限制端口,限制设备数量,限制设备类。可以通过打电话沟通与钞能力解决。
428+
429+
2.运营商提供的设备,例如:光猫,路由器,存在限制,例如我司的光猫仅开启上网功能,不允许端口对外开放,不允许端口映射。可以通过打电话沟通与钞能力解决。
430+
431+
3.路由器、服务器不提供端口映射、仅暴露指定端口。我用的是华为+群晖,总价 4K。
432+
433+
那么如果你的服务比较复杂,譬如我司曾经采购一个很古老的系统,我不负责迭代它,但需要维护他,那么打包成一个容器很显然是个不错的主意。
434+
435+
由于群晖有很多版本,路由器也有很多版本,我这里只是提供一个思路,不保证一定能成功。
436+
437+
### 群晖
438+
439+
在群晖套件中心找到 Container Manager
440+
441+
下载宝塔镜像 btpanel-baota
442+
443+
映射端口前请确认端口没有在使用,可以通过群晖官网查询
444+
445+
推荐端口号在 4000-5000 之间,因为这个端的端口未被使用。
446+
447+
映射需要用到的端口与需要挂载的文件夹
448+
449+
关于映射:如果你把宝塔的登录端口 8888 映射为群晖服务器的 4444,那么此时你就可以通过群晖的 4444 端口访问宝塔了。
450+
451+
### 路由器
452+
453+
开启设备映射,将群晖设为固定的 IP 地址,将群晖的端口映射到路由器的端口。
454+
455+
如果你把群晖的 4444 端口映射为 80,并且把域名绑定到公网 IP 上时
456+
457+
那么当你访问这个域名会跳转到路由器 80 端口,再跳到群晖的 4444 端口,再跳到群晖宝塔容器的 8888 端口。
458+
459+
459460
## k8s
460461

461-
Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
462+
Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。

0 commit comments

Comments
 (0)