欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Docker Compose部署项目+使用

Docker Compose部署项目+使用

2025/2/23 7:21:48 来源:https://blog.csdn.net/weixin_45454859/article/details/140792673  浏览:    关键词: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="DATABASE_URL="mysql:192.168.137.128//root:admin@test_mysql/question" #这里注意@test_mysql和下面的mysql的container_name一样depends_on:                                 # 表示依赖于这两个服务 在启动flaskqpp服务时会先启动mysql redis- mysqlnetworks:test_net:ipv4_address: 192.168.137.130tty: 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: utf8mb4MYSQL_COLLATION_SERVER: utf8mb4_general_civolumes:- type: bindsource: ./sqltarget: /docker-entrypoint-initdb.d        # 注意,只有容器首次启动时才会执行/docker-entrypoint-initdb.d下的文件- type: bind                                 # 若非首次启动,删除挂在的data目录,再新建datasource: ./datatarget: /var/lib/mysqlnetworks:test_net:                                    # 添加该服务到名为test_net 的网络中  ipv4_address: 192.168.137.128              # MySQL容器 指定 IP 地址ports:- "5001:3306"                               # 端口映射tty: true networks:                                       # 创建一个自定义的虚拟网络test_net:driver: bridgeipam: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:latestcontainer_name: sgappports:- "5000:5000"environment:- DATABASE_URL="mysql:192.168.137.128//root:admin@test_mysql/question"depends_on:- mysqlnetworks:sg_net:ipv4_address: 172.20.0.3tty: truemysql:image: new-mysql:8.0.36container_name: test_mysqlenvironment:MYSQL_ROOT_PASSWORD: "admin"MYSQL_DATABASE: questionMYSQL_CHARACTER_SET_SERVER: utf8mb4MYSQL_COLLATION_SERVER: utf8mb4_general_civolumes:- type: bindsource: ./sql   #sql文件在里面target: /docker-entrypoint-initdb.d- type: bindsource: ./datatarget: /var/lib/mysqlnetworks:sg_net:ipv4_address: 172.20.0.2ports:- "5001:3306"tty: truenetworks:sg_net:driver: bridgeipam:config:- subnet: 172.20.0.0/24

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词