ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker-compose的安装和使用

2022-07-11 15:38:04  阅读:161  来源: 互联网

标签:容器 Compose redis compose Docker 安装 docker



typora-root-url: image

笔记来源于Bilibili狂神 :https://www.bilibili.com/video/BV1kv411q7Qc?p=7

简介

​ 我们之前操作Docker的过程是 :DockerFile build run 进行手动操作,单个容器,如果假设我们有100个微服务,并行微服务之间还存在依赖关系。这个时候,我们就可以使用Docker Compose来轻松高效的管理容器,定义运行多个容器。

官方介绍

  • 定义、运行多个容器

  • YAMLfile配置环境

    Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。要了解有关Compose的所有特性的更多信息,请参阅特性列表

    Compose可以在所有环境中工作:生产、阶段、开发、测试,以及CI工作流。您可以在常见用例中了解关于每个用例的更多信息

    使用Compose基本上有三个步骤:

    • 用 Dockerfile 定义你的应用程序的环境,这样它就可以在任何地方复制。

    • 在 Docker-compose 中定义组成应用程序的服务。这样它们就可以在一个独立的环境中一起运行。

    • 运行 docker-compose up 和 Compose 启动并运行整个应用程序。

作用

批量容器编排

Compose是Docker官方的开源项目,需要安装!

Dockerfile 让程序在任何地方运行,web服务。Redis、MySQL、Nginx。。。多个容器

Compose的YAML文件如下所示

version: '2.0'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

docker-compose up 100 个服务,也可以一键启动

Compose:重要的概念

  • 服务service,容器,应用(web,redis,mysql)

  • 项目project,就是一组关联的容器。

常见的Docker Compose脚本

下面这个是小伙伴开源的一些Docker Compose脚本,我们如果需要部署某个应用的时候,可以通过下面脚本,非常方便的进行部署

https://gitee.com/zhengqingya/docker-compose

安装Docker Compose

官方文档:https://docs.docker.com/compose/install/

下载


  1. 首先我们先安装一下Docker

​ 运行此命令以下载 Docker Compose 的当前稳定版本:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装不同版本的 Compose,请替换1.29.2 为您要使用的 Compose 版本。

  1. 为二进制文件添加可执行权限

     sudo chmod +x /usr/local/bin/docker-compose
    

    注意:如果docker-compose安装后命令失败,请检查您的路径。您还可以/usr/bin在路径中创建指向或任何其他目录的符号链接。

​ 例如

 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. 测试安装

     docker-compose --version
    

升级


如果您从 Compose 1.2 或更早版本升级,请在升级 Compose 后移除或迁移现有容器。这是因为,从 1.3 版开始,Compose 使用 Docker 标签来跟踪容器,并且需要重新创建容器以添加标签。

如果 Compose 检测到创建时没有标签的容器,它会拒绝运行,这样您就不会得到两组。如果您想继续使用现有容器(例如,因为它们有您想要保留的数据卷),您可以使用 Compose 1.5.x 使用以下命令迁移它们:

 docker-compose migrate-to-labels

或者,如果您不担心保留它们,则可以删除它们。Compose 只是创建新的。

$ docker container rm -f -v myapp_web_1 myapp_db_1 ...

卸载

如果您使用curl以下方式安装,则卸载 Docker Compose :

 sudo rm /usr/local/bin/docker-compose

如果您使用pip以下方式安装,则卸载 Docker Compose :

$ pip uninstall docker-compose

初次体验

在此页面上,您将构建一个在 Docker Compose 上运行的简单 Python Web 应用程序。该应用程序使用 Flask 框架并在 Redis 中维护一个命中计数器。虽然示例使用 Python,但即使您不熟悉此处演示的概念,也应该可以理解。

先决条件

确保您已经安装了Docker EngineDocker Compose。您不需要安装 Python 或 Redis,因为两者都由 Docker 镜像提供。

1.设置

定义应用程序依赖项。

  1. 为项目创建一个目录:
$ mkdir composetest
$ cd composetest
  1. 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)
    

    在此示例中,redis是应用程序网络上的 redis 容器的主机名。我们使用 Redis 的默认端口6379

    3.requirements.txt在您的项目目录中创建另一个文件并将其粘贴到:

    flask
    redis
    

2.创建Dockerfile

在此步骤中,您将编写一个用于构建 Docker 映像的 Dockerfile。该图像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。

在您的项目目录中,创建一个名为Dockerfile并粘贴以下内容的文件:

# syntax=docker/dockerfile:1
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"]

