Docker学习笔记(十二)---Docker Compose

Docker Compose

一. 简介

  • Docker Compose是Docker公司推出的工具软件, 可以管理多个Docker容器组成一个应用. 你需要定义一个YAML格式的配置文件docker-compose.yml, 写多个容器之间的调用关系. 然后 只要一个命令, 就能同时启动/关闭这些容器

1. 作用

  • docker建议我们每一个容器中只运行一个服务, 因为dockers容器本身占用资源极少, 所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题?
  • 如果我需要同时部署好多个服务, 难道要每个服务单独写Dockerfile然后再构建镜像, 构建容器, 这样很累, 所以docker官方给我们提供了docker-compose多服务部署的工具
  • eg: 要实现一个Web微服务项目, 除了Web服务容器本身, 往往还需要再加上后端的数据库mysql服务容器, redis服务器, 注册中心eureka/nacos甚至还包括负载均衡容器等等…
  • Compose允许用户通过单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为 一个项目(project)
  • 可以很容易的用一个配置文件定义一个多容器的应用, 然后使用一个命令安装这个应用的所有以来, 完成构建. Docker-Compose解决了容器于容器之间如何管理编排的问题

2. 官方文档

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.

Compose works in all environments: production, staging, development, testing, as well as CI workflows. You can learn more about each case in Common Use Cases.

Using Compose is basically a three-step process:

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.

    • Dockerfile保证我们的项目在任何地方可以运行
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.

    • services什么是服务

    • dockers-compose.yml这个文件怎么写

  3. Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using Compose standalone(docker-compose binary).

    • 启动项目
  • Compose.yml(官方例子)

    version: "3.9"  # optional since v1.27.0
    services:
      web:
        build: .
        ports:
          - "8000:5000"
        volumes:
          - .:/code
          - logvolume01:/var/log
        depends_on:
          - redis
      redis:
        image: redis
    volumes:
      logvolume01: {}
    
  • 安装如果使用的是dockerDesktop那么是自带的, 其他需要根据官网操作自行安装

3. 任务编排解决了什么

  • 首先需要决定容器启动的启动顺序
  • 多个run命令
  • 容器间的启停或当即, 有可能导致IP地址对应的容器实例变化, 映射出错, 要么生产IP写死(可以但是不推荐), 要么通过服务调用

二. 初体验

官网地址

1. docker核心概念

  • 文件

    docker-compose.yml

  • 两个要素

    服务: 一个一个应用容器实力

    工程: 由一组关联的应用容器组成的一个完整业务单元, 再dockers-compose.yml文件中定义

2. 三个步骤

  • 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  • 使用docker-compose.yml定义一个完整业务单元, 安排好整体应用中的各个容器服务
  • 最后, 执行docker-compose up命令来启动并运行整个应用程序, 完成一键部署上线

3. Compose常用命令

Compose常用命令
docker-compose -h查看帮助命令
docker-compose up启动所有dockers-compose服务
docker-compose up -d启动所有dockers-compose服务并后台运行
docker-compose down停止并删除容器, 网络, 卷, 镜像
docker-compose exec [yml里面的服务id]进入容器实力内部docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps展示当前docker-compose编排过的运行的所有容器
docker-compose top展示当前docker-compose编排过的容器进程
docker-compose logs [yml里面的服务id]查看容器输出日志
docker-compose config检查配置
docker-compose config -q检查配置, 有问题才有输出
docker-compose restart重启服务
docker-compose start启动服务
docker-compose stop停止服务

4. 使用Compose

①.编写docker-compose.yml文件

举例解释

#  docker-compose版本
version: "3.9"  # optional since v1.27.0

