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 命令来构造

    1. docker run -d -P --name myRedis redis:latest
    1. docker run -d -p 8080:80 --name mywebapp webapp
      那么我们使用docker-compose的话, 是如何快速高效的解决这个问题呢?

2. docker-compose启动服务

先来看看官网对于docker compose的描述 :
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。
简单来说, 就是使用一个yaml配置文件, 将我们一个项目所需要的依赖全部写入, 这样当微服务很多时就不用我们一个一个的docker run
下面来说说简单的步骤

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
  3. 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

  1. 为项目创建目录
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)
  1. 然后再创建一个依赖文件
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 在单机环境下一键打包运行相关推荐

  1. Docker - 通过快速脚本在不同的环境下一键安装Docker

    文章目录 Docker - 通过快速脚本在不同的环境下一键安装Docker 1.在 CentOS/RHEL 中安装 Docker 2.在 Ubuntu 中安装 Docker 3.在 SLES 中安装 ...

  2. App一键切换url环境、一键打包__Android拓展篇(Java)

    文 | Promise Sun 一.背景: 1. 2022上班第一天,整理一下过去的工作,发现这方面的小知识点,去年忘记记录博客了,于是就有了这篇文章.分享给大家,希望对有需要的朋友有帮助. 2. 项 ...

  3. MySQL数据库管理(二)单机环境下MySQL Cluster的安装

    上文<MySQL数据库管理(一)MySQL Cluster集群简单介绍>对MySQL Cluster集群做了简要介绍.本文将教大家一步步搭建单机环境下的MySQL数据库集群. 一.单机环境 ...

  4. 全开源深度学习平台PaddlePaddle入手之路(二)----利用Docker在Windows10专业版环境下配置PaddlePaddle...

    利用Docker在Windows10专业版环境下配置PaddlePaddle 对于PaddlePaddle的安装,查询官网信息,PaddlePaddle提供pip安装和Docker安装运行的使用方式. ...

  5. Oracle+ASM单机环境下,开启归档的最简单的方法

    在ASM单机环境下,开启归档的最简单的方法. 环境:oracle11g  11.2.0.4 登陆sqlplus [oracle@udevasm ~]$ sqlplus / as sysdba SQL* ...

  6. 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 ...

  7. 单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择...

    单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择. 当asp.net看到应用程序中app_offline.htm文件时,它会关闭应用程序的app-doma ...

  8. UE4 Windows环境下游戏打包基础教程(ios, windows, android)(UFE方式以及命令行方式)

    文章目录 环境 配置 一些会用到的路径 UFE打包 Windows Android IOS 命令行打包 注意事项 CMD指令 参数介绍 值得一看的参考 环境 Windows10 虚幻4.23.1 配置 ...

  9. GraphScope、Neo4j与TigerGraph单机环境下性能对比

    目前工业界和学术界已经开发出了很多图分析系统,针对图分析的计算特性提出了各种各样的优化策略,在图分析任务上取得了优异的性能.近年来,各种各样的图数据库支持了各种查询语言(例如Cypher.GSQL和G ...

最新文章

  1. VMware Server 2.0简单学习!
  2. 学着造轮子-RxLifeCycle
  3. oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
  4. c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...
  5. 2015前端生态发展回顾(转)
  6. 山石网科-Hillstone-SC-***(SSL-***)之配置终结篇
  7. JavaScript服务器端高级编程(Array.indexOf()和lastIndexOf()方法)
  8. java checked异常有那些_JAVA 的checked异常和unchecked异常
  9. linux备份系统iso,将Linux系统转换为ISO镜像文件以实现备份
  10. 【申博攻略】三.北交计算机学院学术型博士“申请-考核”攻略(经验分享篇)
  11. 学习java的第十七天,房贷简易计算器,三角形判断、面向对象重写方法的学习
  12. 数据库系统的基本组成
  13. ArcGIS 教程:Workflow Manager 高速浏览
  14. mariadb BSL协议期限
  15. 甘超波:NLP价值观
  16. RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍
  17. 区块链公链生态-赛道分类
  18. ios 科大讯飞错误码11201解决办法
  19. Oracle同一个值对应多个值逗号隔开(符号隔开)
  20. 物联网与python的联系_python和物联网

热门文章

  1. SparkSql读取外部数据源
  2. Git 笔记:基本操作工作流程
  3. 文巾解题 461. 汉明距离
  4. 如何使用 python 减少 kaggle Mushroom Classification 数据集中的特性数量?
  5. IDEA 2020.2 稳定版发布,带来了不少新功能...
  6. 在PyCharm中设置新建Python文件的模板格式方法
  7. Tableau系列之圆环图制作
  8. java消息幂等性实现_探讨一下实现幂等性的几种方式
  9. 【算法与数据结构】中缀表达式转为后缀表达式
  10. lucene源码分析(4)Similarity相似度算法