这告诉 Docker:

  • 从 Python 3.7 映像开始构建映像。
  • 将工作目录设置为/code.
  • 设置flask命令使用的环境变量。
  • 安装 gcc 和其他依赖项
  • 复制requirements.txt并安装 Python 依赖项。
  • 将元数据添加到图像以描述容器正在侦听端口 5000
  • .项目中的当前目录复制到.镜像中的workdir 。
  • 将容器的默认命令设置为flask run.

3.在 Compose 文件中定义服务

docker-compose.yml在您的项目目录中创建一个名为的文件并粘贴以下内容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

这个 Compose 文件定义了两个服务:webredis.

网络服务

web服务使用从Dockerfile当前目录中构建的映像。然后它将容器和主机绑定到暴露的端口5000. 此示例服务使用 Flask Web 服务器的默认端口5000.

Redis服务

redis服务使用 从 Docker Hub 注册表中提取的公共Redis映像。

构建应用

从您的项目目录,通过运行启动您的应用程序docker-compose up

$ docker-compose up

Compose 会拉取一个 Redis 镜像,为您的代码构建一个镜像,并启动您定义的服务。在这种情况下,代码会在构建时静态复制到映像中。

在浏览器中输入 http://localhost:5000/ 以查看应用程序正在运行。

切换到另一个终端窗口,然后键入docker image ls以列出本地镜像。

此时列出镜像应返回redisweb

 docker image ls

输入图片说明

停止应用程序,方法是docker-compose down 在第二个终端的项目目录中运行,或者在启动应用程序的原始终端中按 CTRL+C。

网络规则

使用下面的命令,就可以查看到docker中的网络

docker network ls 

输入图片说明

通过compose构建的服务,compose帮我们维护了,都会在一个网络下面,就可以通过域名访问

我们通过以下命令来进行查看,发现启动的两个服务,就是同处于同一个网络下的

docker network inspect composetest_default

输入图片说明

总结

我们可以对上述的操作,进行一下总结,就可以分为一下几个步骤

  • 应用 app.py
  • Docker file 将应用程序打包成镜像
  • Docker-compose yaml 文件(定义整个服务,需要的环境,web、redis)完整的上线服务
  • 启动compose项目(docker-compose up)
  • 流程
    • 创建网络
    • 执行Docker-compose yaml
    • 启动服务

原来我们没有用到docker-compose的时候,都是需要使用docker run,一个个的运行我们的容器

通过docker-compose,我们编写yaml文件,可以通过docker-compose一键启动服务,或者停止。

yaml规则

docker-compose.yaml规则

# 三层
version: "3.8"  # 定义版本
services:       # 定义服务
   服务1:web
       images
       build
       network
	   ......
   服务2:redis
   		.....
   服务3:nginx
   		.....
  # 其它配置 网络/卷、全局规则
  volumes:
  networks:
  configs:  

完整实例如下

version: "3.8"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

依赖关系

如果我们的项目还有依赖关系,比如 web 依赖于redis,也就是说项目需要首先启动redis

version: "3.8"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

快速搭建WordPress

官网搭建文档:https://docs.docker.com/compose/wordpress/

首先创建项目的文件夹

# 创建文件夹
mkdir my_wordpress
# 进入文件夹
cd my_wordpress/

然后创建一个 docker-compose.yml 文件

version: '3.3' # 定义版本

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:  # 依赖于上一个db,也就是需要db启动
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

后台启动项目

docker-compose up -d 

docker-compose up在分离模式下运行,拉取所需的 Docker 镜像,并启动 wordpress 和数据库容器。

到此为止,项目已经成功搭建完毕

输入图片说明

浏览器输入 http://IP:8000 即可访问。

正常的开源项目,可能还需要依赖 build后的jar包,所以我们还需要使用Dockerfile

当我们的文件准备齐全的时候,就可以一键启动项目

未来的趋势:linux、docker、k8s

掌握:docker基础、原理、网络、服务、集群、错误排查、日志。

docker-compose搭建微服务

我们可以使用下面命令 ,创建一个SpringBoot项目:https://start.spring.io/

  • 编写项目微服务
  • dockerfile构建镜像
  • 创建docker-compose来启动项目,进行服务编排
  • 丢到服务器 docker-compose启动
  • 如果出现了问题:使用docker-compose up --build(重新构建)

Docker小结

  • Docker镜像 -> 通过 run命令启动镜像
  • Dockerfile 构建镜像(服务打包)
  • docker-compose 启动项目(编排、多个微服务/ 环境)
  • Docker 网络

标签:容器,Compose,redis,compose,Docker,安装,docker
来源: https://www.cnblogs.com/nwnusun/p/16466558.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有