一、DockerFile
Dockerfile用来构建一个镜像,通过分层的方式一层一层的叠加
DockerFile命令解析:
Dockerfile指令 |
指令介绍 |
FROM |
Dockerfile除了注释第一行必须是FROM,FROM后面跟镜像名称,代表我们要基于哪个基础镜像构建我们的容器 |
RUN |
RUN后面跟一个具体的命令,类似于Linux命令执行命令 |
ADD |
拷贝本机文件或者远程文件到镜像内 |
COPY |
拷贝本机文件到镜像内 |
USER |
指定容器启动的用户 |
ENTRYPOINT |
容器的启动命令 |
CMD |
CMD为ENTRYPOINT指令提供默认参数,也可以单独使用CMD指定容器启动参数 |
ENV |
指定容器运行时的环境变量,格式为key=value |
ARG |
定义外部变量,构建镜像时可以使用build-arg<varname>=<value>的格式传递参数用于构建 |
EXPOSE |
指定容器监听的端口,格式为[port]/tcp或者[port]/udp |
WORKDIR |
为Dockerfile中跟在其后的所有RUN、CMD、ENTRYPOINT、COPY和ADD命令设置工作目录 |
备注:
(1)CMD和ENTRYPOINT的区别
在docker run [contain_id]后面添加命令的时候CMD是替换,ENTRYPOINT是追加,运行的时候不追加命令它们两个没什么区别
(2)DockerFile示例:发布springboot项目
1)打包成一个jar包
2)把jar包放到dockerfile放到某个同级目录下
3)运行build命令。命令:docker build -f [dockerfile path] -t [image name] . 。例子:
docker build -t test:1.0 .
二、Docker容器数据卷
2-1、容器数据卷是什么
docker容器在产生数据的时候,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除之后,数据自然而然的也会消失。为了能保存数据,容器中引用了数据卷的概念。
2-2、容器数据卷的作用以及特点
(1)作用:
卷就是目录或者文件,存在一个或者多个容器之中,由docker挂载到容器,但是不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或者共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会再容器删除时删除其挂载的数据卷。
(2)特点:
1)数据卷可在容器之间共享或者重用数据。
2)卷中的更改可以直接生效。
3)数据卷中的更改不会包含在镜像的更新中。
4)数据卷的生命周期一直持续到没有容器使用它为止。
2-3、使用数据卷
使用数据卷命令-v :
1)指定路径挂载
-v /宿主机路径:容器内路径
2)匿名挂载
-v 容器内路径
3)具名挂载
-v 卷名:容器内路径
2-3-1、指定路径挂载
docker run -it -v 主机目录:容器目录 /bin/bash
2-3-2、匿名挂载
我们首先使用匿名挂载的命令启动一个容器。
docker run -d -P --name=nginxt01 -v /etc/nginx nginx
2-3-3、具名挂载
具名挂载就很简单了,跟我们之前演示的指定路径挂载很相似。
同样,我们使用具名挂载的方式启动一个容器。
docker run -d -P --name=nginxt02 -v jumingguazai:/etc/nginx nginx
备注:
(1)查看所有卷的情况
docker volum ls
(2)找到挂载点
docker inspect ID | less