docker镜像

本文介绍了Docker镜像的分层结构,强调了共享资源和Copy-on-Write机制。同时,详细阐述了如何搭建Docker镜像,包括使用基础命令、创建Dockerfile及理解各种指令如FROM, COPY, ADD, ENV, EXPOSE, VOLUME, WORKDIR, RUN, CMD和ENTRYPOINT。特别指出,官方推荐使用exec格式的ENTRYPOINT指令。" 119468168,10755357,Django框架详解:安装、搭建与核心概念,"['Django', 'Python', '后端开发']
摘要由CSDN通过智能技术生成

.docker镜像

(1)镜像的分层结构

在这里插入图片描述

  • 共享宿主机的kernel
  • base镜像提供的是最小的Linux发行版
  • 同一docker主机支持运行多种Linux发行版
  • 采用分层结构的最大好处是:共享资源
  • Copy-on-Write 可写容器层 • 容器层以下所有镜像层都是只读的
  • docker从上往下依次查找文件
  • 容器层保存镜像变化的部分,并不 会对镜像本身进行任何修改
  • 一个镜像最多127层

在这里插入图片描述


(2) 镜像的搭建

docker基础命令

docker search + 镜像名称   查询镜像
docker pull + 镜像名称     拉取镜像
docker images             查询镜像的大小
docker history + 镜像名称  查看镜像历史执行进程
docker inspect + 镜像名称  查看镜像详情
docker run -it -- rm --name vm1 镜像名称    创建并进入镜像容器 
-i    交互式
-t    获取终端
--rm  不保存
Ctrl + d 退出  ----> 容器关闭
Ctrl + p+ q   -----> 后台运行
docker start vm1    启动关闭的容器
docker attach vm1   再次连接到该容器
docker ps -a        查询运行的容器 
-a    包含退出的容器
docker rm vm1    删除已经关闭的容器   -f 强制删除正在运行的容器
docker commit -m 指令名称 容器名称   提交容器中要保存的内容   ----> 把内容保存到镜像层

在这里插入图片描述
在这里插入图片描述


  • 安装bridge工具包
    功能: 查看桥接
yum install -y bridge-utils
brctl show

在这里插入图片描述
在这里插入图片描述


镜像构建

  • 创建一个Dockerfile
    在这里插入图片描述
  • 构建镜像
docker build -t nginx:v1 .
-t    指定镜像名称
docker run -d --name web1 -p 80:80 nginx:v1    封装容器
docker rmi nginx:v1    删除封装的容器
-d    打入后台运行
-p    端口映射
docker exec web1 ls /data    在web1容器里执行"ls"命令查看/data/目录
exec    指定在容器内执行某个命令
  • 查看镜像分层结构
docker history nginx:v1

在这里插入图片描述

Dockerfile

dockerfile常用指令

• FROM
指定base镜像,如果本地不存在会从远程仓库下载。

• MAINTAINER
设置镜像的作者,比如用户邮箱等。

• COPY
把文件从build context复制到镜像 支持两种形式:COPY src dest 和 COPY [“src”, “dest”] src必须指定build context中的文件或目录

• ADD
用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到 dest,也可以自动下载URL并拷贝到镜像: ADD html.tar /var/www ADD http://ip/html.tar /var/www

• ENV
设置环境变量,变量可以被后续的指令使用: ENV HOSTNAME sevrer1.example.com

• EXPOSE
如果容器中运行应用服务,可以把服务端口暴露出去: EXPOSE 80

• VOLUME
申明数据卷,通常指定的是应用的数据挂在点: VOLUME [“/var/www/html”]
• WORKDIR
为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当 前工作目录,如果目录不存在会自动创建。

• RUN
在容器中运行命令并创建新的镜像层,常用于安装软件包: RUN yum install -y vim

• CMD
与 ENTRYPOINT 这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker run后面的命令行覆盖,而ENTRYPOINT不会被忽略,一定会被执行。 docker run后面的参数可以传递给ENTRYPOINT指令当作参数。 Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最 后一个有效。

  • Shell和exec格式的区别
    cat Dockerfile FROM busybox ENV name world ENTRYPOINT echo “hello, $name” Shell格式底层会调用/bin/sh -c来执行命令,可以解析变量,而下 面的exec格式不会:
    /# cat Dockerfile FROM busybox ENV name world ENTRYPOINT [“/bin/echo”, “hello, $name”]
    需要改写成以下形式: # cat Dockerfile FROM busybox ENV name world ENTRYPOINT [“/bin/sh”, “-c”, “echo hello, $name”] Exec格式时,ENTRYPOINT可以通过CMD提供额外参数,CMD 的额外参数可以在容器启动时动态替换。在shell格式时 ENTRYPOINT会忽略任何CMD或docker run提供的参数。
    / # cat Dockerfile FROM busybox ENTRYPOINT [“/bin/echo”, “hello”] CMD [“world”]

看下在运行容器时的区别: # docker run --rm busybox:v1 hello world
/# docker run --rm busybox:v1 linux hello linux
【官方推荐使用exec格式书写】


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值