Docker 镜像管理

57 篇文章 3 订阅
9 篇文章 0 订阅

一、镜像的特性

容器创建时需要指定镜像,每个镜像都由唯一的标示Image ID,和容器的Container ID一样,默认128位,可以使用前16为缩略形式,也可以使用镜像名与版本号两部分组合唯一标示,如果省略版本号,默认使用最新版本标签( latest )

二、镜像的分层

docker 的镜像通过联合文件系统(union filesystem)将各层文件系统叠加在一起;

①、基础镜像层

②、镜像层

③、容器层

三、linux文件系统的组成

linux文件系统由两部分组成:bootfs和rootfs两部分组成

①、bootfs:包含bootloader(引导加载程序)和kernel(内核)

②、rootfs:root文件系统包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件(不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等)

四、Docker镜像原理

        Docker镜像是利用统一文件系统(union sysytem)技术把做个文件系统叠加而成,最底端是bootfs,并共享的是宿主机的bootfs,第二层是root文件系统rootfs,称为base image,然后再往上可以叠加其他的镜像文件。一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。

五、镜像的制作

1、dockerfile定义

要获得镜像,可以从Docker仓库中进行下载,如果想自己开发一个镜像,那就要使用Dockerfile。

dockerfile定义:

Dockerfifile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfifile文件并根据Dockerfifile文件的描述来构建镜像。

2、overlay结构

merged视图层对应docker-client端所给用户展示的可视层
worker 工作层对应docker-server端实际运行容器的运行时环境
upper 上层目录对应容器层
lower下层对应images镜像层
rootfs基础镜像对应
base image
 

3、关键字:

关键字作用备注
FROM指定父镜像指定dockerfile基于哪个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
RUN执行命令在所基于的镜像上执行命令,并提交到新的镜像中
CMD要运行的程序指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
ADD添加文件将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL,如果是压缩文件会自动给解压缩
ENV环境变量指定build时候的环境变量
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定  格式 VOLUME ["目录"]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候用户 
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器指定所生成的镜像作为一个基础镜像时所要运行的命令

4、构建镜像命令

docker build -t nginx:test .        -------》 docker build -t 镜像名:标签 .

-t :tag指打标签

-f :指定dockerfile目录

.︰指构建镜像时使用的环境(当前)目录,构建镜像时使用的上下文环境

5、CMD与ENTRYPOINT命令的区别

exec模式:例如["tail","-f","/var/log/message" ]        直接是指令开头

shell模式:例如["sh","-c","top"]                  以环境开头,以开头的环境执行后面的指令

例如:

如果entrypoint 使用了shell模式,CMD指令会被忽略

如果entrypoint使用了exec模式。CMD指定的内容将会被追加为entryrpoint指定的命令参数。

区别:和docker run 命令后面的命令行参数关系

①、CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换

②、ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)

6、制作源码包方式的nginx镜像

1、下载一个创建nginx镜像的基础镜像

docker pull centos:7

2、创建工作目录

### /data_dockerfile  为根下的一个目录,自行创建
[root@zwb_docker ~]# cd /data_dockerfile/ 


### 创建nginx_dockerfile文件
[root@zwb_docker data_dockerfile]# vim nginx_dokerfile

## 基于的基础镜像
FROM centos:7

## 用户信息(选填项)
MAINTAINER this is myfirst    

## 添加环境包

RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx

## 传入压缩文件
ADD nginx-1.15.9.tar.gz /user/local/src
volume ["/usr/local/nginx/html"]

##指定当前的工作目录
WORKDIR /user/local/src/nginx-1.15.9
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH

## 申明端口
EXPOSE 80
RUN echo "daemon off">>/usr/local/nginx/nginx[.conf
CMD nginx

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值