docker compose 在单机环境下一键打包运行
docker-compose
- 1. docker run 启动服务
- 2. docker-compose启动服务
- 3. docker-compose 小demo
- 3. 1 step1 : Setup
- 3.2 step2 : Create a Dockerfile
- 3. 3 step3 : Create a docker-compose 文件
- 3.4 step4 启动
- 4. 以上内容都可以在docker Docs 官网找到
1. docker run 启动服务
之前我学习docker启动服务是, 都是docker run 命令一条到底, 单机运行, 如果我一个项目有多个微服务, 那么一个一个docker run 是很费时间的
比如这样一个例子 :
我有一个项目, 他需要依赖于redis环境 以及我们自身的web环境
那么就需要写2条命令, 前提是我们有这两个镜像才能运行
当然webapp的镜像需要我们自己构建, 自己去写Dockerfile(卷挂载已写入其中), 通过docker build 命令来构造
- docker run -d -P --name myRedis redis:latest
- docker run -d -p 8080:80 --name mywebapp webapp
那么我们使用docker-compose的话, 是如何快速高效的解决这个问题呢?
- docker run -d -p 8080:80 --name mywebapp webapp
2. docker-compose启动服务
先来看看官网对于docker compose的描述 :
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。
简单来说, 就是使用一个yaml配置文件, 将我们一个项目所需要的依赖全部写入, 这样当微服务很多时就不用我们一个一个的docker run
下面来说说简单的步骤
- Define your app’s environment with a
Dockerfile
so it can be reproduced anywhere. - Define the services that make up your app in
docker-compose.yml
so they can be run together in an isolated environment. - Run
docker compose up
and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
简单来说就是我们要写一个Dockerfile
来定义我们的app所需要的环境, 然后写一个docker-compose.yml
的配置文件, 来定义构成我们的应用程序的服务, 最后就是使用docker compose up
的命令启动即可啦
下面是一个docker-compose.yml配置文件的模样
version: "3.9" # optional since v1.27.0
services: # services服务web:build: . # 通过Dockerfile来构建ports:- "8000:5000" # 暴露的端口号volumes:- .:/code # 将全部文件挂载到/code目录下- logvolume01:/var/log # links:- redis # 依赖的镜像redisredis:image: redis
volumes:logvolume01: {}
3. docker-compose 小demo
在此页面上,您将构建一个在 Docker Compose 上运行的简单 Python Web 应用程序。该应用程序使用 Flask 框架并在 Redis 中维护一个命中计数器。虽然示例使用 Python,但即使您不熟悉此处演示的概念,也应该可以理解。
3. 1 step1 : Setup
- 为项目创建目录
mkdir composetest
cd composetest
2. 在我们的项目目录里面创建一个app.py, 然后把下面的内容粘贴到app.py中, 看不懂python代码没有关系
vim app.py
import timeimport redis
from flask import Flaskapp = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)
- 然后再创建一个依赖文件
vim requirements.txt
# 并且写上
flask
redis
3.2 step2 : Create a Dockerfile
在此步骤中,您将编写一个构建 Docker 映像的 Dockerfile。该映像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。
在您的项目目录中,创建一个名为Dockerfile并粘贴以下内容的文件:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
这个Dockerfile告诉了docker下面的操作 :
- 从 Python 3.7 映像开始构建映像。
- 将工作目录设置为
/code
- 设置flask的环境变量
- 安装我们所需要的一些依赖比如 gcc, musl-dev
- 将我们容器外部写的
requirements.txt
文件搞到容器内部, 然后pip运行安装里面的依赖 - 暴露5000端口
- copy当前目录到容器的工作目录下
- 运行命令 flask run
如果想要了解更多的dockerfile命令请查看这个官网链接
3. 3 step3 : Create a docker-compose 文件
在您的项目目录中创建一个名为的文件docker-compose.yml并粘贴以下内容:
version: "3.9"
services:web:build: .ports:- "8000:5000"redis:image: "redis:alpine"
这个yaml文件定义了两个服务一个是我们的web通过dockerfile来构建, 一个是redis
3.4 step4 启动
最后我们在当前目前运行命令即可
docker-compose up
这样就算运行成功了, 我们访问一下这个地址
nice, 我们就成功的发布一个项目啦, 而且是很快速的发布
4. 以上内容都可以在docker Docs 官网找到
传送门
docker compose 在单机环境下一键打包运行相关推荐
- Docker - 通过快速脚本在不同的环境下一键安装Docker
文章目录 Docker - 通过快速脚本在不同的环境下一键安装Docker 1.在 CentOS/RHEL 中安装 Docker 2.在 Ubuntu 中安装 Docker 3.在 SLES 中安装 ...
- App一键切换url环境、一键打包__Android拓展篇(Java)
文 | Promise Sun 一.背景: 1. 2022上班第一天,整理一下过去的工作,发现这方面的小知识点,去年忘记记录博客了,于是就有了这篇文章.分享给大家,希望对有需要的朋友有帮助. 2. 项 ...
- MySQL数据库管理(二)单机环境下MySQL Cluster的安装
上文<MySQL数据库管理(一)MySQL Cluster集群简单介绍>对MySQL Cluster集群做了简要介绍.本文将教大家一步步搭建单机环境下的MySQL数据库集群. 一.单机环境 ...
- 全开源深度学习平台PaddlePaddle入手之路(二)----利用Docker在Windows10专业版环境下配置PaddlePaddle...
利用Docker在Windows10专业版环境下配置PaddlePaddle 对于PaddlePaddle的安装,查询官网信息,PaddlePaddle提供pip安装和Docker安装运行的使用方式. ...
- Oracle+ASM单机环境下,开启归档的最简单的方法
在ASM单机环境下,开启归档的最简单的方法. 环境:oracle11g 11.2.0.4 登陆sqlplus [oracle@udevasm ~]$ sqlplus / as sysdba SQL* ...
- linux打包java jar_在linux环境下修改可运行jar包配置并重新打包
在linux环境下修改可运行jar包配置并重新打包步骤: 1)mkdir xxx 2)mv XXX.jar XXX 3)jar xvf XXX.jar 4)mv XXX.jar ../ 5)vi XX ...
- 单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择...
单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择. 当asp.net看到应用程序中app_offline.htm文件时,它会关闭应用程序的app-doma ...
- UE4 Windows环境下游戏打包基础教程(ios, windows, android)(UFE方式以及命令行方式)
文章目录 环境 配置 一些会用到的路径 UFE打包 Windows Android IOS 命令行打包 注意事项 CMD指令 参数介绍 值得一看的参考 环境 Windows10 虚幻4.23.1 配置 ...
- GraphScope、Neo4j与TigerGraph单机环境下性能对比
目前工业界和学术界已经开发出了很多图分析系统,针对图分析的计算特性提出了各种各样的优化策略,在图分析任务上取得了优异的性能.近年来,各种各样的图数据库支持了各种查询语言(例如Cypher.GSQL和G ...
最新文章
- VMware Server 2.0简单学习!
- 学着造轮子-RxLifeCycle
- oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
- c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...
- 2015前端生态发展回顾(转)
- 山石网科-Hillstone-SC-***(SSL-***)之配置终结篇
- JavaScript服务器端高级编程(Array.indexOf()和lastIndexOf()方法)
- java checked异常有那些_JAVA 的checked异常和unchecked异常
- linux备份系统iso,将Linux系统转换为ISO镜像文件以实现备份
- 【申博攻略】三.北交计算机学院学术型博士“申请-考核”攻略(经验分享篇)
- 学习java的第十七天,房贷简易计算器,三角形判断、面向对象重写方法的学习
- 数据库系统的基本组成
- ArcGIS 教程:Workflow Manager 高速浏览
- mariadb BSL协议期限
- 甘超波:NLP价值观
- RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍
- 区块链公链生态-赛道分类
- ios 科大讯飞错误码11201解决办法
- Oracle同一个值对应多个值逗号隔开(符号隔开)
- 物联网与python的联系_python和物联网
热门文章
- SparkSql读取外部数据源
- Git 笔记:基本操作工作流程
- 文巾解题 461. 汉明距离
- 如何使用 python 减少 kaggle Mushroom Classification 数据集中的特性数量?
- IDEA 2020.2 稳定版发布,带来了不少新功能...
- 在PyCharm中设置新建Python文件的模板格式方法
- Tableau系列之圆环图制作
- java消息幂等性实现_探讨一下实现幂等性的几种方式
- 【算法与数据结构】中缀表达式转为后缀表达式
- lucene源码分析(4)Similarity相似度算法