# 表示多个服务
services:
  # 自定义服务名只要不冲突就行	
  web:
	# 这里注意build和image只能选择一个使用
	# build: 可以在后面直接填写绝对路径和相对路径, 呀可以使用context
    build: 
	   # 这里注意如果这里写了的话就不要再build后面写东西了
	   context: ./dir
	   # 如果不是默认名字的Dockerfile需要指定文件名
	   dockerfile: Dockerfile-alternate
	   
	# 镜像名:tag 确保你docker images中有对应的镜像
    image: azang:1.0
	# 容器名->如果不指定容器名字的话docker会在前面拼上当前路径后面会按照镜像拼接顺序01,02,03.....
	container_name: azang-server
	# 映射端口号
    ports:
      - "8000:5000"
	# 挂载卷
    volumes:
      - .:/code
      - logvolume01:/var/log
    # docker网络名->如果没有的话会创建一个Docker网络
    networks:
      - azang_net
	# 此容器依赖于redis启动
    depends_on:
      - redis
      - mysql

  # 另外的服务(redis)
  redis:
    image: redis:6.0.8
    ports:
      - 6379:6379
    volumes:
      - /app/redis/redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    network:
      - azang_net
	# 启动命令
    command: redis-server/etc/redis/redis.conf

  # 另外的服务(mysql)
  mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    volumes:
      - /app/mysql/db:/var/lib/mysql
      - /app/mysql/conf/my.conf:/etc/my.cnf
      - /app/mysql.init:/docker-entrypoint-initdb.d
    network:
      - azang_net
	# 启动命令
    command: --default-authentication-plugin=mysql_native_password # 解决低版本外部无法访问
networks:
	azang_net:
②.编写完docker-compose.yml后需要对于springboot.yml或者bootstrap.yml文件进行改写

可以将之前写死的mysql或者redis以及其他的中间件或者数据库的ip从写死ip换成回应的服务名, 这样项目启动的时候就不会关心具体的ip而关心的是在同docker-net下容器(这里dockers-compose中服务名字和项目yml中的ip对应的应用的名字是需要一一对应的再次强调)

之后就可以根据上面的常用命令进行启动了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker 是一种开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何支持 Docker 的平台上运行这些容器。本文将介绍 Docker 基础知识和使用方法。 ## 安装 Docker Docker 官方提供了不同平台的安装包,可以在官网上选择对应平台的安装包进行下载。安装完成后,可以在命令行中输入 `docker version` 命令来验证 Docker 是否安装成功。 ## 镜像和容器 Docker 的核心概念是镜像和容器。镜像是一个只读的模板,它包含了运行应用程序所需的所有信息,如代码、运行时环境、库文件、环境变量等。容器则是从镜像启动的运行实例,它可以被启动、停止、删除,并且可以与其他容器进行通信。 ### 镜像 Docker 镜像可以使用 `docker pull` 命令从 Docker Hub 上下载,也可以使用 `docker build` 命令从 Dockerfile 中构建。一个 Dockerfile 是一个包含构建 Docker 镜像所需的指令的文本文件。 例如,下面是一个构建一个基于 Ubuntu 操作系统的 Docker 镜像的 Dockerfile: ``` # 使用 Ubuntu 作为基础镜像 FROM ubuntu:latest # 设置镜像的作者 MAINTAINER yourname # 更新 Ubuntu 系统 RUN apt-get update # 安装必要的软件 RUN apt-get install -y nginx # 复制本地文件到镜像中 COPY index.html /var/www/html/ # 暴露容器端口 EXPOSE 80 # 设置容器启动命令 CMD ["nginx", "-g", "daemon off;"] ``` 使用 `docker build` 命令来构建 Docker 镜像: ``` $ docker build -t myimage . ``` ### 容器 使用 `docker run` 命令可以启动一个容器。例如,启动上面构建的 `myimage` 镜像: ``` $ docker run -d -p 8080:80 myimage ``` 其中 `-d` 表示在后台运行容器,`-p` 表示将容器的端口映射到主机的端口,`myimage` 是要启动的镜像名称。 使用 `docker ps` 命令可以查看当前正在运行的容器。使用 `docker stop` 命令可以停止容器。 ## Docker Compose Docker Compose 是一个工具,它可以定义和运行多个 Docker 容器。它使用 YAML 文件来配置应用程序的服务。例如,下面是一个简单的 Docker Compose 配置文件: ``` version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" ``` 使用 `docker-compose up` 命令可以启动这个应用程序。使用 `docker-compose down` 命令可以停止应用程序并删除容器。 ## 总结 本文介绍了 Docker 的基础知识和使用方法,包括镜像、容器Docker Compose。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社畜阿藏405

挣点钱不丢人吧?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值