第二课: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