Docker容器

Docker-compose的安装和使用

本文主要是介绍Docker-compose的安装和使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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 Engine 和Docker 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 网络
这篇关于Docker-compose的安装和使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!