栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker(2):Docker镜像

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker(2):Docker镜像

  一.docker镜像的分层结构


 

 二.docker镜像构建
方法一:步骤

运行容器

修改容器

将容器保存为新的镜像

缺点: 效率低、可重复性弱、容易出错 使用者无法对镜像进行审计,存在安全隐患
 

过程:

 docker pull busybox
   47  docker images
   48  docker run -it --name demo busybox

touch file{1..6}

   49  docker ps -a
   50  docker rm demo
   51  docker run -it --name demo busybox
   新建的文件,删掉进程后,就没了

解决办法:新建文件后,退出

docker commit  demo demo:v1
   58  docker images

   60  docker rm demo
   61  docker run -it --name demo demo:v1

此时ls依旧能看到原来的test

 方法二:Dockerfile

 cd ~
 mkdir docker

cd docker/
vim Dockerfile

FROM busybox 在谁的基础上
RUN echo "hello world"

  docker build -t demo:v1 .

此时如果Dockerfile 内容进行更改,不变的命令会使用缓存:镜像的缓存特性

 

 在文件第三行加命令

执行docker build -t demo:v1 .

 

 docker history  demo:v1

查看镜像分层结构

三:Dockerfile常用命令
注:这里的命令后边都用的上,就不特意做了

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

RUN
在容器中运行命令并创建新的镜像层,常用于安装软件包

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

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

ADD
用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自
动解压到dest,也可以自动下载URL并拷贝到镜像

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,如果指定了很多,只有最后一个有效。

 四.镜像优化- -nginx为例 1.构建镜像

实验前准备:如下图

1.导入rhel7镜像,相当于使用rhel7的内核
docker load -i /root/rhel7.tar

docker images查看是否成功

 2.编写Dokcerfile创建镜像   vim Dockerfile

FROM rhel7
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.21.1.tar.gz /mnt
WORKDIR "/mnt/nginx-1.21.1"
RUN rpmdb --rebuilddb
RUN yum install -y gcc pcre-devel zlib-devel
RUN ./configure --prefix=/usr/local/nginx
RUN yum install -y make
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

  创建交互式容器,用于测试命令

docker run -it --name demo rhel7 bash

使用rhel7镜像创建一个容器demo

docker build -t rhel7:v1 .

docker images rhel7  用于查看

 docker run -d --name demo rhel7:v1

 docker inspect demo查看容器信息,看到分配的ip和在真实主机上挂载的路径

 修改挂载路径的根目录内容,得到类似于apache的测试页面

 2.优化镜像

封装好的镜像就可以正常运行了,但是查看镜像历史及列表,会发现该镜像的空间占用较大,不符合轻量化的原则,因此需要进行优化

需要: base-debian10.tar

docker load -i base-debian10.tar

 

 mkdir cyy
cd cyy

 vim Dockerfile

FROM nginx as base
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 && 
    cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && 
    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* /opt && 
    cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && 
    cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && 
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /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-debian10

COPY --from=base /opt /

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

docker build -t rhel7:v2 .    再建立一个v2

docker images rhel7:v2/1 用于查看大小

可以看到大小变小了

 docker rm -f  demo
  213   docker run -d --name demo rhel7:v2
  214  docker ps

docker inspect rhel7:v2 

 

 

镜像常用子命令

docker + 。。。+镜像名字或id

images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建镜像
build 从Dockerfile构建镜像
tag 给镜像打标签
search 搜索镜像
pull 从仓库拉取镜像
push 上传镜像到仓库
rmi 删除镜像

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291766.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号