[TOC] > 官网postgresql Dockerfile文件 https://github.com/docker-library/postgres/blob/master/9.6/Dockerfile > Dockerfile举例 ``` FROM openjdk:8 MAINTAINER pm LABEL name="springboot-demo" version="1.0" author="pm" COPY springboot-mybatis-0.0.1-SNAPSHOT.jar springboot-mybatis-image.jar CMD ["java","-jar","springboot-mybatis-image.jar"] ``` > Dockerfile文件说明 # FROM 指定基础镜像,比如`FROM ubuntu:14.04` # RUN 在镜像内部执行一些命令,比如安装软件,配置环境等,换行可以使用"" ` RUN groupadd -r mysql && useradd -r -g mysql mysql` # ENV 设置变量的值,`ENV MYSQL_MAJOR 5.7`,可以通过`docker run --e key=value`修改,后面可以直接使用`${MYSQL_MAJOR}` # LABEL 设置镜像标签 ··· LABEL email="1280415703@qq.com" LABEL name="pm" ··· # VOLUME > 指定容器中数据的挂载目录(挂载点) ``` VOLUME /var/lib/mysql VOLUME ["/data1","/data2"] ``` 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/bash 冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。 ``` # COPY 将主机的文件复制到镜像内,如果目录不存在,会自动创建所需的目录,但是只会复制,不会提取和解压 `COPY docker-entrypoint.sh /usr/local/bin/` # ADD 将主机的文件复制到镜像内,与`COPY` 类似,但是`ADD`会对文件解压和提取 `ADD application.yml /etc/xxxx/` # WORKDIR 指定镜像的工作目录,之后的命令都是基于此目录工作,若不存在则创建 ``` WORKDIR /opt/land-monitor WORKDIR tomcat RUN touch xx.txt ``` ``` docker build -t land-monitor:1.0 . && docker run -p 5001:5001 -v /opt/sqlitedb/:/opt/land-monitor/ --name land-monitor land-monitor:1.0 ``` >会在`/usr/local/tomcat`下创建xx.txt文件 ``` WORKDIR /root ADD app.yml test/ ``` > 会在 /root/test 下存在app.yml 文件 # CMD 容器启动的时候默认会执行的命令,如果有多个`CMD`命令,则最后一个有效 ``` CMD ["mysqld"] 或者 CMD mysqld ``` # ENTRYPOINT 用法与`CMD`类似 `ENTRYPOINT [“docker-entrypoint.sh”]` 但是`docker run`执行时会覆盖`CMD`的命令,而·ENTRYPOINT·不会 # EXPOSE 指定镜像要暴露的端口,启动镜像时,通过·-p·将该端口映射给宿主机 `EXPOSE 3306`