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

vim nginx.conf

创建自定义镜像

到宿主机的挂载目录里编辑内容并查看
