Docker容器数据卷和DockerFile
Docker 容器数据卷
一、容器数据卷
docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷。
容器数据卷的作用:
1.容器的持久化
2.容器间继承、共享数据
3.容器与宿主机之间的数据共享
。
二、 容器数据卷添加
- 直接命令添加
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 指定端口
使用Navicat链接
创建测试数据库
在本地查询 ,数据库已经创建成功
DockerFile
DockerFile指令
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 命令得知这个路径后,会将路径下的所有内容打包。