一、build一个nginx
#mkdir mydocker #cd mydocker
#vi DockerfileFROM 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
原文:https://www.cnblogs.com/zjz20/p/12612109.html