Docker Compose部署项目+使用

目录结构

- suggestion/
  - backend/ # 我的后端项目
    - app.py
    - other_files/
  - docker-compose.yml
  - Dockerfile
  - requirements.txt

获得requirements.txt

命令行输入:pip list --format=freeze > requirements.txt

因为使用 pip freeze > requirements.txt 导出的文件中含有 @file://
使用这个文件在其他环境下安装就会出现 找不到路径的错误
原因是这种方法生成的文件只能用于本地环境

belike:

blinker==1.6.2
Brotli==1.0.9
certifi==2024.7.4
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
colorama==0.4.6
cryptography==3.4.8
filelock==3.13.1
Flask==3.0.3
Flask-Cors==4.0.1
Flask-SQLAlchemy==3.1.1

Dockerfile文件

# 基于 Python 3.8  镜像构建
FROM python:3.8
 
# 设置时区环境变量
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
 
# 设置工作目录
WORKDIR ./backend
 
# 将当前目录下的所有文件复制到工作目录中
COPY . /backend
 
# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt
 
# 暴露容器端口 5000 供宿主机与容器连接使用
EXPOSE 5000
 
# 运行应用程序
CMD ["python", "./backend/app.py"]

docker-compose.yml文件

version: '3.8'
 
services:
  flaskapp:
    image: testdashboards-flaskapp:latest       # 表示拉取镜像(如果之前已经构建了镜像的话)没有镜像就执行下一行的build构建镜像
    build: .                                    # 表示构建镜像 . 表示当前路径下的文件 默认文件名为 Dockerfile    
    container_name: flaskapp                    # 定义容器名称
    ports:
      - "5000:5000"                           	# Flask 端口映射
    environment:
      - DATABASE_URL="mysql:192.168.137.128//root:admin@test_mysql/question" #这里注意@test_mysql和下面的mysql的container_name一样
    depends_on:                                 # 表示依赖于这两个服务 在启动flaskqpp服务时会先启动mysql redis
      - mysql
    networks:
      test_net:
        ipv4_address: 192.168.137.130
    tty: true # 重要参数,必须加
 
  test_mysql:
    image: mysql:8.0.36                             # 表示从镜像仓库拉取mysql8.0.36的镜像
    container_name: test_mysql                      # 定义容器名称
    environment:
        MYSQL_DATABASE: 'question' #数据库
        MYSQL_ROOT_PASSWORD: admin  #数据库root用户密码
        MYSQL_CHARACTER_SET_SERVER: utf8mb4
        MYSQL_COLLATION_SERVER: utf8mb4_general_ci
    volumes:
      - type: bind
        source: ./sql
        target: /docker-entrypoint-initdb.d        # 注意,只有容器首次启动时才会执行/docker-entrypoint-initdb.d下的文件
      - type: bind                                 # 若非首次启动,删除挂在的data目录,再新建data
        source: ./data
        target: /var/lib/mysql
    networks:
      test_net:                                    # 添加该服务到名为test_net 的网络中  
        ipv4_address: 192.168.137.128              # MySQL容器 指定 IP 地址
    ports:
      - "5001:3306"                               # 端口映射
    tty: true 

networks:                                       # 创建一个自定义的虚拟网络
  test_net:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.137.0/24
 

在Dockerfile所在文件夹中执行docker-compose up -d

因为我的文件夹叫suggestion,所以我的容器叫suggestion

创建成功,进入浏览器:http://localhost:5000/#/login能看到网页

注意:
有时候你发现没有初始化数据库:
点击进入data文件夹,看看里面有没有初始化你的表,有时候需要等等才会有
在这里插入图片描述
data里面,这样就是对的
在这里插入图片描述

打包镜像:

输入:

docker save -o flaskapp.tar testdashboards-flaskapp:latest mysql:8.0.36

因为我想测试一下这个方法,所以我对两个镜像改了个名:

docker tag 3329b8fb0fab new-flaskapp:latest
docker tag 197b02e0f708 new-mysql:8.0.36

然后进行打包:

docker save -o app.tar new-flaskapp:latest new-mysql:8.0.36

于是在suggestion文件夹中出现了app.tar

加载镜像:

docker load -i app.tar

在这里插入图片描述

docker-compose使用镜像:

sg文件夹:
在这里插入图片描述

docker-compose.yml文件:

version: '3.8'

services:
  sgapp:
    image: new-flaskapp:latest
    container_name: sgapp
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL="mysql:192.168.137.128//root:admin@test_mysql/question"
    depends_on:
      - mysql
    networks:
      sg_net:
        ipv4_address: 172.20.0.3
    tty: true

  mysql:
    image: new-mysql:8.0.36
    container_name: test_mysql
    environment:
      MYSQL_ROOT_PASSWORD: "admin"
      MYSQL_DATABASE: question
      MYSQL_CHARACTER_SET_SERVER: utf8mb4
      MYSQL_COLLATION_SERVER: utf8mb4_general_ci
    volumes:
      - type: bind
        source: ./sql   #sql文件在里面
        target: /docker-entrypoint-initdb.d
      - type: bind
        source: ./data
        target: /var/lib/mysql
    networks:
      sg_net:
        ipv4_address: 172.20.0.2
    ports:
      - "5001:3306"
    tty: true

networks:
  sg_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

在命令行中输入:docker-compose up -d
结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值