极简入门Docker-Compose部署以及项目编排实战

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 极简入门Docker-Compose部署以及项目编排实战
  • 用处:定义、运行多个容器的程序,批量容器编排。
  • YAML配置文件
  • single command指令学习
  • 使用Compose三个步骤:

    1. 定义Dockerfile
    2. 编写docker-compose.yaml
    3. 运行compose,docker-cmpose up启动
  • 安装docker-compose

    • Linux

      • Docker Compose存放在GitHub,高速安装Docker Compose如下:

        curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
      • 给compose指令赋予可执行的权利

        chmod +x /usr/local/bin/docker-compose
      • 检测是否安装成功,不成功的话就需要重启服务器

        [root@Contos7 ~]# docker-compose version
        docker-compose version 1.27.4, build 40524192
        docker-py version: 4.3.1
        CPython version: 3.7.7
        OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
    • Mac

      • mac其实不需要安装,因为Docker Desktop中就自带compose。
  • compose初体验 📦

    • 创建项目结构:

      mkdir composetest && cd composetest
    • 创建app.py文件,也就是项目文件:

      import time
      
      import redis
      from flask import Flask
      
      app = Flask(__name__)
      cache = redis.Redis(host='redis', port=6379)
      
      def get_hit_count():
          retries = 5
          while True:
              try:
                  return cache.incr('hits')
              except redis.exceptions.ConnectionError as exc:
                  if retries == 0:
                      raise exc
                  retries -= 1
                  time.sleep(0.5)
      
      @app.route('/')
      def hello():
          count = get_hit_count()
          return 'Hello World! I have been seen {} times.\n'.format(count)
    • 建立requirements.txt文件

      flask
      redis
    • 编写Dockerfile

      #将python:3.7-alpine作为基础镜像
      FROM python:3.7-alpine   
      #设置工作目录    
      WORKDIR /code    
      #设置环境变量     
      ENV FLASK_APP=app.py     
      #设置主机匹配所有地址,即所有主机可访问
      ENV FLASK_RUN_HOST=0.0.0.0 
      #安装包的时候不安装到全局
      #使员工gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了,并且可以加快编译速度
      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"]
    • 编写docker-compose.yml

      #docker-compose版本号
      version: "3.9"
      services:
        web:
          build: .
          ports:
            - "5000:5000"
        redis:
          image: "redis:alpine"
    • 在docker-compose.yml所在目录使用docker-compose up启动(定义、运行多个容器),docker-compose down停止
    • Tips⚠️ :这样创建出的容器的名字是当前docker-compose.yaml所在目录的目录名加上yml中的服务名,尾部的num表示该容器的副本数量,这些副本可以发送到其他机器上运行,compose会构建一个默认的网络(不使用docker0),所有容器默认在一个网络中
    • 使用idea用docker-compose打包发布

在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pgtBT0VD-1644003267186)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/93ec0055-0f8c-4cdc-9efb-26ccae0635d6/Untitled.png)]

    
    - 复制jar包pom配置
        
        ```docker
        <!--复制jar包到指定目录-->
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>gen-webadmin</id>
                                <phase>package</phase>
                                <configuration>
                                    <tasks>
                                        <copy todir="docker" file="target/${project.artifactId}-${project.version}.${project.packaging}" />
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
        ```
        ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/adcc8f80135c4b4b88e1e25f94b159c8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_70,g_se,x_16)

  • yam规则

    https://docs.docker.com/compose/compose-file/compose-file-v3/

    docker-compose.yaml核心

    #三层
    
    #compops版本号
    version: "xxx"
    #服务配置
    services:
         server1:
                configuration1:
                configuration2:
                configuration3:
                configuration4
                #启动顺序控制,先启动数组中的服务项,最后再启动本服务
                depends_on:
          
                ....
        server2:
                configuration1
                ....
    #全局配置
    netowkr
    volume
    
  • 使用docker-compose.yml构建wordpress博客园

    • docker-compose.yml

      version: "3.8"
      
      services:
        db:
          image: mysql:5.7
          volumes:
            - db_datas:/var/lib/mysql
          restart: always
          environment:
            MYSQL_ROOT_PASSWORD: somewordpress
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress
      
        wordpress:
          depends_on:
            - db
          image: wordpress:latest
          ports:
            - "5000:80"
          restart: always
          environment:
            WORDPRESS_DB_HOST: db:3306
            WORDPRESS_DB_USER: wordpress
            WORDPRESS_DB_PASSWORD: wordpress
            WORDPRESS_DB_NAME: wordpress
      
      volumes:
        db_datas: {}
    • 使用docker-compose up -d可以让其在后台启动,不加-d表示在前台启动
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5天前
|
测试技术 Linux 网络安全
【Docker项目实战】使用Docker部署Tasks.md任务管理白板
【6月更文挑战第1天】使用Docker部署Tasks.md任务管理白板
25 4
|
1天前
|
开发框架 .NET Linux
【.NET Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
该文介绍了如何不使用VS2019手动创建ASP.NET Core Blazor项目的Dockerfile并构建Docker镜像。首先,创建名为Dockerfile的文件,并复制提供的Dockerfile内容,该文件指定了基础镜像和工作目录。然后,通过CMD在项目目录下运行`docker build -t 自定义镜像名 .`来生成镜像。最后,使用`docker run`命令启动容器并验证项目运行。此外,文章还提到了将镜像推送到Azure Container Registry (ACR)的步骤。
|
1天前
|
Web App开发 测试技术 项目管理
【Docker项目实战】使用Docker部署Servas自托管书签管理工具
【6月更文挑战第5天】使用Docker部署Servas自托管书签管理工具
26 0
【Docker项目实战】使用Docker部署Servas自托管书签管理工具
|
1天前
|
Docker 容器
docker 部署gitlab
docker 部署gitlab
|
2天前
|
IDE 前端开发 时序数据库
【Docker项目实战】使用Docker部署speedtest-tracker速度测试追踪器
【6月更文挑战第4天】使用Docker部署speedtest-tracker速度测试追踪器
4 0
|
4天前
|
容器 Docker JavaScript
使用 Docker 和 Docker Compose 部署 Vue
使用 Docker 和 Docker Compose 部署 Vue 项目有两种方式:直接使用 Docker 和使用 Docker Compose。
29 0
|
5天前
|
容器 Docker 项目管理
【Docker项目实战】使用Docker部署tududi个人任务管理工具
【6月更文挑战第2天】使用Docker部署tududi个人任务管理工具
28 4
|
6天前
|
JavaScript 应用服务中间件 nginx
Docker 部署 Vue
在 Docker 中使用 Node 和 Nginx 基础镜像来部署一个 Vue 项目,通常可以按照以下步骤进行。这些步骤涵盖了从构建 Vue 项目到配置 Dockerfile 和 Nginx 的过程。
16 1
|
安全 数据安全/隐私保护 Docker
【转载】详解Docker 最低特权编排原则,安全与效率并行!(一)
Docker 平台和容器已经逐渐成为打包、部署和管理应用程序的标准。为了让容器在集群中于多节点间协调运行,这就需要一个关键的功能:容器编排(container orchestrator)。小编将分两篇为大家详细讲解这一重要功能。
1950 0