Docker容器数据卷和DockerFile

Docker 容器数据卷

一、容器数据卷

docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷。

容器数据卷的作用:
1.容器的持久化 2.容器间继承、共享数据 3.容器与宿主机之间的数据共享

二、 容器数据卷添加
  1. 直接命令添加
docker run -it -v /宿主机绝对路径:/容器内目录:权限 镜像名

权限: ro (容器只能查看)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3q4kIoo-1624852002822)(images/image-20210616162321514.png)]

使用docker启动一个mysql,并配置链接密码

docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

-e Docker启动时配置的环境

-v 数据卷挂载

-d 后台运行

-p 指定端口

docker desktop 数据卷 一直转圈_数据

使用Navicat链接

docker desktop 数据卷 一直转圈_docker_02

创建测试数据库

docker desktop 数据卷 一直转圈_centos_03

在本地查询 ,数据库已经创建成功

docker desktop 数据卷 一直转圈_centos_04

DockerFile

DockerFile指令

docker desktop 数据卷 一直转圈_centos_05

FROM

功能为指定基础镜像,并且必须是第一条指令。

如果不以任何镜像为基础,那么写法为:FROM scratch。

语法:

FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>

三种写法,其中和 是可选项,如果没有选择,那么默认值为latest

RUN

功能为运行指定的命令

RUN命令有两种格式

1. RUN <command>
2. RUN ["executable", "param1", "param2"]

第一种后边直接跟shell命令

  • 在linux操作系统上默认 /bin/sh -c
  • 在windows操作系统上默认 cmd /S /C

第二种是类似于函数调用。

可将executable理解成为可执行文件,后面就是两个参数。

注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.

多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。

CMD

容器启动时要运行的命令

ENTRYPOINT

跟cmd功能类似,但是可以在运行命令时在后面追加命令。

MAINTAINER

指定作者

语法:

MAINTAINER <name>
EXPOSE

功能为暴漏容器运行时的监听端口给外部

ENV

功能为设置环境变量

VOLUME

可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种

语法:VOLUME ["/data"]

一般的使用场景为需要持久化存储数据时

容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。

所以当数据需要持久化时用这个命令。

WORKDIR

语法:

WORKDIR /path/to/workdir

设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。

ONBUILD

语法:s个命令只对当前镜像的子镜像生效。

比如当前镜像为A,在Dockerfile种添加:

ONBUILD RUN ls -al

这个 ls -al 命令不会在A镜像构建或启动的时候执行

构建自己的centos
1、创建dockerfile文件

在/root目录下新建mydockerfile文件夹,在里面创建mydockerfile-centos文件,写入以下内容:

FROM centos

MAINTAINER codehamal<haiming_dong@126.com>

ENV MYPATH /usr/local

WORKDIR $MYPATH

RUN yum -y install net-tools

RUN yum -y install vim

EXPOSE 80

CMD echo $MYPATH

CMD echo "-----end----"

CMD /bin/bash
使用build 生成自己的centos镜像
# 文件名如果命名为Dockerfile,可以不用跟-f,docker 构建会自动寻找Dockerfile这个文件
docker build -f mydockerfile-centos -t mycentos .

-f 指定构建镜像的文件

-t 指定构建镜像的版本名称

. 上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。