3、docker的数据卷和dockerfile
dockerfile--------------------自定义镜像
docker的数据卷:
容器与宿主机之间,或者容器和容器之间的数据共享(目录)。
创建容器的时间,通过指定目录,实现容器于宿主机之间,或者容器和容器之间的数据共享。
容器的生命周期是有限的,容器一旦销毁,内部的数据也会一并消失,所以我们创建了数据卷的方式,将容器内的数据持久化保存到宿主机。
如何实现内部和宿主机之间的挂载:
-v:volume,挂载卷,数据卷
-v /opt/test1:/opt/test1:ro
宿主机的目录 容器的目录 数据卷的默认权限是rw,ro:只读模式
已宿主机的目录为准。容器的生命周期是有限的,保存到宿主机的数据可以在下一次创建容器时继续使用。
ro:只读模式
数据卷容器:
容器和容器之间的共享数据:
-v指定目录,如果没有:这个目录就是容器内的数据目录,不会和宿主机挂载
--volumes-from: 另外一个容器,使用其他容器提供的数据目录。这个目录仅限于容器内数据共享,一旦容器销毁,内部的数据目录也会一并销毁。
创建容器的时候,一定要做宿主机和容器之间的端口映射(容器对外提供访问),一定要对容器做资源限制,一定要做数据卷
dockerfile:
自定义镜像*
基于dockerfile创建,
联合文件系统,UnionFs 是创建docker镜像的基础,镜像可以通过分层来进行集成,基于基础的镜像可以制作各种应用的镜像。
特点:一次性加载多个文件系统,但是创建好容器之后,对于用户来说只有一个文件系统。
docker镜像的定制化操作实际上就是定制每一层所要添加的配置和文件等等。
把所有的需要的操作写入一个脚本当中,然后一键运行,就是dockerfile
dockerfile作为一个脚本,由四部分组成:
1、基础镜像:程序的运行环境
2、维护者信息(可选项,相当于注释)可以不写
3、镜像的操作命令(自定义应用)
4、容器启动时的命令(容器没有可执行的命令,就会退出,stop状态,必须要给容器一个可执行的持久化的命令。)
dockerfile的命令格式:
FROM:指定程序的基础镜像
MAINTANER:维护者信息(可以忽略)LABEL
镜像的操作命令:
RUN:在基础镜像上运行命令,结果会提交到新镜像。每执行一次run就相当于是镜像的一层
run的命令越多,镜像的分层就越多,镜像越大。
ADD:将宿主机的文件复制到镜像的内部,可以URL和解压
COPY:仅限于复制,将宿主机的文件复制到镜像内部,只能是宿主机的本地文件,不支持下载。
ENV:指定镜像内的容器运行之后的环境变量
WORKDIR:容器的工作目录,也是进入容器之后的默认目录 /opt/test1
USER:指定容器运行时的用户名或者uid
VOLUME:创建容器内的挂载点,可以被外部使用,即可以和宿主机挂载,也可以和容器使用
EXPOSE:声明容器对外的网络端口
ARG:用来传递变量,把宿主机的参数传递到容器内部的参数
容器启动的命令:
CMD:指定容器运行时的默认命令
ENTRYPOINT:指定容器运行时的默认命令
cmd和entrypoint是有区别的*
1、cmd可以给entrypoint传参,entrypoint会覆盖cmd的命令
2、当创建容器时,外部定义了参数,如果是cmd,会被外部的传参覆盖,只会执行外部传参的命令,但是entrypoint的命令是不会被外部传参的命令覆盖的。
3、如果有多个cmd和entrypoint只会执行最后一个。
docker build -t centos:test1 .
开启镜像的制作
-t:创建完成之后给镜像指定的名称和标签
.: 直接从当前目录的dockerfile文件创建镜像
cmd 传参,覆盖原本命令
entrypoint 传参,命令不会被覆盖
run命令在一个dockerfile当中不能太多,每执行一次run就相当于是镜像的一层
run的命令越多,镜像的分层就越多,镜像越大。
RUN apt -y insatll nginx
RUN apt -y install httpd
RUN apt -y install nginx && apt -y install httpd
&&: 在run命令中,表示连接多个命令,确保前一个命令执行成功,才会运行第二个命令。
; : apt -y insatll nginx ; apt -y install.httpd
不管前面的命令是否成功,都会执行后面的命令
|| : 或者(只有前面的失败了,后面的命令才会执行)
add和copy的区别
1、add和copy在复制文件时,表现的是一致的。复制本地文件。
找和dockerfile在一个目录下的文件。自动复制到指定路径。
自定义镜像
创建容器
2、解压和下载---------------------add
解压
下载
ADD的优点,没有格式的限制-------------->解压, .gz .bz2 直接跟上路径,自动解压到目标路径
add缺点:在不解压的前提下,无法复制tar的压缩文件。
只是复制,使用copy,如果是压缩再使用add。
如何看工作目录,环境变量和容器卷
定制化的创建一个nginx的基于源码包的镜像
nginx配置文件