Docker合集第四期,数据卷,Dockerfile,DockerCompose

6.4 数据卷

6.4.1 数据卷简介

**数据卷(Volume)**是Docker中一种用于持久化存储容器数据的机制,它将主机上的目录或文件挂载到容器内部的指定目录,使得容器内部的数据可以被持久化到主机上的文件系统中,即使容器被删除或重新创建,数据仍然可以被保留。
数据卷是容器中虚拟的文件或目录,指向宿主中真实文件或目录。

使用数据卷的好处包括:

  1. 数据持久化:通过数据卷,容器的数据可以在容器被删除或停止后仍然保留在主机上,从而避免数据丢失。

  2. 数据共享:多个容器可以共享同一个数据卷,从而实现数据共享和通信。

  3. 数据备份和恢复:通过备份数据卷,可以方便地进行数据备份和恢复。

在Docker中,可以使用docker volume create命令来创建一个数据卷,然后使用docker run命令时使用-v选项将数据卷挂载到容器内部的指定目录中,例如:

docker volume create mydata
docker run -v mydata:/data myimage上述命令会将名为`mydata`的数据卷挂载到容器内部的`/data`目录中。

除了使用命令行,也可以在docker-compose.yml文件中定义数据卷,例如:

version: '3'
services:
 myservice:
  image: myimage
  volumes:
    mydata:/data

上述docker-compose.yml文件中使用volumes关键字定义了名为mydata的数据卷,并在myservice服务中将其挂载到容器内部的/data目录中。

6.4.2 数据卷指令

以下是Docker中常用的数据卷操作指令:

  1. docker volume create – 创建一个数据卷
  2. docker volume inspect – 查看数据卷的详细信息
  3. docker volume ls – 列出所有数据卷
  4. docker volume prune – 删除所有未被使用的数据卷
  5. docker run -v – 在容器中挂载一个数据卷
  6. docker volume rm – 删除一个指定的数据卷
docker run -v mydata:/data myimage

上述命令将名为 mydata 的数据卷挂载到容器内部的 /data 目录上

docker volume rm mydata

上述命令将名为 mydata 的数据卷删除。需要注意的是,在删除数据卷之前,需要先停止正在使用该数据卷的容器。

6.5 Dockerfile自定义镜像

官网文档: https://docs.docker.com/engine/reference/builder

6.5.1镜像结构

Docker的镜像结构主要由多个镜像层(Image Layer)组成,每个镜像层都包含了一些文件系统的变化。镜像层采用了联合文件系统(UnionFS)的技术,即将多个文件系统层联合起来呈现为一个统一的文件系统,从而实现了镜像的分层存储。

具体来说,每个镜像层都是只读的,并且是在上一个镜像层的基础上进行的修改。当创建新的镜像时,Docker会将这些镜像层堆叠在一起,形成一个新的镜像。由于镜像层是只读的,因此创建新的镜像不会改变原有的镜像层,从而实现了镜像的可重用性和高效性。

6.5.2 Dockerfile语法

Dockerfile是一个文本文件,用于定义Docker镜像的构建方式和配置信息(可以将一个SpringBoot工程定义为一个镜像)。Dockerfile中包含了一系列的指令和参数,用于描述镜像的构建过程、所需的环境和依赖关系等信息。

  • 基本指令
  1. FROM – 定义基础镜像,即当前镜像继承的父镜像。
  2. MAINTAINER – 定义镜像的维护者。
  3. RUN – 定义在镜像构建过程中需要执行的命令。
  4. CMD – 定义容器启动时需要执行的命令。
  5. EXPOSE – 定义容器暴露的端口。
  6. ENV – 定义环境变量。
  7. ADD/COPY – 将文件或目录从主机复制到镜像中。
  8. VOLUME – 定义容器的挂载点,用于持久化存储数据。
  9. WORKDIR – 定义容器中的工作目录。
  10. USER – 定义容器运行时的用户。
  11. ARG – 定义构建时的参数。
  12. ONBUILD – 定义一个镜像,该镜像会在其他镜像中作为基础镜像时触发执行。
  13. LABEL – 定义镜像的元数据,例如版本、描述等信息。
  • DockerFile示例

