相关推荐recommended
【docker】Docker Compose 使用介绍
作者:mmseoamin日期:2024-01-25

一、什么是Docker Compose

Docker Compose是一个用于定义和运行多个Docker容器的工具。它允许您使用YAML文件来配置应用程序的服务、网络和卷等方面,并通过单个命令即可快速启动和停止整个应用程序的多个容器。

Docker Compose的主要作用如下:

  1. 管理多个容器:Docker Compose允许您在一个项目中定义和管理多个Docker容器。它通过使用一个配置文件来定义每个容器的服务、网络和卷等方面,从而使得启动和停止多个容器变得简单且可重复。

  2. 定义容器之间的依赖关系:使用Docker Compose,您可以指定容器之间的依赖关系。这意味着您可以确保在启动应用程序时,所有的依赖容器都会被正确地启动,并且在停止应用程序时,所有的依赖容器都会被正确地停止。

  3. 简化开发环境的搭建:在开发环境中,通常需要同时运行多个容器,如数据库、Web服务器等。使用Docker Compose,您可以通过一个命令即可一键启动整个开发环境,从而简化了环境搭建的过程。

  4. 提高应用程序的可移植性:使用Docker Compose,您可以将整个应用程序以及其所需的容器和配置打包成一个可移植的镜像,从而使得应用程序可以在不同的环境中运行,而不需要重新配置和安装依赖。

总之,Docker Compose简化了多个Docker容器的管理和部署,提供了一种简单而可靠的方式来定义和运行多个容器,并帮助开发人员更高效地构建和部署应用程序。

二、Docker Compose 安装

Docker Compose的安装非常简单,安装如下操作即可。

## 安装最新版本docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
## 加上许可权限
sudo chmod +x /usr/local/bin/docker-compose
## 查看是否已成功安装
docker-compose --version
## docker-compose是一个文件,如果要卸载只需要把文件删除即可
rm /usr/local/bin/docker-compose

上面地址github.com有时候可能连不上(需要梯子),也可以从我的网盘下载,然后放在服务器上面。

网盘地址:

版本:v2.23.3
链接:https://pan.baidu.com/s/19i48r4qloOYSTh35J1XZJA 
提取码:s8ta
## 把文件传到目录 /usr/local/bin/docker-compose
## 加上许可权限
sudo chmod +x /usr/local/bin/docker-compose
## 查看是否已成功安装
docker-compose --version

三、Docker Compose 的优点

Docker Compose的优点主要包括:

  1. 快速原型设计:对于初创公司或项目,使用Docker Compose可以快速搭建原型,并且随着项目的增长和改变,可以轻松地扩展环境。

  2. 环境管理:通过Docker Compose,可以在同一宿主机上创建多个环境(开发、测试、生产等),每个环境相互隔离,保证环境的一致性。

  3. 一键式部署:通过一个简单的命令(例如docker-compose up),就可以启动和运行一组相关的容器。这对于开发和测试环境来说非常方便。

  4. 简化配置:Docker Compose使用YAML文件进行配置,结构简单,易于理解,使得配置工作变得简单。

  5. 版本控制:由于Docker Compose的配置是放在代码库中的,因此可以通过版本控制工具进行版本控制,这对于团队协作和项目管理非常有帮助。

  6. 资源隔离:Docker Compose可以设置不同的资源限制,保证容器之间的资源隔离,避免资源争用和冲突。

  7. 跨平台运行:由于Docker和Docker Compose是跨平台的,可以在不同的操作系统和硬件平台上运行,使得应用的部署更加灵活。

  8. 易于集成:Docker Compose可以和许多其他工具和服务集成,例如日志管理、监控、CI/CD等,使得DevOps流程更加顺畅。

  9. 支持多种网络模式:Docker Compose支持多种网络配置,包括bridge、host和none模式,可以满足不同的网络需求。

  10. 灵活的端口映射:Docker Compose允许用户自定义容器内部的端口映射,使得外部访问更加灵活。

总的来说,Docker Compose提供了许多实用的功能和优点,使得容器化的应用程序部署和管理变得更加简单和高效。

四、Docker Compose 常用指令

