docker-compose教程(安装,使用, 快速入门)

核心概念

在Docker和其他容器化技术中,"容器"、"网络"、"卷"和"镜像"是四个核心概念,每个都扮演着不同的角色:

1. 容器(Containers)

容器是一种轻量级、可执行的独立软件包,它将软件运行所需的代码、运行时、系统工具、库和设置打包在一起。容器与虚拟机类似,但更加轻量,因为它们不需要额外运行一个完整的操作系统,而是直接在宿主的操作系统上运行,共享内核。容器是短暂的,它们存在的时间从启动直到被终止。

2. 镜像(Images)

镜像是容器运行的模板,它是一个轻量级、只读的文件系统。镜像包含了启动容器所需的所有内容——代码、库、环境变量、配置文件等。你可以把它想象成容器的“蓝图”。通常,镜像基于某个基础镜像构建,上面加上一些定制化内容。镜像在构建后可以被存储在镜像仓库中,并可以被多次用来启动新的容器。

3. 卷(Volumes)

在Docker中,卷用于数据持久化和数据共享。由于容器本身是无状态、临时的,当容器被删除时,所有保存在容器文件系统中的数据也会丢失。为了解决这个问题,Docker引入了卷的概念。卷是独立于容器的,可以挂载到容器内部的特定路径,这样即使容器停止或删除,卷中的数据也仍然存在。卷可以在多个容器之间共享和重用。

4. 网络(Networks)

Docker网络允许容器间通信,以及容器与外部世界通信。当你启动一个Docker容器时,你可以连接它到一个或多个网络。Docker支持不同类型的网络,比如桥接网络(bridge)、覆盖网络(overlay)和主机网络(host),每种网络类型适用于不同的场景。通过正确配置网络,你可以精细地控制容器之间如何相互作用,以及它们如何访问外部网络。

Docker Compose 是一种工具,用于定义和运行多容器Docker应用程序。通过一个配置文件来管理多个Docker容器,使得部署多容器应用变得更简单。下面是关于 Docker Compose 的安装、使用和快速入门的指导。

安装 Docker Compose

Windows 和 Mac

如果你在使用 Docker Desktop (Windows 或 Mac),Docker Compose 已经包含在其中,无需单独安装。
ps: Docker Desktop的安装可以看我上一篇文章

Linux

在 Linux 系统上,你需要单独安装 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
sudo chmod +x /usr/local/bin/docker-compose

使用 Docker Compose

1. 编写 Docker-compose.yml 文件

这个文件定义了所需的服务、网络和卷。例如,一个简单的 docker-compose.yml 文件可能看起来像这样:

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
2. 启动服务

docker-compose.yml 文件所在的目录中运行以下命令来启动服务:

docker-compose up

这个命令会根据 docker-compose.yml 文件中的定义启动所有服务。

3. 停止服务

要停止并移除所有由 docker-compose up 命令启动的容器,可以使用:

docker-compose down

快速入门(以前后端分离项目作为示例)

示例:对于一个使用Vue.js前端和Java后端,以及MySQL数据库的前后端分离项目,通过Docker容器化部署在服务器上并运行起来。可以分为几个主要步骤

步骤1: 准备项目代码

  • 前端(Vue+Webpack): 一个包含所有Vue.js源代码和Webpack配置文件的目录。
  • 后端(Java): 包含Java源代码和构建脚本(如Maven或Gradle)的目录。
  • 数据库(MySQL): 准备初始化SQL脚本,用于设置数据库结构和初始数据。

步骤2: 编写Dockerfile

为前端、后端和数据库各写一个Dockerfile:

  • 前端Dockerfile:

    FROM node:14 as build-stage
    WORKDIR /app
    COPY package*.json ./
    RUN npm install
    COPY . .
    RUN npm run build
    
    FROM nginx:stable-alpine as production-stage
    COPY --from=build-stage /app/dist /usr/share/nginx/html
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    

    这个Dockerfile使用node镜像构建Vue项目,然后使用nginx镜像来部署。

  • 后端Dockerfile:

    FROM openjdk:11
    WORKDIR /app
    COPY . /app
    RUN ./mvnw clean package
    EXPOSE 8080
    CMD ["java", "-jar", "target/myapp.jar"]
    

    这个Dockerfile使用OpenJDK镜像来构建并运行Java应用。

  • MySQL Dockerfile:
    MySQL通常可以直接使用官方镜像,并通过Docker Compose来配置。