下面是使用 Java 的 Dockerfile 示例,用于构建一个 Spring Boot 应用程序的镜像:

# 指定基础镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 复制应用程序代码
COPY target/myapp.jar .

# 暴露端口
EXPOSE 8080

# 在容器启动时运行应用程序
CMD ["java", "-jar", "myapp.jar"]

该 Dockerfile 的解释如下:

  1. FROM 指令指定基础镜像 openjdk:11-jre-slim

  2. WORKDIR 指令设置工作目录为 /app

  3. COPY 指令将构建后的应用程序 myapp.jar 复制到镜像中。

  4. EXPOSE 指令指定容器监听的端口 8080

  5. CMD 指令在容器启动时运行命令 java -jar myapp.jar,其中 myapp.jar 是应用程序的可执行 JAR 文件。

该 Dockerfile 用于构建一个 Spring Boot 应用程序的镜像,该应用程序在容器启动时会监听端口 8080。你可以使用以下命令构建该镜像:

$ docker build -t my_spring_boot_app .

其中 -t 参数指定镜像的名称为 my_spring_boot_app. 表示 Dockerfile 文件所在目录。

然后,可以使用以下命令运行该镜像:

$ docker run -p 8080:8080 my_spring_boot_app

其中 -p 参数将容器的端口 8080 映射到主机的端口 8080,从而使应用程序可以通过主机的 IP 地址进行访问。

  • DockerFile存放位置

通常情况下,Dockerfile 文件应该放在 Spring Boot 项目的根目录下。这样,当你在根目录下执行 docker build 命令时,Docker 会自动查找 Dockerfile 文件并使用它来构建镜像。

如果你的 Spring Boot 项目有多个模块,你可以在每个模块的根目录下分别创建 Dockerfile 文件,并在构建镜像时指定要使用的 Dockerfile 文件。例如,假设你有一个名为 myapp 的 Spring Boot 项目,其中包括一个名为 web 的模块和一个名为 service 的模块,那么你可以在 myapp 的根目录下创建一个名为 Dockerfile 的文件,并在 web 模块和 service 模块的根目录下分别创建名为 Dockerfile.webDockerfile.service 的文件。然后,你可以使用以下命令构建每个模块的镜像:

$ docker build -t myapp-web -f web/Dockerfile.web .
$ docker build -t myapp-service -f service/Dockerfile.service .

其中 -t 参数指定镜像的名称,-f 参数指定要使用的 Dockerfile 文件,. 表示 Dockerfile 文件所在目录。

6.6 DockerCompose文件

DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/

6.6.1 概念

Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,它可以让你轻松地定义和管理多个容器应用程序的组件,以及它们之间的相互关系和依赖关系。

通常情况下,一个容器应用程序可能由多个容器组成,例如一个 Web 应用程序可能需要一个 Web 服务器容器、一个数据库容器和一个缓存容器。使用 Docker Compose,你可以使用 Docker Compose 文件来定义这些容器,以及它们之间的相互关系和依赖关系,然后使用 docker-compose 命令来启动、停止和管理这些容器。

Docker Compose 文件使用 YAML 格式编写,它包含了一些基本的元素,例如服务、容器、网络和卷。通过定义这些元素,你可以轻松地创建一个完整的容器应用程序。

6.6.2 示例

以下是一个简单的 Docker Compose 文件示例,用于定义一个 Web 应用程序的容器组成部分:

version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: mypassword

该 Docker Compose 文件中包含两个服务 webdb,分别对应 Web 服务器容器和数据库容器。web 服务使用 Dockerfile 构建镜像,并将容器端口 8000 映射到主机端口 8000,同时指定了 db 服务为它的依赖项。db 服务使用 Postgres 镜像,并设置了 POSTGRES_PASSWORD 环境变量。

使用以下命令可以启动该容器应用程序:

$ docker-compose up

该命令会启动 webdb 服务,并创建对应的容器。你可以使用以下命令来停止容器应用程序:

$ docker-compose down

使用 Docker Compose 可以轻松地定义和管理多个容器应用程序的组件和依赖关系,从而简化了容器化应用程序的开发和部署过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值