内网环境下通过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镜像安装

  1. 在内网中是无法安装docker镜像的,此时我们需要借助可以访问互联网的机器安装docker镜像,然后通过导出+导入的方式实现内网服务docker的安装
  2. 可访问互联网的服务器安装docker镜像(以python:3.9-alpine为例)
    2.1. 拉取python镜像(如果速度慢docker可配置为国内镜像源地址,可自行百度)
docker pull python:3.9-alpine

在这里插入图片描述

  1. 创建容器,并在容器内安装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
  1. 导出含有容器interesting_easley的python镜像python_3.9-alpine.tar(导出镜像分为export和save,export导出为镜像内容含容器,save导出为镜像不含容器;此处需要容器内安装的python库,所以需要用到export进行导出)
docker export interesting_easley > python_3.9-alpine.tar

在这里插入图片描述

  1. 将导出镜像文件python_3.9-alpine.tar上传至内网服务器,在内网服务器进行导入镜像python:3.9-alpine(镜像命可自定义)
docker import python_3.9-alpine.tar python:3.9-alpine

在这里插入图片描述

四、内网服务器python项目部署

  1. 内网服务项目结构
    在这里插入图片描述
  2. 编写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项目容器

  1. 启动容器(files_server:docker-compose中容器名称)
docker-compose up -d files_server
  1. 查看容器运行是否正常,可通过查看容器docker日志,查看是否报错,及通过报错信息定位问题;通过日志可以看到项目已启动成功
docker logs -f --tail 200 files_server

在这里插入图片描述

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要通过 docker-compose 部署项目,可以按照以下步骤进行: 1. 编写 Dockerfile 文件,定义容器的构建规则。 2. 编写 docker-compose.yml 文件,定义多个容器的服务和关系。 3. 在 docker-compose.yml 文件所在的目录下,执行 docker-compose up 命令来启动容器。 具体操作步骤如下: 1. 编写 Dockerfile 文件 Dockerfile 是定义容器构建规则的文件,可以通过以下命令创建: ``` touch Dockerfile ``` 然后在 Dockerfile 文件中编写容器构建规则,例如: ``` FROM python:3.7-alpine COPY . /app WORKDIR /app RUN pip install -r requirements.txt CMD ["python", "app.py"] ``` 上述 Dockerfile 文件中,使用 python:3.7-alpine 作为基础镜像,将当前目录下的文件复制到容器的 /app 目录下,安装 requirements.txt 中定义的依赖,最后运行 app.py 文件。 2. 编写 docker-compose.yml 文件 docker-compose.yml 文件是定义多个容器的服务和关系的文件,可以通过以下命令创建: ``` touch docker-compose.yml ``` 然后在 docker-compose.yml 文件中编写容器的服务和关系,例如: ``` version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/app redis: image: "redis:alpine" ``` 上述 docker-compose.yml 文件定义了两个服务,一个是 web 服务,另一个是 redis 服务。web 服务使用当前目录下的 Dockerfile 文件进行构建,并将容器的 5000 端口映射到主机的 5000 端口。redis 服务则使用 redis:alpine 镜像。 3. 启动容器docker-compose.yml 文件所在的目录下,执行以下命令启动容器: ``` docker-compose up ``` 执行该命令后,docker-compose 会按照 docker-compose.yml 文件中定义的服务和关系启动容器。如果 Dockerfile 或 docker-compose.yml 文件发生了变化,需要使用以下命令重新构建和启动容器: ``` docker-compose up --build ``` 以上就是通过 docker-compose 部署项目的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值