步骤3: 创建Docker Compose文件

编写一个docker-compose.yml文件来定义和运行所有服务:

version: '3.8'
services:
  frontend:
    build: ./path_to_frontend
    ports:
      - "80:80"
  backend:
    build: ./path_to_backend
    ports:
      - "8080:8080"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql
    ports:
      - "3306:3306"
volumes:
  db-data:

步骤4: 构建和运行容器

1. 构建服务

在包含 docker-compose.yml 文件的目录中运行以下命令来构建所有服务的镜像。这会查找每个服务指定的Dockerfile,并执行构建过程。

docker-compose build
2. 运行服务

构建完成后,使用以下命令启动所有服务。-d 参数表示在后台运行服务。

docker-compose up -d

这个命令将启动所有在 docker-compose.yml 文件中定义的服务,并且容器将在后台运行。

示例 docker-compose.yml

下面是一个简化的 docker-compose.yml 文件示例,它定义了三个服务:前端、后端和数据库。

version: '3.8'
services:
  frontend:
    build: ./frontend
    ports:
      - "80:80"
    depends_on:
      - backend

  backend:
    build: ./backend
    ports:
      - "8080:8080"
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

在这个配置中:

  • 前端 服务构建自 ./frontend 目录的Dockerfile,并将容器的80端口映射到宿主机的80端口。
  • 后端 服务构建自 ./backend 目录的Dockerfile,并将容器的8080端口映射到宿主机的8080端口。
  • 数据库 使用了官方的MySQL 5.7镜像,并设置了环境变量来初始化数据库。
3. 检查服务状态

一旦服务运行起来,你可以使用以下命令来查看运行中的容器的状态:

docker-compose ps

这将列出所有由 docker-compose 管理的容器及其状态。

4. 访问应用
  • 前端 可以通过 http://localhost 访问(或者使用你服务器的IP地址)。
  • 后端API 可以通过 http://localhost:8080/api 访问。
5. 停止和清理服务

当不再需要运行服务时,可以使用以下命令停止所有服务并移除容器,同时保留数据卷和网络配置,以便下次可以快速启动。

docker-compose down

通过以上步骤,你的前后端分离项目就可以通过Docker容器在任何Docker支持的环境中一致地运行了。这样的部署方式简化了环境配置,提高了项目的可移植性和易维护性。

关于配置文件的参数解释

docker-compose.yml 文件用于定义一组相关联的服务(容器),这些服务可以一起协作作为一个应用。一个基本的文件包含以下几个部分:

  • version: 指定 Docker Compose 文件的版本,这会影响你可以使用的配置选项。
  • services: 定义你的应用中的各个服务(容器),每个服务可以包含镜像设置、端口映射等。
  • volumes: 定义数据卷,用于数据持久化和服务之间的数据共享。
  • networks: 定义网络,用于设置容器间的网络连接。

具体配置项解释

  1. version:

    version: '3.8'
    

    这里的 '3.8' 表示你使用的是 Docker Compose 3.8 版本的配置格式。

  2. services:

    services:
      frontend:
        build: ./path_to_frontend
        ports:
          - "80:80"
    
    • frontend 是服务的名称。
    • build: ./path_to_frontend 告诉 Docker Compose 在指定路径查找 Dockerfile 并构建镜像。
    • ports 指定端口映射,将容器内部的 80 端口映射到宿主机的 80 端口。
  3. 环境变量 (environment):

    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
    
    • 这些键值对设置容器内的环境变量,例如 MySQL 服务的根密码和数据库名称。
  4. volumes:

    volumes:
      - db-data:/var/lib/mysql
    
    • db-data 是一个在宿主机和容器间共享的数据卷名,/var/lib/mysql 是它在容器内的挂载点。
  5. 网络 (networks):

    networks:
      - fastgpt
    
    • 定义容器间的网络连接,fastgpt 是一个自定义网络,确保服务间可以互相发现和通信。

使用 Docker Compose

  • 启动服务docker-compose up,这会根据 yml 文件中的定义启动所有服务。
  • 停止服务docker-compose down,这不仅停止所有服务,还会删除网络和默认情况下创建的所有容器。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

接着奏乐接着舞。

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值