内网环境下通过docker-compose部署python项目详解
内网环境下通过docker-compose部署python项目(详解)
一、引言
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
二、本文简介
上篇文件讲到通过docker-compose部署python项目,但在企业中基于安全情况考虑,大多数服务器是无法访问互联网的,只能内网使用,如果通过docker部署python项目,无法访问docker.io致使python环境镜像无法拉取,本文则针对这种情况,详细讲解内网服务器中通过docker-compose部属python项目(前置条件:服务器已安装完成docker)
三、内网服务器docker部署python镜像安装
在内网中是无法安装docker镜像的,此时我们需要借助可以访问互联网的机器安装docker镜像,然后通过导出+导入的方式实现内网服务docker的安装
可访问互联网的服务器安装docker镜像(以python:3.9-alpine为例)
2.1. 拉取python镜像(如果速度慢docker可配置为国内镜像源地址,可自行百度)
docker pull python:3.9-alpine
创建容器,并在容器内安装python库
3.1. 创建容器,主要为了在镜像中安装python项目所需的python库
# 创建容器(若未指定容器名时容器名随机生成)
docker run -itd python:3.9-alpine
# 查看容器是否创建成功
docker ps
3.2. 将python库文件requirements.txt复制到容器interesting_easley中/目录下
docker cp requirements.txt interesting_easley:/
3.3. 进入容器interesting_easley,安装python项目所需的python库(注意:确保上步python库文件已复制到容器内)
docker exec -it interesting_easley /bin/sh
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
3.4. 退出容器
exit
- 导出含有容器interesting_easley的python镜像python_3.9-alpine.tar(导出镜像分为export和save,export导出为镜像内容含容器,save导出为镜像不含容器;此处需要容器内安装的python库,所以需要用到export进行导出)
docker export interesting_easley > python_3.9-alpine.tar
- 将导出镜像文件python_3.9-alpine.tar上传至内网服务器,在内网服务器进行导入镜像python:3.9-alpine(镜像命可自定义)
docker import python_3.9-alpine.tar python:3.9-alpine
四、内网服务器python项目部署
内网服务项目结构
编写python项目docker-compose文件
2.1. 新建docker-compose.yaml文件
touch docker-compose.yaml
2.2. 编写内容
vim docker-compose.yaml
version: '3'
services:
files_server:
working_dir: /root/fileServer
image: python:3.9-alpine
container_name: files_server
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
restart: always
volumes:
- ../FilesServer:/root/fileServer
- /home/:/home/
command: python /root/fileServer/application.py
ports:
- "5000:5000"
network_mode: bridge
logging:
options:
max-size: "12m"
max-file: "5"
driver: json-file
2.3. 编写注意
files_server:容器名称,启动需要 image:镜像名称,上面导入的镜像名称
volumes:文件挂载,服务器python项目文件与容器文件实现互通,修改服务器文件内容,可同步至容器内(这里同步的是整个项目文件夹,也可同步单个需要的文件)
command:启动命令,此处路径为容器内路径(服务器文件挂载的启动文件路径) 内容缩进:编写时注意文件内容的缩进
五、通过docker-compose启动python项目容器
- 启动容器(files_server:docker-compose中容器名称)
docker-compose up -d files_server
- 查看容器运行是否正常,可通过查看容器docker日志,查看是否报错,及通过报错信息定位问题;通过日志可以看到项目已启动成功
docker logs -f --tail 200 files_server