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)查看镜像

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

相关推荐
高梦轩3 小时前
MySQL高可用
android·运维·数据库
wuyikeer6 小时前
docker下搭建redis集群
redis·docker·容器
hsjcjh7 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
没有梦想的咸鱼185-1037-16638 小时前
北斗高精度数据解算:破解城市峡谷/长基线/无网区难题,从毫米级定位到自动化交付——(GAMIT/GLOBK底层核心解算技术方法)
运维·arcgis·数据分析·自动化
不怕犯错,就怕不做8 小时前
linux 如何查看自己的帐号密码及samba的帐号和密码
linux·运维·服务器
实在智能RPA8 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
张3238 小时前
Linux 启动过程
linux·运维
chinesegf8 小时前
ubuntu建虚拟环境制作docker容器
linux·ubuntu·docker
李彦亮老师(本人)9 小时前
Rocky Linux 9.x 新特性详解
linux·运维·服务器·centos·rocky linux