DockerFile命令以及demo

  • DockerFile打包运行命令
  • docker build -t [镜像名称] [Dockerfile位置]
  • DockerFile组成部分
  • 基础镜像信息
  • FROM
  • 维护者信息(可有可无)
  • MAINTAINER
  • 镜像操作指令
  • ENV
  • ADD
  • EXPOSE
  • RUN
  • 容器启动时执行命令
  • CMD
  • 举例
  • 自定义JDK镜像
  • 自定义Tomcat镜像
  • 自定义Mysql镜像
  • 自定义redis镜像


DockerFile打包运行命令

Dockerfile文件的标准命名就是“Dockerfile”,也不用后缀名,否则构建时找不到文件

docker build -t [镜像名称] [Dockerfile位置]

eg:

// 在当前目录下寻找Dockerfile文件并构建名为wkcto_jdk1.8.0_121的镜像
docker build -t wkcto_jdk1.8.0_121 .

DockerFile组成部分

基础镜像信息

FROM

格式为 FROM <image> 或 FROM <image>:<tag>
Dockerfile 文件的第一条指令必须为 FROM 指令。并且,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)

维护者信息(可有可无)

MAINTAINER

格式为 MAINTAINER <name>,指定维护者信息;

镜像操作指令

ENV

格式为 ENV <key> <value> 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持;

ADD

格式为 ADD <src> <dest>;
复制指定的<src>到容器中的<dest>;

EXPOSE

格式为 EXPOSE <port> [<port>…]
告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p 映射端口,Docker 主机会自动分配一个端口转发到指定的端口;

RUN

格式为 RUN <command>
RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行;

容器启动时执行命令

CMD

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。
如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

举例

自定义JDK镜像

// 基础镜像是centos:latest 
FROM centos:latest 
// 作者是wkcto
MAINTAINER wkcto
// 将当前目录下的jdk-8u121-linux-x64.tar.gz 上传到容器的/usr/local文件夹下
ADD jdk-8u121-linux-x64.tar.gz /usr/local 
// 设置JAVA_HOME环境变量为/usr/local/jdk1.8.0_121
ENV JAVA_HOME /usr/local/jdk1.8.0_121
// 设置CLASSPATH环境变量为$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
// 设置PATH环境变量为$PATH:$JAVA_HOME/bin
ENV PATH $PATH:$JAVA_HOME/bin
// 启动容器运行“java -version”指令
CMD java -version

自定义Tomcat镜像

FROM wkcto_jdk1.8.0_121 
MAINTAINER wkcto
ADD apache-tomcat-8.5.24.tar.gz /usr/local/
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.24
ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin 
// 暴露出8080端口 
// ==启动镜像记得 -p映射物理机端口==
EXPOSE 8080
// 运行tomcat
CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run

自定义Mysql镜像

FROM centos:centos6 
MAINTAINER wkcto
// 运行某某命令
RUN yum install mysql-server mysql -y 
// && 表示命令拼接,and的意思;\表示命令太长换行
RUN /etc/init.d/mysqld start &&\
	// %设置所有外部ip可连并设置root账号具有全部权限
	mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH GRANT OPTION ;"&&\
	mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456' WITH GRANT OPTION ;"&&\
	mysql -uroot -p123456 -e "show databases;" 
EXPOSE 3306
CMD /usr/bin/mysqld_safe

自定义redis镜像

FROM centos:latest 
MAINTAINER wkcto
RUN yum install epel-release -y &&\
	 yum install redis -y && yum install net-tools -y 
EXPOSE 6379
// –protected-mode no是关闭redis的保护模式
CMD /usr/bin/redis-server –protected-mode no