目录
- 一、认识 Dockerfile 文件
- 二、Dockerfile 的基本结构
- 三、Dockerfile 指令
- 四、Dockerfile 自定义镜像
- 1. 自定义 JDK 镜像
- 2. 自定义 Tomcat 镜像
- 3. 自定义 MySQL 镜像
- 4. 自定义 Redis 镜像
- 五、镜像发布到仓库
一、认识 Dockerfile 文件
Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句组成 , 基于这些命令即可以构建一个镜像, 比如下 面就是一个 Dockefile 文件样例
FROM XXX/jdk:8
MAINTAINER docker_user
ENV JAVA_HOME /usr/local/java
ADD apache-tomcat-8.0.32.tar.gz /usr/local/
RUN mv apache-tomcat-8.0.32 tomcat8
EXPOSE 8080
RUN chmod u+x /usr/local/tomcat8/bin/*.sh
CMD /usr/local/tomcat8/bin/catalina.sh start
二、Dockerfile 的基本结构
一般的,Dockerfile 分为四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
三、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 指定的命令。
四、Dockerfile 自定义镜像
1. 自定义 JDK 镜像
FROM centos:latest
MAINTAINER fancy
ADD jdk-8u121-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_121.
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version
构建镜像:docker build -t fancy_jdk1.8.0_121 .
运行镜像:docker run -d ac84bde53958
2. 自定义 Tomcat 镜像
定义 Dockerfile 文件:
FROM fancy_jdk1.8.0_121
MAINTAINER fancy
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
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run
构建镜像: docker build -t fancy-tomcat-8.5.24 .
后边的空格和点(会加载当前目录Dockerfilewen文件),不能省略
运行镜像:docker run -d -p 8080:8080 ab41b5f48256
3. 自定义 MySQL 镜像
定义 Dockerfile 文件:
FROM centos:centos6
MAINTAINER fancy
RUN yum install mysql-server mysql -y
RUN /etc/init.d/mysqld start &&\
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
构建镜像:docker build -t fancy-mysql .
运行镜像:docker run -d -p 3306:3306 09ce279d92df
4. 自定义 Redis 镜像
定义 Dockerfile 文件:
FROM centos:latest
MAINTAINER fancy
RUN yum install epel-release -y && yum install redis -y && yum install net-tools -y
EXPOSE 6379
CMD /usr/bin/redis-server –protected-mode no
构建镜像:docker build -t fancy-redis .
运行镜像:docker run -d -p 6379:6379 390583cf0531
五、镜像发布到仓库
A、阿里云容器镜像仓库
B、注册阿里云镜像仓库
如果没有阿里云账号,需要注册一个阿里云账号。也可以使用淘宝账号、支付宝账号登录。
C、发布镜像阿里云镜像仓库
在控制台中找到容器镜像服务,如下图
创建个人实例,完成之后点击创建镜像仓库
输入命令空间和仓库名称,点击下一步。
推送镜像仓库根据下方的操作指南操作即可
D、配置 Docker Hub 镜像加速