dockerfile自动构建镜像

2020-04-17  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读