首页 > 其他 > 详细

编写Dockerfile

时间:2020-04-02 12:45:44      阅读:54      评论:0      收藏:0      [点我收藏+]

一、build一个nginx

#mkdir mydocker
#cd mydocker

#vi Dockerfile
FROM daocloud.io/nginx:latest
RUN echo ‘<h1>hello, docker!</h1>‘ > /usr/share/nginx/html/index.html

构建镜像,在 Dockerfile 文件所在目录执行:

[root@localhost mydocker]# pwd
/root/mydocker
[root@localhost mydocker]# cat Dockerfile
FROM daocloud.io/nginx:latest
RUN echo ‘<h1>hello, docker!</h1>‘ > /usr/share/nginx/html/index.html

#docker build -t nginx:v1 . (注:-t是表示一个tag,自己指定)
#docker run  --name docker_nginx_v1  -itd  -p 80:80 nginx:v1  

二、build一个centos

[root@localhost Dockerfile]# pwd
/root/Dockerfile
[root@localhost Dockerfile]# cat Dockerfile 
FROM daocloud.io/centos:7
MAINTAINER "you" <your@email.here>
ENV container docker
RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs
RUN yum -y update; yum clean all; (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); rm -f /lib/systemd/system/multi-user.target.wants/*;rm -f /etc/systemd/system/*.wants/*;rm -f /lib/systemd/system/local-fs.target.wants/*; rm -f /lib/systemd/system/sockets.target.wants/*udev*; rm -f /lib/systemd/system/sockets.target.wants/*initctl*; rm -f /lib/systemd/system/basic.target.wants/*;rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

执行构建

#docker build --rm -t centos:v1 .
Successfully built b9fa69e719a8
Successfully tagged centos:v1

三、优化

1、一次RUN指令形成新的一层,尽量Shell命令都写在一行,减少镜像层。 例如:

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y 
RUN yum install -y gcc gcc-c++ make -y
RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz
RUN tar zxf php-5.6.36.tar.gz
RUN cd php-5.6.36
RUN ./configure --prefix=/usr/local/php 
RUN make -j 4 
RUN make install
EXPOSE 9000
CMD ["php-fpm"]

改为:

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y &&     yum install -y gcc gcc-c++ make

RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \
    tar zxf php-5.6.36.tar.gz &&     cd php-5.6.36 &&     ./configure --prefix=/usr/local/php &&     make -j 4 && make install
EXPOSE 9000
CMD ["php-fpm"]

2、一次RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减小镜像大小。

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y &&     yum install -y gcc gcc-c++ make gd-devel libxml2-devel     libcurl-devel libjpeg-devel libpng-devel openssl-devel     libmcrypt-devel libxslt-devel libtidy-devel autoconf     iproute net-tools telnet wget curl &&     yum clean all &&     rm -rf /var/cache/yum/*

RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz &&     tar zxf php-5.6.36.tar.gz &&     cd php-5.6.36 &&     ./configure --prefix=/usr/local/php     make -j 4 && make install &&     cd / && rm -rf php*

注意:

1、 docker  build   -t  后面镜像的名字中不能包含大写字母!
2、 docker run –p 8080:80 –d nginx 符号错误 “-” 其实为"-"
       docker run -p 8080:80 -d nginx

3、配置文件里面可能会发生转行,注意检查

4、当前路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

参考

http://blog.ctnrs.com/post/dockerfile-skills/

https://www.runoob.com/docker/docker-dockerfile.html

编写Dockerfile

原文:https://www.cnblogs.com/zjz20/p/12612109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!