Docker小结(二)dockerfile
一、Dockerfile解析
Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。其包含的参数有FROM、cmd、RUN、MAINTAINER、CMD、ENTRYPOINT、USER、EXPOSE、ENV、ADD、VOLUME、WORKDIR、ONBUILD等相关命令。我们先以一个dockerfile为例具体理解下:
1# cat Dockerfile
2FROM centos:centos7.1.1503
3MAINTAINER yangbk
4ENV TZ "Asia/Shanghai"
5ENV TERM xterm
6ADD base.repo /etc/yum.repos.d/CentOS-Base.repo
7ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo
8RUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
9 yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
10 yum install -y --enablerepo=epel pwgen python-pip && \
11 yum clean all
12RUN pip install supervisor
13ADD supervisord.conf /etc/supervisord.conf
14RUN mkdir -p /etc/supervisor.conf.d && \
15 mkdir -p /var/log/supervisor
16EXPOSE 22
17ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
FROM 指定了base image,默认其从https://hub.docker.com 拿基础镜像(pull 到本地,下次再使用该images时,本地如果存在,不再从远程pull ),也可以指定一个国内的源,比如:FROM hub.c.163.com/public/centos:7.2.1511
。不过也可以通过配置本地registry ,通过从本地源来拿 base image;
- MAINTAINER 指定了创建者的作者信息等;
- ENV 用于设定环境变量;
- ADD命令作用和copy命令类似,不过其比copy命令多了两项功能。
- 其除了像copy一样只能指定本地源文件,还可以指定源文件是一个url;
- 如果指定的源文件是一个压缩包,add命令人自动在目标路径下解压,而copy命令则需要手动进行解压。
示例如下:
1COPY resources/jdk-7u79-linux-x64.tar.gz /tmp/
2RUN tar -zxvf /tmp/jdk-7u79-linux-x64.tar.gz -C /usr/local
3RUN rm /tmp/jdk-7u79-linux-x64.tar.gz
4# 上面运行的内容和下面直接这条add等价
5ADD resources/jdk-7u79-linux-x64.tar.gz /usr/local/
EXPOSE 用于配置端口映射,比如将宿主机的33301端口映射到容器的22端口,可以执行如下命令:
1docker run -d -p 127.0.0.1:33301:22 centos6-ssh
ENTRYPOINT container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条。最后这台测试,有的时候会不通过,可以将ENTRYPOINT更换为CMD运行。
二、apache docker
1、Dockerfile文件
1FROM hub.c.163.com/public/centos:7.2.1511
2MAINTAINER yangbk
3ENV TZ "Asia/Shanghai"
4ENV TERM xterm
5ENV http_proxy 10.212.186.250:3128
6RUN rm -rf /etc/yum.repos.d/*
7ADD base.repo /etc/yum.repos.d/CentOS-Base.repo
8RUN yum install -y httpd && \
9 yum clean all
10ADD html.tar /var/www/html
11EXPOSE 80
12CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
由于这里只有一个程序运行,所以这里选择直接使用CMD命令运行了,如果有多个程序,并且程序需要守护,可以考虑使用supervisord 。
2、编译Dockerfile成image
1docker build -t apache:2.4 .
上面这个写法是个简写,一般我们也使用该方法创建image镜像,全写是:docker build -t registry_url/namespace/361way/centos:7.1 ./path ,其中centos后面的版本号不写的话,默认会使用laster 。
3、运行docker
使用刚刚build的images,做为容器运行,并映射相应的端口,如下:
1docker run -d -p 8080:80 --name web apache:2.4
这里给刚刚运行的容器取名为web,并将本机的8080映射容器的80端口。如下:
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/dockerfile/5454.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.