使用Dockerfile构建nginx镜像

dockerfile的指令:

FROM:

指定基础镜像(FROM是必备的指令,并且必须为第一条指令)。

RUN:

用来执行命令行命令。其基本格式:

shell格式:

RUN <命令> ,输入在bash环境中的命令即可,一个dockerfile允许使用RUN不得超过127层,所以,使用一次RUN,
使用 ‘ \ ’ 换行,使用‘ && ’执行下一条命令。一般使用此种格式;

exec格式:

RUN <“可执行文件”, “参数1”, “参数2”>,此种方式像是函数调用中的格式;

COPY:

复制文件。 其基本格式:
      格式1:COPY <源路径>…<目标路径>
      格式2:COPY [“<源路径1>”,…"<目标路径>"]

ADD:

更高级的复制文件,在COPY的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用RUN解压;

CMD:

容器启动命令。其基本格式:
      shell格式: CMD <命令>
      exec格式: CMD [“可执行文件”, “参数1”, “参数2”…]
      参数列表格式: CMD [“参数1”, “参数2”…],在指定了ENTRYPOINT指令后,用CMD指定具体的参数

ENTRYPOINT:

入口点。其基本格式分为exec和shell,
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行中可以替代,不过比CMD繁琐,需要通过docker
run 的参数–entrypoint
来指定。当指定了ENTRYPOINT后,CMD的含义就发生了改变,不在是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了:
“”

ENV:

设置环境变量。(都可以使用这里使用的变量)其基本格式:
      格式1:ENV
      格式2:ENV = =…

ARG:

构建参数。构建参数和ENV的效果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在将来容器运行时是不存在的。其基本格式:
      格式1: ARG <参数名> [=<默认值>]
      格式2: 该默认值可以在构建命令 docker build 中用 --build-arg <参数名>=<值> 来覆盖

VOLUME:

定义匿名卷。 其基本格式:
      格式1: VOLUME ["<路径1>", “<路径2>”…]
      格式2: VOLUME <路径>

EXPOSE:

暴露端口。EXPOSE指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。 其基本格式:
      格式1: EXPOSE <端口1> [<端口2>…]

WORKDIR:

指定工作目录。其基本格式:
      格式1: WORKDIR <工作目录路径>

USER:

指定当前用户。USER是帮助你切换到指定用户。 其基本格式:
      格式1: USER <用户名>

HEALTCHECK:

健康检查,判断容器的状态是否正常。 其基本格式:
      格式1: HEALTCHECK [选项] CMD <命令> :设置检查容器健康状况的命令
      格式2: HEALTCHECK NONE: 如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健

Dockerfile打包nginx镜像

在Dockerfile本目录下创建entrypoint.sh
# ls

 data  Dockerfile  entrypoint.sh

# cat Dockefile

    FROM            centos:jc  # 所用镜像
    LABEL           maintainer="name <***@***.com>"
    ENV             DOC_ROOT=/opt/data/html/ \
                    DATA_ROOT=/opt/data/ \
                    APP_ROOT=/opt/app/ \
                    LOGS_ROOT=/opt/logs/
    COPY            data/index.html ${DOC_ROOT}
    ADD             data/nginx-1.5.1.tar.gz $APP_ROOT
    ADD             entrypoint.sh ${DATA_ROOT}
    EXPOSE 			80/TCP
    RUN             yum -y install gcc automake autoconf libtool make gcc-c++ pcre-devel zlib-devel openssl-devel \
                    && cd ${APP_ROOT}nginx-1.5.1 \
                    && ./configure \
                    --prefix=${APP_ROOT}nginx/ \
                    --pid-path=${YUM_ROOT}nginx/nginx.pid \
                    --lock-path=/var/lock/nginx.lock \
                    --error-log-path=${LOGS_ROOT}nginx/error.log \
                    --http-log-path=${LOGS_ROOT}nginx/access.log \
                    --with-http_gzip_static_module \
                    --http-client-body-temp-path=${YUM_ROOT}nginx/client \
                    --http-proxy-temp-path=${YUM_ROOT}nginx/proxy \
                    --http-fastcgi-temp-path=${YUM_ROOT}nginx/fastcgi \
                    --http-uwsgi-temp-path=${YUM_ROOT}nginx/uwsgi \
                    --http-scgi-temp-path=${YUM_ROOT}nginx/scgi\
                    --with-http_ssl_module \
                    && make install \
                    && ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1 \
                    && ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 \
                    && cd ${APP_ROOT} \
                    && rm -rf nginx-1.5.1/ 
    CMD [ "/opt/app/nginx/sbin/nginx","-g","daemon off;" ]
    ENTRYPOINT [ "/opt/data/entrypoint.sh" ]

# cat entrypoint.sh

#!/bin/sh
#

cat > /opt/app/nginx/conf/nginx.conf << EOF
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;



include /opt/app/nginx/conf.d/*.conf;

}
EOF

if [ ! -d /opt/app/nginx/conf.d ];then
mkdir /opt/app/nginx/conf.d
fi

cat > /opt/app/nginx/conf.d/test.conf << EOF
server {
                listen ${PORT:-80};
                server_name $HOSTNAME;
                index index.shtml index.html index.php;
                root ${DOC_ROOT:-/opt/data/html};
        }

EOF

exec "$@"

# ls data/

index.html  nginx-1.5.1.tar.gz  yum.repos.d

# docker build -t nginx:v1 ./

开始打包镜像,-t 指定一个标签给打包出来的镜像,./ 就是Dockerfile所在

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值