@@ -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
2222curl -sSL https://get.daocloud.io/docker | sh
2323```
2424
2525### 检查安装版本确认是否安装成功
2626
27- win检查是否安装成功的命令 :
27+ win 检查是否安装成功的命令 :
2828
2929``` language
3030docker version
3131```
3232
33- Linux检查是否安装成功的命令 :
33+ Linux 检查是否安装成功的命令 :
3434
3535``` language
3636docker -v
3737```
3838
39- ### 核心配置
39+ ### 基本命令示例
4040
4141``` bash showLineNumbers
4242# 构建镜像
@@ -67,22 +67,25 @@ docker stop {container_id}
6767docker 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}
132135Docker run -p 8080:80 -d nginx
133136```
134137
135- 拷贝文件至image(类似git里的add暂存 )
138+ 拷贝文件至 image(类似 git 里的 add 暂存 )
136139
137140``` language
138141docker cp {path} {id}{id_path}
@@ -141,7 +144,7 @@ docker cp {path} {id}{id_path}
141144docker cp C:/Users/SY/Desktop/docktest/index.html {id}://usr/share/nginx/html
142145```
143146
144- 保存(类似git里的commit )
147+ 保存(类似 git 里的 commit )
145148
146149``` language
147150Docker commit -m 'fun' {id} 'name'
@@ -150,14 +153,14 @@ Docker commit -m 'fun' {id} 'name'
150153Docker commit(固定语法) -m(主分支) 'fun'(注释) 'name'(image的名字)
151154```
152155
153- 删除多余的image
156+ 删除多余的 image
154157
155158``` language
156- Docker rmi {id}
159+ Docker rmi {id}
157160Docker rmi(删除)
158161```
159162
160- 如果是在自己的电脑上操作,可以在vscode内下载docker插件 ,即可查看对应容器状态。选中容器可以右键进行:删除、启动、停止等操作。也可以在Docker可视化界面进行操作 。
163+ 如果是在自己的电脑上操作,可以在 vscode 内下载 docker 插件 ,即可查看对应容器状态。选中容器可以右键进行:删除、启动、停止等操作。也可以在 Docker 可视化界面进行操作 。
161164
162165可以通过如下命令进入到容器内部的命令窗口:
163166
@@ -194,16 +197,14 @@ docker stats --no-stream
194197docker 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# 复制日志
226227docker 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
275231docker-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
3302821. 首先确保你在包含 ` docker-compose.yml` 文件的目录下,然后执行以下命令来构建和启动服务:
@@ -346,7 +298,7 @@ docker-compose up
346298
3472993. 其他常用命令:
348300
349- ` ` ` bash
301+ ` ` ` ` bash
350302# 停止所有服务
351303docker-compose down
352304
@@ -368,9 +320,10 @@ docker-compose logs -f python-app-backend
3683203. 查看容器日志排查问题:
369321` ` ` bash
370322docker-compose logs -f
371- ```
323+ ` ` ` `
372324
3733254. 如果需要重置环境:
326+
374327` ` ` bash
375328# 停止并删除所有容器、网络
376329docker-compose down
@@ -380,6 +333,7 @@ docker-compose down --rmi all
380333```
381334
382335记住,任何修改 Dockerfile 或代码后,都需要重新构建镜像:
336+
383337``` bash
384338docker-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
4083611 . 在目标环境创建 docker-compose.yml:
409362
410- ```` yaml:docker-compose.yml
363+ ``` yaml:docker-compose.yml
411364version: '3.8'
412365services:
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
4263792 . 拉取和运行:
427380
@@ -436,18 +389,21 @@ docker-compose up -d
436389### 补充说明
437390
4383911 . 如果使用私有仓库,需要先登录:
392+
439393``` bash
440394docker login your-registry
441395```
442396
4433972 . 可以使用环境变量控制版本:
444- ```` yaml:docker-compose.yml
398+
399+ ``` yaml:docker-compose.yml
445400services:
446401 frontend:
447402 image: your-registry/frontend:${TAG:-latest}
448- ````
403+ ```
449404
4504053 . 可以只操作特定服务:
406+
451407``` bash
452408# 只推送前端
453409docker-compose push frontend
@@ -456,6 +412,51 @@ docker-compose push frontend
456412docker-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