Docker数据卷和Dockerfile

1、什么是Docker数据卷

前言:

在下载的镜像中,我们不能够去改变它内部的一些配置,因为docker的镜像文件是已经配置好的,无法改变,我们只能改变镜像启动后的容器里面的内容,但是又因为,容器本来就是一个临时的,当容器停止了,那么我们内部的一些存储的数据也将会丢失,那么docker官方为了能够解决这个临时性的问题而产生了数据卷(volume)这个组件。

Docker 数据卷(Volumes)是 Docker 中用于持久化和共享数据的机制。数据卷使得 Docker 容器可以在容器生命周期之外持久化数据,并且方便在不同容器之间共享数据。具体来说,Docker 数据卷的特点和功能包括:

  1. 持久化数据

    • 数据卷可以将数据从容器内部持久化到宿主机上的文件系统中,这样即使容器被删除,数据仍然存在。
  2. 容器之间共享数据

    • 数据卷可以被多个容器挂载和使用,允许容器之间共享数据。比如,可以用来共享配置文件、数据库数据等。
  3. 独立于容器生命周期

    • 数据卷的生命周期独立于容器。即便容器被删除或重建,数据卷中的数据仍然保留,用户可以在新创建的容器中继续使用这些数据。
  4. 易于备份和恢复

    • 数据卷可以被备份和恢复,通常通过宿主机的文件系统进行。这使得数据的备份和恢复变得相对简单。
  5. 数据管理

    • 可以通过 Docker 命令进行数据卷的管理,包括创建、删除、列出等操作。例如,docker volume create 用于创建数据卷,docker volume rm 用于删除数据卷。
  6. 性能和安全性

    • 数据卷存储在宿主机的文件系统上,通常性能较好。与容器内的临时文件相比,数据卷也提供了更好的数据持久性和安全性。

2、数据卷的指令

1)创建数据卷:

bash 复制代码
docker volume create 名称

使用这种方式创建的数据卷可也被docker volume管理,如查看,删除等。新建的数据卷被保存在/var/lib/docker/volumes目录下。

2)查看数据卷:

bash 复制代码
docker volume ls

3)查看数据卷的详细信息:

bash 复制代码
docker volume inspect 数据卷的名称

4)删除数据卷:

bash 复制代码
docker volume rm 数据卷名称

3、数据卷的使用

3.1、数据卷挂载

1)创建数据卷

bash 复制代码
docker volume create 数据卷名称

2)将数据卷挂载到容器

bash 复制代码
docker run -it --name 定义容器名称 --mount source=数据卷名称,target=容器挂载点(也就是在容器中所存在的文件夹) ubuntu:18.04(需要启动的镜像)

当然也存在简写方式

bash 复制代码
docker run -it --name 容器名称 -v 数据卷名称:容器对应的文件夹 镜像名称

验证是否挂载成功

切换到宿主机中,查看数据卷中文件是否存在

3.2、直接挂载宿主机文件

1)在宿主机随别创建一个文件

2)运行一个容器将它和宿主机创建的文件相互绑定

如果是创建只读的数据卷的话,在指令的test_vol后面加上:ro

如果是创建只读的数据卷的话,在指令的test_vol后面加上:ro

如果是创建只读的数据卷的话,在指令的test_vol后面加上:ro

3.3、数据卷容器

1)创建一个数据卷容器

2)创建一个容器挂载数据卷容器

3.4、数据卷容器的备份与恢复

3.4.1)数据卷容器备份

然后在宿主机中查看是否存在/bak文件夹

这样说明备份成功!

3.4.2)数据卷容器恢复

进入haunyuan1容器查看数据是否恢复

4、什么是Dockerfile

