DockerFile介绍
dockerfile 是用来构建docker镜像的文件,命令参数脚本。
构建步骤:
- 编写一个dockerfile文件
- docker bulid 构建镜像
- docker run 运行镜像
-
DockerFile构建过程
基础知识
每个保留关键字(指定)必须大写
- 执行从上往下
表示注释
- 每个指令都会创建一个新的镜像层,并提交。

DockerFile :构建镜像文件,定义一切的步骤,源代码
DockerImages:通过DockerFile构建生成镜像,最终发布和运行的产品
Docker 容器:容器就是镜像运行起来提供服务的
DockerFile 常用指令
FROM # 设置基础镜像MAINTAINER # 维护者信息RUN # 便已镜像市运行的命令CMD # 设置容器的启动命令LABEL # 设置镜像标签EXPOESE # 设置镜像暴露端口ENV # 设置容器的环境变量
实战测试
Docker Hub 中99%的镜像都是从这个基础镜像过来的 FROM scratch ,然后配置需要的软件和配置来进行构建
创建一个自定义centos DockerFile
# 1、编写dockerfile[root@Box DockerFile]# cat mydockerfileFROM centosMAINITAINER Box<123@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "------end------"CMD /bin/bash# 2、通过这个dockerfile 文件生成镜像[root@Box DockerFile]# docker build -f mydockerfile -t mycentos:1.0 .docker history 镜像ID #查看镜像历史变更
CMD和ENTRYPOINT 区别
CMD # 指定这恶容器启动时要执行的命令,只有最后一个命令会执行ENTRYPOINT # 指定这恶容器启动时要执行的命令,可以追加其他命令
CMD指令测试
# 1、编写dockerfile[root@Box DockerFile]# cat mydocker-cmt-testFROM centosCMD ["ls","-a"]# 2、通过这个dockerfile 文件生成镜像[root@Box DockerFile]# docker build -f mydocker-cmt-test -t cmd-test .# 3、运行效果[root@Box DockerFile]# docker run cmd-test....dockerenvbindevetchome# 4、在 "docker run cmd-test " 后面追加命令 "id"[root@Box DockerFile]# docker run cmd-test iduid=0(root) gid=0(root) groups=0(root)# 结论:ls -a 命令被替换了
ENTRYPOINT指令测试
# 1、编写dockerfile[root@Box DockerFile]# cat mydocker-ENTRYPOINT-testFROM centosENTRYPOINT ["ls","-a"]# 2、通过这个dockerfile 文件生成镜像[root@Box DockerFile]# docker build -f mydocker-ENTRYPOINT-test -t entrypoint-test .# 3、运行效果[root@Box DockerFile]# docker run entrypoint-test....dockerenvbindevetchome# 4、在 "docker run cmd-test " 后面追加命令 "id"[root@Box DockerFile]# docker run entrypoint-test -ltotal 0drwxr-xr-x. 1 root root 6 Mar 9 14:09 .drwxr-xr-x. 1 root root 6 Mar 9 14:09 ..-rwxr-xr-x. 1 root root 0 Mar 9 14:09 .dockerenvlrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bindrwxr-xr-x. 5 root root 340 Mar 9 14:09 devdrwxr-xr-x. 1 root root 66 Mar 9 14:09 etcdrwxr-xr-x. 2 root root 6 Nov 3 15:22 home# 结论:ls -al -l追加到了后面 命令被替换了
实战:tomcat+jdk镜像
1、准备tomcat和jdk压缩包
2、编写Dokcerfile文件
[root@Box tomcat_jdk]# cat DockerfileFROM centosMAINTAINER Box<Box99999@163.com>ADD jdk-8u281-linux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.43.tar.gz /usr/local/RUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_281ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.43ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.43/bin/logs/catalina.out
3、编译docker文件生成镜像
docker build -t mytomcat:1.0 .
4、运行 mytomcat 镜像
docker run -d -p 8080:8080 --name mytomcat -v /home/build/mytomcat/test:/usr/local/apache-tomcat-9.0.43/webapps/test -v /home/build/mytomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.43/logs mytomcat:1.0-v 将应用目录和日志目录挂载到本地
5、测试访问
6、发布应用
创建web.xml 和index.jsp文件
# web.xml 文件[root@Box test]# cat web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"></web-app># index.jsp文件[root@Box test]# cat index.jsp<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="UTF-8" %><!DOCTYPE html><html><head><meta charset="uft-8"><title>Wecomele To Box page!</title></head><body>Hello World!<br/><%System.out.println("---test----");%></body></html>
7、访问日志

tail -f ../tomcatlogs/catalina.out
镜像发布到Hub Docker
1、注册账户 https://hub.docker.com/signup
2、登录账号 docker login -u <username>
3、发布镜像
# 第一次尝试发现被拒绝了[root@Box test]# docker push mytomcat:1.0The push refers to repository [docker.io/box/tomcat]d29452dfa8de: Preparing99051e09a063: Preparing65917a0d78a4: Preparing2653d992f4ef: Preparingdenied: requested access to the resource is denied########### 这里有个坑,需要就该tag ######################docker tag firstimage YOUR_DOCKERHUB_NAME/firstimagedocker push YOUR_DOCKERHUB_NAME/firstimage# 修改tagdocker tag mytomcat:1.0 boxxod/tomcat:1.0# 上传成功[root@Box test]# docker push boxxod/tomcat:1.0The push refers to repository [docker.io/boxxod/tomcat]d29452dfa8de: Pushed99051e09a063: Pushed65917a0d78a4: Pushed2653d992f4ef: Pushed1.0: digest: sha256:ead790707c24d931e2c2e5a46c4306929e52ca4117e09024636f8ccffe2ebfe0 size: 1166
镜像发布成功