Docker Compose提供了一组常用的指令,用于管理和操作容器化应用程序。以下是一些常用的Docker Compose指令:

  1. docker-compose up:启动应用程序的所有服务。如果容器不存在,则会自动创建并启动。如果容器已经存在,则会重新启动。

  2. docker-compose down:停止并移除应用程序的所有服务。这将停止并删除所有相关的容器、网络和卷。

  3. docker-compose start:启动应用程序的所有服务。与docker-compose up不同的是,docker-compose start只会启动已经存在的容器,而不会重新创建。

  4. docker-compose stop:停止应用程序的所有服务。与docker-compose down不同的是,docker-compose stop只会停止容器,而不会删除它们。

  5. docker-compose restart:重启应用程序的所有服务。这将停止并重新启动所有容器。

  6. docker-compose ps:列出应用程序的所有服务及其状态。这将显示每个服务的容器ID、状态、端口映射等信息。

  7. docker-compose logs:查看应用程序的服务日志。这将显示所有服务的日志输出。

  8. docker-compose build:构建应用程序的服务镜像。这将根据定义的Dockerfile构建镜像。

  9. docker-compose exec:在运行的容器中执行命令。例如,docker-compose exec web ls将在名为web的容器中执行ls命令。

  10. docker-compose down --volumes:停止并移除应用程序的所有服务,并删除所有相关的容器、网络和卷。使用--volumes选项可以删除与服务关联的卷。

五、使用示例

1、基本使用

下面是一个简单的Docker Compose使用示例:

假设我们有一个应用程序,由两个服务组成:一个是Web服务,一个是数据库服务。

  1. 创建一个名为docker-compose.yml的文件,并在文件中添加以下内容:
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./web:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
  1. 在同一目录下创建一个名为web的文件夹,并在文件夹中添加一个index.html文件,作为Web服务的内容。

  2. 打开终端,进入包含docker-compose.yml文件的目录,并运行以下命令启动应用程序:

docker-compose up -d

这将启动两个服务:Web服务和数据库服务。Web服务将使用Nginx镜像,并将主机的80端口映射到容器的80端口。Web服务的内容将从主机的web文件夹挂载到容器的/usr/share/nginx/html目录。

数据库服务将使用MySQL镜像,并设置了一些环境变量来配置数据库。数据库的数据将从主机的dbdata卷挂载到容器的/var/lib/mysql目录。

通过运行docker-compose up -d命令,应用程序将在后台运行。

2、结合Springboot项目使用

当使用Docker Compose结合Spring Boot项目时,可以按照以下步骤进行操作:

  1. 编写Dockerfile

在Spring Boot项目的根目录下,创建一个名为Dockerfile的文件。在Dockerfile中,你可以指定用于构建镜像的镜像名和标签,以及在容器中运行的命令。以下是一个示例Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY my-springboot.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

在这个例子中,我们使用openjdk:8-jdk-alpine作为基础镜像,将应用程序的JAR文件复制到容器中,并设置容器启动时执行的命令。

  1. 构建镜像

在Spring Boot项目的根目录下,打开终端或命令提示符,并运行以下命令来构建镜像:

docker build -t my-springboot:latest .

这个命令将构建一个名为my-springboot的镜像,标签为latest。

  1. 编写docker-compose.yml文件

创建一个名为docker-compose.yml的文件,用于定义容器的配置。在docker-compose.yml文件中,你可以指定镜像名、容器端口、卷挂载等信息。以下是一个示例docker-compose.yml文件:

version: '3'
services:
  my-springboot:
    image: my-springboot:latest
    ports:
      - "8080:8080"
    volumes:
      - ./logs:/usr/src/myapp/logs

在这个例子中,我们指定了服务名为my-springboot,使用的镜像为my-springboot:latest,将容器的8080端口映射到主机的8080端口,并将本地的./logs目录挂载到容器的/usr/src/myapp/logs目录。

  1. 启动容器

在终端或命令提示符中,运行以下命令来启动容器:

docker-compose up -d

这个命令将启动名为my-springboot的服务,并在后台运行。你可以使用其他命令来管理容器,例如停止容器、重启容器等。

参考

  • https://docs.docker.com/engine/reference/commandline/compose/
  • https://docs.docker.com/compose/compose-file/