docker容器之镜像生成与封装

本文介绍了Docker镜像的基本概念,详细阐述了如何通过commit容器和使用Dockerfile来生成镜像,特别是探讨了Nginx镜像的封装及其优化,以实现更小的镜像体积。此外,还提到了镜像加速的方法。

1、什么是镜像?

docker镜像是一个特殊的文件系统,能够提供容器运行时所需的资源。如果接触过dockerfile的同学应该知道,
我们构建镜像时都会选择一个基础镜像(没接触过别担心下面会讲),这说明docker镜像是一层层进行构建的,
一个镜像往往由多层文件系统组成。

2、镜像的生成

1)、commit提交容器生成镜像

1、先运行一个容器
    docker run -d --name vm1 nginx
2、基于容器提交镜像
    docker commit vm1 nginx:v1        生成nginx:v1镜像,基于nginx,运行时需要nginx里边的东西
3、查看新生成的镜像
    docker images
4、docker history 镜像    查看镜像构建历史
5、保存镜像为.tar文件,方便迁移
    docker save -o 镜像 镜像.tar    镜像打包
6、删除镜像
    docker rmi nginx        删除镜像

2)、dockerfile生成镜像,RUN指令也是基于容器的提交,每执行一次RUN指令,commit一次

在这里插入图片描述

 nginx封装

mkdir /tmp/docker
cd /tmp/docker
    vim  dockerfile
    FROM rhel7 as build        依赖于rhel7镜像,其一个别名叫build
    COPY rhel7.3.repo  /etc/yum.repos.d/    将当前目录下的yum源拷贝到容器的/etc/yum.repos.d
    ADD nginx-1.16.0.tar.gz /mnt            将nginx压缩包解压到容器里边的/mnt
    EXPOSE 80                               开放80端口
    WORKDIR /mnt/nginx-1.16.0
    RUN rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel && sed -i 
    's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr    
    /local/nginx && make && make install     编译指令,生成一层镜像
二阶构建,可以丢掉前边的不用的东西,而且gcr.io/distroless/base小与rhel7,构建的镜像更小
    FROM gcr.io/distroless/base              
    COPY --from=build /usr/local/nginx/ /usr/local/nginx
    EXPOSE 80
    VOLUME ["/usr/local/nginx/html"]
    CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]    启动,以守护进程的方式运行

生成镜像:
    docker build -t nginx:v1 .            .代表当前目录,不可或缺
运行镜像
    docker run -d --name vm1 -p 80:80 nginx:v1

 镜像比之前小了很多

nginx封装优化,根据官方最新的nignx来优化

cd /tmp/docker

vim dockerfile    
FROM nginx:1.16.0 as base
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai        失时区
RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /usr/sbin/nginx-debug /opt && \
    #ldd /usr/sbin/httpd	查看二进制程序运行所需要的动态库
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base
COPY --from=base /opt /
EXPOSE 80 443        80,443都可以访问
ENTRYPOINT ["nginx", "-g", "daemon off;"]

构建镜像
    docker build -t nginx:v2 .
运行镜像
    docker run -d --name vm2 --p 443:443 nginx:v2

3、镜像的加速

docker pull nginx报错
    Using default tag: latest
	tee /etc/docker/daemon.json <<- 'EOF'
	{
    Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout

解决方法:
	搭建加速器(阿里云加速)
	vim /etc/docker/daemon.json
	    "registry-mirrors":["https://加速器地址"]
	systemctl daemon-reload
	systemctl systemctl restart docker

 

 

 

 

 

 

 

 

 

 

 

 

CDimage 是一款镜像制作工具,出自微软。它是微软内部“专用的”ISO 封装工具,不向外提供;所以,我们平时所看到的、使用的都是从微软内部泄露出来的~!!CDimage是系统整合不可少的利器,大大节省了光盘存放空间;我们平时见的"N合1”光盘大都是由CDimage(或内置CDimage内核的光盘工具,如Easyboot等)创建的。 但是我想网友们最关心的或许并不是以上问题,而是“CDimage到底能不能封装出SHA1值官方一致的ISO镜像?”。下面我们就来说说CDimage的用法--其实你英文好的话用help命令查看即可!以下是常用参数[2.47版]的中文说明: -l 卷标,无空格(例如:-lMYLABEL) -t 所有目录文件的时间标记,无空格,任意分隔符(例如:-t12/31/2000,15:01:00) -g 把文件时间从本地时间转换为GMT时间 -h 包含隐藏的文件目录 -n 允许长文件名(比DOS的8.3文件名长) -nt 允许长文件名,NT3.51兼容(-nt-d不能同时使用) -d 不强制转换文件名的小写字母为大写字母 -c 使用ANSI文件名,不用源OEM文件名 -b "El Torito"光盘启动文件,无空格(例如:-bc:\location\cdboot.bin) -p "El Torito"启动目录的平台ID -e 在El Torito启动目录中不要设置软盘模拟方式 -s 在镜像文件中签上数字签名(无空格,给出RPC服务器名结束点名称,像这样-sServerName:EndPointName) -x 在镜像中计算并制作"AutoCRC"值 -o 优化容量:重复的文件只制作一次 -y 试验选项,跟一个数字(例如:-y1),为试验的目的而产生ISO-9660的非标准变化: 1 在文件名后续加版本号';1'(7.5.1) 2 圆整目录大小为2K的倍数(6.8.1.3) 5 先写\i386目录,逆序 6 允许目录记录正好排到扇区结束点(符合ISO-96606.8.1.1但是突破了MSCDEX) 7 产生NT4.0下的16位应用程序时报警 -oc 更慢的重复文件探测方式:二进制比较而不是MD5哈西值 -oi 比较文件时忽略diamond压缩时间标记 -os 建立镜像时显示重复的文件(-o选项可以组合,像这样:-ocis) -k (keep)即使某些源文件打开失败也生成镜像 -m 忽略镜像文件最大681,984,000bytes的限制 -a 《分配概要》显示文件目录的大小 -q 只扫描源文件,不建立镜像文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值