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