赞
踩
Dockerfile文件是Docker容器的描述文件,当中包含一行行命令,用来指导构建容器的顺序。
关键字 | 解释 |
---|---|
FROM | # 基础镜像,当前新镜像是基于哪个镜像的 |
MAINTAINER | # 镜像维护者的姓名混合邮箱地址 |
RUN | # 容器构建时需要运行的命令 |
EXPOSE | # 当前容器对外保留出的端口 |
WORKDIR | # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点 |
ENV | # 用来在构建镜像过程中设置环境变量 |
ARG | 构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。 |
ADD | # 将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar |
COPY | # 类似ADD,拷贝文件和目录到镜像中! |
VOLUME | # 容器数据卷,用于数据保存和持久化工作 |
CMD | # 指定一个容器启动时要运行的命令,dockerFile 中可以有多个 CMD 指令,但只有最后一个生效! |
ENTRYPOINT | # 指定一个容器启动时要运行的命令!和CMD一样 |
ONBUILD | # 当构建一个被继承的 DockerFile 时运行命令,父镜像在被子镜像继承后,父镜像的 ONBUILD 被触发 |
USER | 用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。格式:USER <用户名>[:<用户组>] |
HEALTHCHECK | 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。 |
Dockerfile 的指令每执行一次都会在 docker 上新建一层,能合并的尽量合并,如:
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
# 以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
RUN <命令行命令>
# <命令行命令> 相当于在终端操作的 shell 命令。
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 相当于 RUN ./test.php dev offline
vim run.sh
#!/bin/bash
/usr/local/apache2/bin/httpd -D FOREGROUND
#新生成的镜像是基于sshd:dockerfile镜像 FROM centos:latest MAINTAINER eden #安装wget RUN yum install -y wget WORKDIR /usr/local/src #下载并解压源码包 RUN wget http://archive.apache.org/dist/httpd/httpd-2.4.41.tar.gz RUN tar -zxvf httpd-2.4.41.tar.gz WORKDIR httpd-2.4.41 #编译安装apache RUN yum -y install epel-release.noarch && yum makecache #fast RUN yum install -y gcc make apr-devel apr apr-util apr-util-devel pcre-devel RUN ./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-so RUN make RUN make install #修改apache配置文件 RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /usr/local/apache2/conf/httpd.conf #启动apache服务 RUN /usr/local/apache2/bin/httpd #复制服务启动脚本并设置权限 ADD run.sh /usr/local/sbin/run.sh RUN chmod 755 /usr/local/sbin/run.sh #开放80端口 EXPOSE 80 CMD ["/usr/local/sbin/run.sh"]
docker build -t centos:test .
# 启动一个容器
docker run -p 80:80 -d centos:test
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。