第二课:Dockerfile

1.Dockerfile格式

Dockerfile 中的指令是不区分大小写的。然而,习惯上要将它大写,以便更容易地与参数区分开来。

Docker按照Dockerfile 中指令的顺序从上到下逐一执行。一般来说,Dockerfile 必须以指定用于构建过程的基础镜像的 FROM 指令开始,而 ARG 指令是唯一可以在 FROM 指令之前使用的指令,FROM 指令之前可以有一条或多条 ARG 指令,用于声明 Dockerfile 中的 FROM 指令中可以使用的参数。

Docker将以 # 开始的行作为注释,除非该行是有效的解析器指令。一行中任何其他地方的 # 标记都将被视为参数。

2.Dockerfile指令

指令 描述
FROM 构建新镜像是基于哪个镜像
MAINTAINER 镜像维护者姓名或邮箱地址
RUN 构建镜像时运行的shell命令
COPY 拷贝文件或目录到镜像中
ENV 设置环境变量
USER 为RUN,CMD和ENTRYPOINT执行命令指定运行用户
EXPOSE 申明容器运行的服务端口
HEALTHCHECK 容器中服务健康检查
WORKDIR 为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录
ENTRYPOINT 运行容器时执行,如果有多个ENTRYPOINT命令,最后一个生效
CMD 运行容器时执行,如果有多个CMD命令,最后一个生效

3.Build镜像

docker build [OPTIONS] PATH | URL | -
options:
-t,--tag list #镜像名称
-f,--file string #指定dockerfile文件位置

4.构建业务基础镜像

4.1构建nginx基础镜像

构建方法
1.yum或者源码编译安装(1.configure 2.make 3.make install)RUN
2.启用哪些模块 RUN
3.nginx初始化 RUN
4.启动 CMD

创建Dockerfile
Dockerfile-nginx

FROM centos:7
MAINTAINER yogi1982@163.com
RUN yum install -y gcc gcc-c++ make \
    openssl-devel pcre-devel gd-devel \
    iproute net-tools telnet wget curl && \
    yum clean all && \
    rm -rf /var/cache//yum/*
RUN wget http://nginx.org/download/nginx-1.16.1.tar.gz && \
    tar zxf nginx-1.16.1.tar.gz && \
    cd nginx-1.16.1 && \
    ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module && \
    make -j 4 && make install && \
    echo "ok" >> /usr/local/nginx/html/status.html && \
    cd / && rm -rf nginx-1.16.1* && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/nginx/sbin
#COPY nginx.conf /usr/local/nginx/conf/nginx.conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

构建镜像
使用配置好的dockerfile构建镜像

docker build -t nginx:v1 -f Dockerfile-nginx .

构建更新项目

touch index.html
echo "nginx:v2" > index.html

#Dockerfile-nginx-v2
FROM nginx:v1
COPY index.html /usr/local/nginx/html

构建v2镜像

docker build -t nginx:v2 -f Dockerfile-nginx-v2 .

4.2构建php基础镜像

构建Dockerfile

FROM centos:7
MAINTAINER yogi1982@163.com
ENV VERSION=7.3.13

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 openssh-clients && \
    yum clean all && \
    rm -rf /var/cache/yum/*

#RUN wget http://docs.php.net/distributions/php-7.3.7.tar.gz && \
RUN wget http://192.168.1.88/downloads/php-${VERSION}.tar.gz && \
    tar zxf php-${VERSION}.tar.gz && \
    cd php-${VERSION} && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --enable-fpm --enable-opcache \
    --with-mysqli --with-pdo-mysql \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-freetype-dir \
    --enable-mbstring --enable-hash && \
    make -j 4 && make install && \
    cp php.ini-production /usr/local/php/etc/php.ini && \
    cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf && \
    sed -i "90a \deamonize = no" /usr/local/php/etc/php-fpm.conf && \
    mkdir /usr/local/php/log && \
    cd /usr/local/php/etc/php-fpm.d && \
    cp www.conf.default www.conf && \
    cd / && rm -rf php* && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/php/sbin
COPY php.ini /usr/local/php/etc/
COPY php-fpm.conf /usr/local/php/etc
WORKDIR /usr/local/php
EXPOSE 9000
CMD ["php-fpm"]

构建tomcat基础镜像
构建Dockerfile

FROM centos:7
MAINTAINER yogi1982@163.com

ENV VERSION=8.5.50

RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
    yum clean all && \
    rm -rf /var/cache/yum/*

RUN wget http://192.168.1.88/downloads/apache-tomcat-${VERSION}.tar.gz && \
    tar zxf apache-tomcat-${VERSION}.tar.gz && \
    mv apache-tomcat-${VERSION} /usr/local/tomcat && \
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
    mkdir /usr/local/tomcat/webapps/test && \
    echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
    sed  -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080
CMD ["catalina.sh", "run"]

以Jenkins为例,构建项目
Dockerfile-tomcat-v2

FROM tomcat:v1
COPY jenkins.war /usr/local/tomcat/webapps/ROOT.war
posted @ 2019-12-25 10:53  Doc-Yu  阅读(232)  评论(0编辑  收藏  举报