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

举报
芝士味的椒盐 发表于 2022/05/03 17:50:16 2022/05/03
【摘要】 👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟🌈擅长领域:Java、大数据、运维、电子🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!用处:定义、运行多个容器的程序,...

在这里插入图片描述

👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!


  • 用处:定义、运行多个容器的程序,批量容器编排。

  • 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配置

        <!--复制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>
        

        在这里插入图片描述

  • 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表示在前台启动

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。