文章目录
1. 基本知识
-
概念:dockerfile是用来构建docker镜像的文件,是命令参数脚本。
-
dockerfile文件中,每个指令都是必须是大写字母,执行是从上到下顺序执行,每个指令都会创建提交一个新的镜像层,并提交。
-
一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
-
镜像构建步骤:
- 编写一个dockerfile文件
- docker build 构键成为一个镜像
- docker run 运行镜像
2. DockerFile指令
FROM 基础镜像,一切都是从这里开始的(常用)
MAINTAINER 镜像是谁写的,作者+邮箱(一般可以忽略)
RUN 镜像构建的时候响应运行的命令(常用)
ADD 步骤 添加内容(跟copy类似,我一般喜欢用copy)
WORKDIR 镜像的工作目录(常用)
VOLUME 挂载的目录(常用)
EXPOSE 保留端口配置(常用)
CMD 指定这个容器启动的时候要运行的命令,只有最后一个生效,可被替代(常用)
ENTRYPOINT 可以追加命令
ONBUILD 当构建一个被继承dockerfile这个时候就会运行 onbuild 的指令,触发指令
COPY 将我们的文件拷贝到镜像中(常用)
ENV 构建的时候设置环境变量(常用)
3. 实战构建一个tomcat镜像
# 1. 先准备好tomcat与jdk安装包,我用的是apache-tomcat-9.0.22.tar.gz 与jdk-8u271-linux-x64.tar.gz
root@ubuntu:/home/mylinux/temp# ls
apache-tomcat-9.0.22.tar.gz jdk-8u271-linux-x64.tar.gz
# 2. 创建DockerFile文件并编写
# 以centos为主镜像,之后的再其基础上增加
FROM centos
# 将jdk包移动到镜像中且解压
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u271-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u271-linux-x64.tar.gz
RUN rm -rf jdk-8u271-linux-x64.tar.gz
# 将tomcat包移动到镜像中且解压
RUN mkdir -p /usr/local/tomcat
WORKDIR /usr/local/tomcat
COPY apache-tomcat-9.0.22.tar.gz /usr/local/tomcat
RUN tar -zxvf apache-tomcat-9.0.22.tar.gz
RUN rm -rf apache-tomcat-9.0.22.tar.gz
# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_271
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV TOMCAT_HOME /usr/local/tomcat/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin
# 暴露的端口号
EXPOSE 8080
# 建立容器之后,运行的指令
CMD /usr/local/tomcat/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/logs/catalina.out
# 3. 使用创建命令
# 要指定镜像的标签信息,可以通过 -t 选项
# 要指定那个Dockerfile文件 -f dockerfile文件
# 若你是的dockerfile文件默认是叫Dockerfile,则可以省-f
# docker build -t 指定镜像标签信息 .
# 这个最后面的 . 不要省了
root@ubuntu:/home/mylinux/temp# docker build -t mytomcat:1.0 .
# 部分截图
Step 11/18 : RUN rm -rf apache-tomcat-9.0.22.tar.gz
---> Running in 0a6c84d5dd8f
Removing intermediate container 0a6c84d5dd8f
---> 7c2d34ca3cde
Step 12/18 : ENV JAVA_HOME /usr/local/java/jdk1.8.0_271
---> Running in ffe9787f298c
Removing intermediate container ffe9787f298c
---> b5af52f6035f
Step 13/18 : ENV JRE_HOME ${JAVA_HOME}/jre
---> Running in 1e16a4e0b3ee
Removing intermediate container 1e16a4e0b3ee
---> 0075e377526c
Step 14/18 : ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
---> Running in e67d4927e5cb
Removing intermediate container e67d4927e5cb
---> 6e30f958b83d
Step 15/18 : ENV TOMCAT_HOME /usr/local/tomcat/apache-tomcat-9.0.22
---> Running in b32e2818879c
Removing intermediate container b32e2818879c
---> ff1785321fb7
Step 16/18 : ENV PATH $PATH:$JAVA_HOME/bin
---> Running in 83f6380c535a
Removing intermediate container 83f6380c535a
---> 9e1a6899f7a6
Step 17/18 : EXPOSE 8080
---> Running in 532cb9284dcc
Removing intermediate container 532cb9284dcc
# 4. 运行docker images查看
root@ubuntu:/home/mylinux/temp# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 4838095d5239 6 minutes ago 735MB
# 5. 运行镜像并测试
# 基础镜像是 centos 因此要用 -it
root@ubuntu:/home/mylinux/temp# docker run -it -d -p 8080:8080 mytomcat:1.0
d4c23e1ef733a64c4dff1c44f46b2289e2d32b4a25b30372ee493445fb44cd37
root@ubuntu:/home/mylinux/temp# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4c23e1ef733 mytomcat:1.0 "/bin/sh -c '/usr/lo…" 4 seconds ago Up 2 seconds 0.0.0.0:8080->8080/tcp serene_lalande
4. 查看镜像构建历史
-
使用命令 docker history 镜像id
root@ubuntu:/home/mylinux/temp# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mytomcat 1.0 ca07bc505bf8 8 minutes ago 735MB centos latest 300e315adb2f 2 weeks ago 209MB root@ubuntu:/home/mylinux/temp# docker history ca07bc505bf8 IMAGE CREATED CREATED BY SIZE COMMENT ca07bc505bf8 8 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/usr… 0B 89dda7f9c51c 8 minutes ago /bin/sh -c #(nop) EXPOSE 8080 0B c025463f9b0d 8 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B b3a12e83e056 8 minutes ago /bin/sh -c #(nop) ENV TOMCAT_HOME=/usr/loca… 0B 7642a3076e1a 8 minutes ago /bin/sh -c #(nop) ENV CLASSPATH=.:/usr/loca… 0B 53e0aed39ab4 8 minutes ago /bin/sh -c #(nop) ENV JRE_HOME=/usr/local/j… 0B 8c388df7d8d0 8 minutes ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B 725b7f23d08e 8 minutes ago /bin/sh -c rm -rf apache-tomcat-9.0.22.tar.gz 0B aa19999de466 8 minutes ago /bin/sh -c tar -zxvf apache-tomcat-9.0.22.ta… 16.1MB 36a2b893106d 8 minutes ago /bin/sh -c #(nop) COPY file:96db2769129d426f… 11.3MB b20fa8db0b5b 8 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local/tomcat 0B 52ba5a996abc 8 minutes ago /bin/sh -c mkdir -p /usr/local/tomcat 0B ead9bbfe097a 8 minutes ago /bin/sh -c rm -rf jdk-8u271-linux-x64.tar.gz 0B 2dc48ebbaad0 9 minutes ago /bin/sh -c tar -zxvf jdk-8u271-linux-x64.tar… 355MB a48ad59d327c 9 minutes ago /bin/sh -c #(nop) COPY file:06fad4625e93f252… 143MB a76f469b87bb 9 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local/java 0B ef618c4658d3 9 minutes ago /bin/sh -c mkdir -p /usr/local/java 0B 300e315adb2f 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 2 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB root@ubuntu:/home/mylinux/temp#