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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 极简入门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表示在前台启动
相关文章
|
16天前
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
163 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
7天前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
47 12
docker 部署 sftp
|
9天前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
178 6
|
15天前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
56 13
|
18天前
|
存储 Kubernetes 持续交付
为什么Docker容器化改变了开发与部署?
为什么Docker容器化改变了开发与部署?
|
Java 应用服务中间件 Linux
使用docker部署springboot项目小白教程
使用docker部署springboot项目小白教程
826 0
|
NoSQL Java Redis
利用Docker部署一个简单的springboot项目
利用Docker部署一个简单的springboot项目
356 2
|
Ubuntu Oracle Java
树莓派4B使用Docker部署SpringBoot项目——(三)使用Docker制作JDK8镜像
树莓派4B使用Docker部署SpringBoot项目——(三)使用Docker制作JDK8镜像
860 0
树莓派4B使用Docker部署SpringBoot项目——(三)使用Docker制作JDK8镜像
|
Java 关系型数据库 MySQL
docker 部署springboot项目,连接mysql容器
docker 部署springboot项目,连接mysql容器
548 0
|
Java Docker 容器
docker-compose部署一个springboot项目(包含环境)
docker-compose部署一个springboot项目(包含环境)
541 0