Docker最全教程--从理论到实战(二)

Docker镜像详解

  • 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件
  • 加载原理
    • UnionFS联合文件系统:由一层一层的文件系统组成
    • 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层
  • 提交镜像
使用docker commit 命令提交容器成为一个新的版本

docker commit -m=“提交的描述信息”  -a="作者" 容器id 目标镜像名:[TAG]
docker commit -m="decribe" -a="mingxin" ID mingxin02:1.0
  • 如果想要获得当前容器的状态,可以通过commit提交,获得一个镜像,类似快照思想

容器数据卷

  • 需求:容器中数据的持久化,即数据可以存储在本地
  • 实现:目录的挂载,容器内的目录挂载到linux上
  • 使用
docker run -it -v 主机目录:容器目录    将容器目录中的内容与主机目录双向绑定

docker inspect 容器id   查看容器对应元数据,可以在Mounts节点查看建立的数据卷信息
  • 常用命令
docker volume create 卷名       创建数据卷
docker volume ls                查看所有的数据卷
docker volume inspect 卷名      查看指定数据卷的信息
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
docker volume rm 卷名               删除数据卷
docker rm -v ...                    删除容器之时删除相关的卷
docker volume prune                 清理无主的数据卷
  • 具名挂载
    • -v 卷名:容器内路径
    • 指定文件夹名称,区别于指定路径挂载
"Mountpoint": "/var/lib/docker/volumes/文件名/_data",
  • 匿名挂载
    • -v 容器内路径
    • 在指定数据卷的时候,不指定容器路径对应的主机路径
    • 映射的主机路径就是默认的路径/var/lib/docker/volumes/中自动生成一个随机命名的文件夹

Docker所有的数据卷默认在/var/lib/docker/volumes/ 目录下

-v /宿主机路径:容器内路径 #指定路径挂载

指定数据卷映射的相关参数:

ro —— readonly 只读。设置了只读则只能操作宿主机的路径,不能操作容器中的对应路径。

rw ----- readwrite 可读可写

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx

  • Dockerfile中设置数据卷
    • 在Dockerfile文件中使用VOLUME指令来给镜像添加一个或多个数据卷
VOLUME ["volume01","volume02"]     //匿名挂载了volume01和volume02两个目录
    • 构建镜像
docker build -f PATH/Dockerfile -t 镜像名 .
    • 构建完成后,可以进入容器,通过 ls 命令可以看到自动挂载的数据卷目录

Dockerfile

    • Dockerfile就是用来构建docker镜像的构建文件,实际上是命令脚本
    • 构建步骤
      • 编写一个dockerfile文件
      • docker build 构建成为一个镜像
      • docker run 镜像
      • docker push 镜像(发布镜像到DockerHub、阿里云镜像仓库)
    • 基础知识
      • 每个保留关键字都必须是大写字母
      • 从上到下顺序执行
      • #表示注释
      • 每一个指令都会创建提交一个新的镜像层
    • Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
指令	说明
FROM	指定基础镜像
ARG         用于指定传递给构建运行时的变量
MAINTAINER	镜像是谁写的,姓名+邮箱
RUN	镜像构建的时候需要运行的命令
ADD	将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR	镜像的工作目录
VOLUME	挂载的目录
EXPOSE	指定与外界交互的端口
CMD	指定这个容器启动的时候要运行的命令
EMTRYPOINT	指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD	当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY	功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV	构建的时候设置环境变量
LABEL       为镜像添加元数据

RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令

ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值