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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 极简入门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
相关文章
|
16天前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署bender个人仪表板
【4月更文挑战第2天】使用Docker部署bender个人仪表板
28 1
|
2天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
32 1
|
6天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署Seatsurfing预订座位系统
【4月更文挑战第12天】使用Docker部署Seatsurfing预订座位系统
32 3
|
9天前
|
JavaScript 前端开发 Docker
全栈开发实战:结合Python、Vue和Docker进行部署
【4月更文挑战第10天】本文介绍了如何使用Python、Vue.js和Docker进行全栈开发和部署。Python搭配Flask创建后端API,Vue.js构建前端界面,Docker负责应用的容器化部署。通过编写Dockerfile,将Python应用构建成Docker镜像并运行,前端部分使用Vue CLI创建项目并与后端交互。最后,通过Nginx和另一个Dockerfile部署前端应用。这种组合提升了开发效率,保证了应用的可维护性和扩展性,适合不同规模的企业使用。
|
9天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
14 0
|
9天前
|
存储 Linux Shell
centos 部署docker容器 安装 、基本使用方法(一)
centos 部署docker容器 安装 、基本使用方法(一)
17 0
|
13天前
|
测试技术 Linux 数据安全/隐私保护
【Docker项目实战】使用Docker部署PicoShare共享文件平台
【4月更文挑战第5天】使用Docker部署PicoShare共享文件平台
46 4
|
8月前
|
Java 应用服务中间件 Linux
使用docker部署springboot项目小白教程
使用docker部署springboot项目小白教程
343 0
|
30天前
|
NoSQL Java Redis
利用Docker部署一个简单的springboot项目
利用Docker部署一个简单的springboot项目
69 2
|
2月前
|
Java 关系型数据库 MySQL
docker 部署springboot项目,连接mysql容器
docker 部署springboot项目,连接mysql容器
86 0