7 Dockerfile定制容器镜像

7 Dockerfile定制容器镜像

7.1 Dockerfile格式

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

image-20210505204405757

7.2 Dockerfile指令

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

7.3 Build镜像

Usage: docker build [OPTIONS] PATH | URL | -[flags]Options:

  • -t, --tag list 镜像名称

  • -f, --file string 指定Dockerfile文件位置

docker build .
docker build -t shykes/myapp .
docker build -t shykes/myapp -f /path/Dockerfile /path
docker build -t shykes/myapp http://www.example.com/Dockerfile

7.4 构建Nginx基础镜像

FROM centos:7
MAINTAINER weirel
RUN yum -y install gcc gcc-c++ make \
  openssl-devel pcre-devel gd-devel \
  iproute net-tools telnet wget curl --nogpgcheck && \
  yum clean all && \
  rm -rf /var/cache/yum/*
RUN wget http://nginx.org/download/nginx-1.19.10.tar.gz && \
  tar zxvf nginx-1.19.10.tar.gz && \
  cd nginx-1.19.10 && \
  ./configure --prefix=/usr/local/nginx \
  --with-http_ssl_module \
  --with-http_stub_status_module && \
  make -j 4 && make install && \
  rm -rf /usr/local/nginx/html/* && \
  echo "ok" >> /usr/local/nginx/html/index.html && \
  cd / && rm -rf nginx-1.12.2* && \
  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;"]
wget https://cunqi0105-1300757323.cos.ap-shanghai.myqcloud.com/configuration-file/nginx.conf

7.5 构建Tomcat基础镜像

FROM centos:7
MAINTAINER weirel

ENV VERSION=8.5.65

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

RUN wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.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"]

7.6 构建PHP基础镜像

FROM centos:7
MAINTAINER weirel
RUN yum -y install epel-release --nogpgcheck && \
  yum -y install 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 --nogpgcheck && \
  yum clean all && \
  rm -rf /var/cache/yum/*

RUN wget http://docs.php.net/distributions/php-7.3.7.tar.gz && \
  tar zxvf php-7.3.7.tar.gz && \
  cd php-7.3.7 && \
  ./configure --prefix=/usr/local/php \
  --with-config-file-path=/usr/local/php/etc \
  --enable-fpm --enable-opcache \
  --with-mysql --with-mysqli --with-pdo-mysql \
  --with-openssl --with-zlib --with-curl --with-gd \
  --with-jpeg-dir --with-png-dir --with-freetype-dir \
  --enable-mbstring --with-mcrypt --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 \daemonize = no" /usr/local/php/etc/php-fpm.conf && \
  mkdir /usr/local/php/log && \
  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"]
wget https://cunqi0105-1300757323.cos.ap-shanghai.myqcloud.com/configuration-file/php-fpm.conf

wget https://cunqi0105-1300757323.cos.ap-shanghai.myqcloud.com/configuration-file/php.ini

7.7 构建Nginx前端项目

FROM nginx
MAINTAINER weirel
COPY ./dist /usr/share/nginx/html
EXPOSE 80
ENTRYPOINT ["nginx","-s","reload"]

7.7 构建java后端项目

FROM openjdk:8-jdk-alpine
MAINTAINER weirel
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8888
ENTRYPOINT ["java","-jar","/app.jar"]

7.8 搭建LNMP网站平台

1、自定义网络

docker network create lnmp

2、创建Mysql容器

docker run -d --name lnmp_mysql --net lnmp --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8

3、创建PHP容器

docker run -d --name lnmp_php --net lnmp --mount src=wwwroot,dst=/wwwroot php:v1

4、创建Nginx容器

docker run -d --name lnmp_nginx --net lnmp -p 88:80 --mount src=wwwroot,dst=/wwwroot nginx:v1

 

posted @ 2021-05-10 16:31  孤独的小人物  阅读(274)  评论(0)    收藏  举报