美文网首页
dockerfile自动构建镜像

dockerfile自动构建镜像

作者: 口口帅日日 | 来源:发表于2020-04-17 22:36 被阅读0次

    首先手动制作一个镜像,然后写入到dockfile,启动一个镜像之后,最后测试

    docker build -t centos6.9_nginx:v1 --network=host /opt/dockerfile/nginx/ #构建镜像 #--network=host 使用宿主机网络

    docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash #创建容器测试

    FROM 这个镜像的妈妈是谁?(指定基础镜像)
    MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
    LABLE 描述,标签
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(会自动解压tar) 制作docker基础的系统镜像
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
    dockerfile其他指令:
    COPY 复制文件(不会解压)rootfs.tar.gz
    ENV 环境变量(密码,其他信息)
    ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

    docker build -t centos6.9_nginx:v2 .
    FROM centos:6.9
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN yum install nginx -y
    ADD kod /usr/share/nginx/html #添加代码到那个目录
    WORDOR /usr/share/nginx/html #进入容器后的工作目录
    VOLUME /usr/share/nginx/html #docker所有的工作目录

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

    FROM centos:7
    ENV version 7.4p1
    RUN curl -o
    RUN yum install openssh-$version -y
    
    RUN /usr/sbin/sshd-keygen
    
    CMD ["/usr/sbin/sshd","-D"]
    

    多阶段构建

    第一阶段: tomcat jdk需要maven编译-->ROOT.war
    第二阶段: cp ROOT.war /app/tomcat/webapps/ROOT.war
    可以先制作一个经过编译过的镜像,然后再将代码cp到新容器里
    借用参数 COPY --from=builder

    如果想拿到第一个容器的构建结果,那就在第一次构建中添加别名
    FROM golang:1.7.3 AS builder #builder为别名
    WORKDIR /go/src/github.com/alexellis/href-counter/
    RUN go get -d -v golang.org/x/net/html
    COPY app.go .
    RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

    FROM alpine:latest
    RUN apk --no-cache add ca-certificates
    WORKDIR /root/
    COPY --from=builder /go/src/github.com/alexellis/href-counter/app . #拉去第一次构建的镜像
    CMD ["./app"]

    测试过程中,entrypoint 先使用cmd代替,调试没问题,再使用entrypoint
    FROM centos6.9:v1

    RUN yum install php-fpm php-gd -php-mbstring unzip -y
    ADD www.conf /etc/php-fpm.d/conf
    ADD default.conf /etc/nginx/conf.d/default.conf
    
    RUN mkdir /html
    WORKDIR /html
    RUN curl -o kod.zip http://$ip/kodexplorer4.4.zip
    RUN unzip kod.zip
    RUN chown -R nginx:nginx
    
    ADD init.sh /init.sh
    EXPOSE 80
    VOLUME /html
    ENTRUPOIN ["/bin/bash","/init.sh"]
    
        [root@master test]# cat init.sh 
    #!/bin/bash
    /usr/sbin/php-fpm --daemonize
    nginx -g 'daemon off;'
    

    镜像是分层构建的,构成完成之后,每层都是只读的。分层复用
    底层+nginx_parent.id+php-fpm_parent.id

    构建镜像的过程中,前面尽量一致,以免造成重新下载软件包等新动作,把变化的写在最后

    优化

    1.尽可能选择体积小的,alpine
    2.尽可能合并RUN指令,清理无用的文件(yum缓存,源码包)  yum clean all
    3.修改dockerfile,把变化的内容尽可能放在dockerfile结尾
    4.使用.dockerignore,减少不必要的文件ADD ./html
    

    ENTRYPOION = --env

    相关文章

      网友评论

          本文标题:dockerfile自动构建镜像

          本文链接:https://www.haomeiwen.com/subject/vviayhtx.html