Dockerfile 是一种用于定义 Docker 镜像的文本文件。它包含了一系列的指令,用于自动化构建 Docker 镜像的过程。这些指令可以包括:

  • 基础镜像的指定(如 FROM ubuntu:20.04
  • 安装软件包(如 RUN apt-get update && apt-get install -y nginx
  • 复制文件(如 COPY . /app
  • 设置环境变量(如 ENV PATH /app/bin:$PATH
  • 运行命令(如 CMD ["nginx", "-g", "daemon off;"]

通过 Dockerfile,可以将应用程序及其所有依赖项打包成一个可移植的镜像,这样就可以在不同的环境中一致地运行这些应用程序。

5、Dockerfile基本指令

在 Dockerfile 中,常用的基本指令包括:

  1. FROM

    指定基础镜像。例如:

    复制代码
    FROM ubuntu:20.04
  2. RUN

    在镜像构建过程中执行命令,通常用于安装软件包。

    复制代码
    RUN apt-get update && apt-get install -y nginx
  3. COPY

    将文件或目录从宿主机复制到镜像中。

    复制代码
    COPY ./src /app/src
  4. ADD

    类似于 COPY,但它还支持从 URL 下载文件以及解压 tar 文件。

    复制代码
    ADD https://example.com/file.tar.gz /app/
  5. WORKDIR

    设置工作目录,后续的命令将在该目录下执行。

    复制代码
    WORKDIR /app
  6. CMD

    指定容器启动时执行的默认命令和参数。

    复制代码
    CMD ["nginx", "-g", "daemon off;"]
  7. ENTRYPOINT

    设置容器启动时执行的命令,并且 CMD 中的参数会传递给 ENTRYPOINT。

    复制代码
    ENTRYPOINT ["python3", "app.py"]
  8. ENV

    设置环境变量。

    复制代码
    ENV APP_ENV=production
  9. EXPOSE

    指定容器在运行时监听的端口,但这不会实际发布端口。

    复制代码
    EXPOSE 80
  10. VOLUME

    创建一个挂载点,以便容器可以将数据持久化到宿主机。

    复制代码
    VOLUME ["/data"]
  11. USER

    指定运行容器时使用的用户。

    复制代码
    USER appuser
  12. ARG

    定义在构建时可以传递的变量。

    复制代码
    ARG VERSION=1.0

这些指令可以组合使用来创建一个自定义的 Docker 镜像。

6、Dockerfile示例

前提:

想要构建基本镜像,必须要有Dockerfile文件,而且文件没有拓展名!!!

想要构建基本镜像,必须要有Dockerfile文件,而且文件没有拓展名!!!

想要构建基本镜像,必须要有Dockerfile文件,而且文件没有拓展名!!!

1)准备好所有的文件创建jdk镜像

2)Dockerfile文件内容如下

复制代码
#1、指定基本镜像
FROM ubuntu:18.04
#2、指明该镜像的作者和其他电子邮件
MAINTAINER ZY "ZY@QQ.COM"
#3、指定镜像的工作目录
WORKDIR /test/zy
#4、将jdk复制到镜像中
ADD jdk-8u151-linux-x64.tar.gz /test/zy
#5、配置环境变量
ENV JAVA_HOME=/test/zy/jdk1.8.0_151
ENV PATH=${JAVA_HOME}/bin:$PATH
#6、容器启动时运行的命令
#CMD ["java","-version"]

3)执行Dockerfile文件进行构建镜像

4)查看镜像

完结了!!!!!!!!!!!!!!!!!!!!!!!!!!

相关推荐
YC运维7 分钟前
OSPF实验以及核心原理全解
运维·网络·网络协议·智能路由器
❀͜͡傀儡师8 分钟前
docker 安装数据集成平台 Apache SeaTunnel 服务
docker·容器
超级小忍36 分钟前
Spring Boot 与 Docker 的完美结合:容器化你的应用
spring boot·后端·docker
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna3 小时前
Docker学习
学习·docker·容器
缘友一世3 小时前
网安系列【15】之Docker未授权访问漏洞
docker·容器
AmosTian9 小时前
【系统与工具】Linux——Linux简介、安装、简单使用
linux·运维·服务器
YC运维10 小时前
RIP实验以及核心原理
运维·网络·智能路由器
慕木兮人可10 小时前
Docker部署MySQL镜像
spring boot·后端·mysql·docker·ecs服务器