【Docker】第七章 Dockerfile

7.1 Dockerfile指令

指令

描述

FROM

构建的新镜像是基于哪个镜像

例如:FROM centos:6

MAINTAINER

镜像维护者姓名或邮箱地址

例如:MAINTAINER lizhenliang

RUN

构建镜像时运行的Shell命令

例如:

RUN [“yum”, “install”, “httpd”]

RUN yum install httpd

CMD

运行容器时执行的Shell命令

例如:

CMD [“-c”, “/start.sh”]

CMD ["/usr/sbin/sshd", "-D"]

CMD /usr/sbin/sshd –D

EXPOSE

声明容器运行的服务端口

例如:EXPOSE 80 443

ENV

设置容器内环境变量

例如:ENV MYSQL_ROOT_PASSWORD 123456

ADD

拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动解压

ADD <src>… <dest>

ADD [“<src>”,… “<dest>”]

ADD https://xxx.com/html.tar.gz /var/www/html

ADD html.tar.gz /var/www/html

COPY

拷贝文件或目录到镜像,用法同上

例如:COPY ./start.sh /start.sh

ENTRYPOINT

运行容器时执行的Shell命令

例如:

ENTRYPOINT [“/bin/bash", “-c", “/start.sh"]

ENTRYPOINT /bin/bash -c ‘/start.sh’

VOLUME

指定容器挂载点到宿主机自动生成的目录或其他容器

例如:

VOLUME ["/var/lib/mysql"]

USER

为RUN、CMD和ENTRYPOINT执行命令指定运行用户

USER <user>[:<group>] or USER <UID>[:<GID>]

例如:USER lizhenliang

WORKDIR

为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录

例如:WORKDIR /data

HEALTHCHECK

健康检查

HEALTHCHECK --interval=5m --timeout=3s --retries=3 \

  CMD curl -f http://localhost/ || exit 1

ARG

在构建镜像时指定一些参数

例如:

FROM centos:6

ARG user     # ARG user=root

USER $user

# docker build --build-arg user=lizhenliang Dockerfile .

7.2 Build镜像命令

Usage:  docker image build [OPTIONS] PATH | URL | -

Options:

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

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

示例:

docker build

docker build -t shykes/myapp

docker build -t shykes/myapp -f /path/Dockerfile /path

7.3 构建PHP网站环境镜像

FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 2 && \
    make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

1、自定义网络

docker network create lnmp

2、创建PHP容器

docker run -itd \ --name lnmp_php \ --net lnmp \ --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html \ php:v1

3、创建Nginx容器

docker run -itd \ --name lnmp_nginx \ --net lnmp \ --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html \ nginx:v1

4、创建MySQL容器

docker run -itd \ --name lnmp_mysql \ --net lnmp \ -p 3306:3306 \ --mount src=mysql-vol,dst=/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql --character-set-server=utf8

7.4 构建JAVA网站环境镜像

FROM centos:7
MAINTAINER www.aliangedu.com 

ADD jdk-8u45-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_45

ADD apache-tomcat-8.0.46.tar.gz /usr/local
COPY server.xml /usr/local/apache-tomcat-8.0.46/conf

RUN rm -f /usr/local/*.tar.gz

WORKDIR /usr/local/apache-tomcat-8.0.46
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh", "run"]

创建容器:

docker run -itd \ --name=tomcat \ -p 8080:8080 \ --mount type=bind,src=/app/webapps/,dst=/usr/local/apache-tomcat-8.0.46/webapps \ tomcat:v1

posted @ 2022-12-09 17:36  随风落木  阅读(12)  评论(0)    收藏  举报  来源