Docker Compose部署项目+使用

news2024/11/15 3:43:46

目录结构

- 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="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能看到网页

打包镜像:

输入:

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
结束!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建了Vue项目,需要导入什么插件以及怎么导入

如果你不知道怎么创建Vue项目,建议可以看一看这篇文章 怎么安装Vue的环境和搭建Vue的项目-CSDN博客 1.在idea中打开目标文件 2.系在一个插件Vue.js 3.下载ELement UI 在Terminal中输入 # 切换到项目根目录 cd vueadmin-vue # 或者直接在idea中执行下面命令 # 安装element-u…

漏洞打靶-tomato

这是一个很有意思的靶场,靶机的安装过程请参考我的文章“漏洞打靶-hackme”,进入靶场后,迎面而来的就是一个大tomato,然后就无从下手了,查目录查不出来,sql注入也没地方注入 这时候我们可以用kali的nmap去查…

ARM学习(29)NXP 双coreMCU MCXN94学习

笔者来介绍一下NXP 双core板子 ,新系列的mcxn94 1、MCX 新系列介绍 恩智浦 MCU 系列产品包括 Kinetis 、LPC 系列,以及 i.MX RT 系列,现在又推出新系列产品 MCX 产品,包括四个系列,目前已经发布产品的是 MCX N 系列。…

第十四天7.25(git)

1.git 1.git功能特性 1.克隆数据库版本:从服务器上克隆数据库本机上 2.提交代码:在本机上自己创建的分支上提交代码 3.合并分支:在本机上合并分支 4.拉取合并分支:新建一个分支,把服务器上最新的代码Fetch下来&…

微软工具合集 | Microsoft PowerToys v0.83.0

PowerToys是由微软开发的一款免费系统工具集,专为Windows 10和Windows 11系统设计。它提供了一系列高效实用的工具,旨在帮助用户提升操作系统的使用效率和个性化程度。PowerToys工具集深受系统管理员和高级用户的喜爱,通过集成多种工具&#…

XXE -靶机

XXE靶机 一.扫描端口 进入xxe靶机 1.1然后进入到kali里 使用namp 扫描一下靶机开放端口等信息 1.2扫描他的目录 二 利用获取的信息 进入到 robots.txt 按他给出的信息 去访问xss 是一个登陆界面 admin.php 也是一个登陆界面 我们访问xss登陆界面 随便输 打开burpsuite抓包 发…

《深入浅出WPF》学习笔记二.为对象属性赋值的三种方式

《深入浅出WPF》学习笔记二.为对象属性赋值的三种方式 WPF用户图形界面是树状结构 👆wpf文档大纲 👆winform文档大纲 wpf的用户图形界面是树状结构,与winform不同点在于,winform同样存在树状结构的控件(比如panel、gridcontrol等…

Wi-Fi、WLAN、Bluetooth、zigbee、蜂窝网络、4g5g、MQTT

为什么打开手机的WiFi连接,显示的是WLAN? 分清Wi-Fi、WLAN、Bluetooth、zigbee、蜂窝网络、4g5g、MQTT这些概念. 一、WLAN、WIFI、WAPI WLAN是利用无线通信技术在局部区域内构建的网络,家庭/办公室里的网络就是一个WLAN,WLAN是一…

【数据结构】Java实现二叉搜索树

二叉搜索树的基本性质 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,它具有以下特征: 1. 节点结构:每个节点包含一个键(key)和值(value),以及指…

大语言模型中的提示隐私保护

大语言模型中的提示隐私保护 一、简介: 大语言模型(LLM) 拥有庞大的规模、预先训练的知识和卓越的性能,被广泛应用于各种任务。提示学习(prompt learning)和指令微调(instruction tuning) 是两种重要的使得大模型能理解具体任务…

决策树基础

概述 决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一 个测试输出,每个叶结点代表一种类别。决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一棵熵值下降最快的树&#xff…

自学Java第16Day

学习目标:面向对象进阶 学习内容:Object、Objects、BigInteger、BigDecimal、正则表达式 学习时间:下午 3 点-下午 6 点 学习产出: 1. Object类 1.1 概述 查看API文档,我们可以看到API文档中关于Object类的定义如下&…

【SpringBoot3】场景整合(实战)

0 环境准备 0.0 云服务器 阿里云、腾讯云、华为云 服务器开通; 按量付费,省钱省心 安装以下组件:docker、redis、kafka、prometheus、grafana 下载windterm: https://github.com/kingToolbox/WindTerm/releases/download/2.5…

React-Native 宝藏库大揭秘:精选开源项目与实战代码解析

1. 引言 1.1 React-Native 简介 React-Native 是由 Facebook 开发的一个开源框架,它允许开发者使用 JavaScript 和 React 的编程模型来构建跨平台的移动应用。React-Native 的核心理念是“Learn Once, Write Anywhere”,即学习一次 React 的编程模型&am…

《LeetCode热题100》---<5.普通数组篇六道>

本篇博客讲解LeetCode热题100道普通数组篇中的六道题 第一道:最大子数组和(中等) 第二道:合并区间(中等) 第一道:最大子数组和(中等) 法一:贪心算法 class So…

文件上传漏洞--之upload-labs靶场(第1关到第5关)专栏更新ing.....

第一关&#xff1a; 第一步&#xff1a;新建一个木马文件muma.php 第二步&#xff1a;在木马文件中写入一句话木马访问php主页 <?php eval(phpinfo());?> ​ 第三步&#xff1a;直接上传试一下 现上传一个png格式文件查看一下 然后上传一句话木马文件的&#xff0c;…

C:图案打印

引言 本篇文章讲了一些常见的图形编程题&#xff0c;并总结了一些规律。 1、打印空心正方形 1.1 代码展示&#xff1a; #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…

面试经典算法150题系列-数组/字符串操作之多数元素

序言&#xff1a;今天是第五题啦&#xff0c;前面四题的解法还清楚吗&#xff1f;可以到面试算法题系列150题专栏 进行复习呀。 温故而知新&#xff0c;可以为师矣&#xff01;加油&#xff0c;未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其…

Python 提取excel中嵌入的图片

注意&#xff1a;是嵌入在单元格里的图片&#xff0c;嵌入在单元格里的图片&#xff0c;嵌入在单元格里的图片 会显示这种类似的命令&#xff08;office好像不支持查看&#xff0c;wps可以查看这个位置显示的图片&#xff09; 网上好多都说用 _image 提取&#xff0c;经测试,…