DockerFile介绍

dockerfile 是用来构建docker镜像的文件,命令参数脚本。
构建步骤:

  1. 编写一个dockerfile文件
  2. docker bulid 构建镜像
  3. docker run 运行镜像
  4. docker push 发布镜像

    DockerFile构建过程

    基础知识

  5. 每个保留关键字(指定)必须大写

  6. 执行从上往下
  7. 表示注释

  8. 每个指令都会创建一个新的镜像层,并提交。

图片.png
DockerFile :构建镜像文件,定义一切的步骤,源代码
DockerImages:通过DockerFile构建生成镜像,最终发布和运行的产品
Docker 容器:容器就是镜像运行起来提供服务的

DockerFile 常用指令

  1. FROM # 设置基础镜像
  2. MAINTAINER # 维护者信息
  3. RUN # 便已镜像市运行的命令
  4. CMD # 设置容器的启动命令
  5. LABEL # 设置镜像标签
  6. EXPOESE # 设置镜像暴露端口
  7. ENV # 设置容器的环境变量

图片.png

实战测试

Docker Hub 中99%的镜像都是从这个基础镜像过来的 FROM scratch ,然后配置需要的软件和配置来进行构建

创建一个自定义centos DockerFile

  1. # 1、编写dockerfile
  2. [root@Box DockerFile]# cat mydockerfile
  3. FROM centos
  4. MAINITAINER Box<123@163.com>
  5. ENV MYPATH /usr/local
  6. WORKDIR $MYPATH
  7. RUN yum -y install vim
  8. RUN yum -y install net-tools
  9. EXPOSE 80
  10. CMD echo $MYPATH
  11. CMD echo "------end------"
  12. CMD /bin/bash
  13. # 2、通过这个dockerfile 文件生成镜像
  14. [root@Box DockerFile]# docker build -f mydockerfile -t mycentos:1.0 .
  15. docker history 镜像ID #查看镜像历史变更

CMD和ENTRYPOINT 区别

  1. CMD # 指定这恶容器启动时要执行的命令,只有最后一个命令会执行
  2. ENTRYPOINT # 指定这恶容器启动时要执行的命令,可以追加其他命令

CMD指令测试

  1. # 1、编写dockerfile
  2. [root@Box DockerFile]# cat mydocker-cmt-test
  3. FROM centos
  4. CMD ["ls","-a"]
  5. # 2、通过这个dockerfile 文件生成镜像
  6. [root@Box DockerFile]# docker build -f mydocker-cmt-test -t cmd-test .
  7. # 3、运行效果
  8. [root@Box DockerFile]# docker run cmd-test
  9. .
  10. ..
  11. .dockerenv
  12. bin
  13. dev
  14. etc
  15. home
  16. # 4、在 "docker run cmd-test " 后面追加命令 "id"
  17. [root@Box DockerFile]# docker run cmd-test id
  18. uid=0(root) gid=0(root) groups=0(root)
  19. # 结论:ls -a 命令被替换了

ENTRYPOINT指令测试

  1. # 1、编写dockerfile
  2. [root@Box DockerFile]# cat mydocker-ENTRYPOINT-test
  3. FROM centos
  4. ENTRYPOINT ["ls","-a"]
  5. # 2、通过这个dockerfile 文件生成镜像
  6. [root@Box DockerFile]# docker build -f mydocker-ENTRYPOINT-test -t entrypoint-test .
  7. # 3、运行效果
  8. [root@Box DockerFile]# docker run entrypoint-test
  9. .
  10. ..
  11. .dockerenv
  12. bin
  13. dev
  14. etc
  15. home
  16. # 4、在 "docker run cmd-test " 后面追加命令 "id"
  17. [root@Box DockerFile]# docker run entrypoint-test -l
  18. total 0
  19. drwxr-xr-x. 1 root root 6 Mar 9 14:09 .
  20. drwxr-xr-x. 1 root root 6 Mar 9 14:09 ..
  21. -rwxr-xr-x. 1 root root 0 Mar 9 14:09 .dockerenv
  22. lrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin
  23. drwxr-xr-x. 5 root root 340 Mar 9 14:09 dev
  24. drwxr-xr-x. 1 root root 66 Mar 9 14:09 etc
  25. drwxr-xr-x. 2 root root 6 Nov 3 15:22 home
  26. # 结论:ls -al -l追加到了后面 命令被替换了

实战:tomcat+jdk镜像

1、准备tomcat和jdk压缩包

图片.png

2、编写Dokcerfile文件

  1. [root@Box tomcat_jdk]# cat Dockerfile
  2. FROM centos
  3. MAINTAINER Box<Box99999@163.com>
  4. ADD jdk-8u281-linux-x64.tar.gz /usr/local/
  5. ADD apache-tomcat-9.0.43.tar.gz /usr/local/
  6. RUN yum -y install vim
  7. ENV MYPATH /usr/local
  8. WORKDIR $MYPATH
  9. ENV JAVA_HOME /usr/local/jdk1.8.0_281
  10. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  11. ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43
  12. ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.43
  13. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
  14. EXPOSE 8080
  15. CMD /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 镜像

  1. 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
  2. -v 将应用目录和日志目录挂载到本地

5、测试访问

图片.png

6、发布应用

创建web.xml 和index.jsp文件

  1. # web.xml 文件
  2. [root@Box test]# cat web.xml
  3. <?xml version="1.0" encoding="UTF-8"?>
  4. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns="http://java.sun.com/xml/ns/javaee"
  6. xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  7. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  8. id="WebApp_ID" version="2.5">
  9. </web-app>
  10. # index.jsp文件
  11. [root@Box test]# cat index.jsp
  12. <%@ page language="java" contentType="text/html;charset=UTF-8"
  13. pageEncoding="UTF-8" %>
  14. <!DOCTYPE html>
  15. <html>
  16. <head>
  17. <meta charset="uft-8">
  18. <title>Wecomele To Box page!</title>
  19. </head>
  20. <body>
  21. Hello World!<br/>
  22. <%
  23. System.out.println("---test----");
  24. %>
  25. </body>
  26. </html>

7、访问日志

图片.png
tail -f ../tomcatlogs/catalina.out
图片.png

镜像发布到Hub Docker

1、注册账户 https://hub.docker.com/signup
2、登录账号
docker login -u <username>
3、发布镜像

  1. # 第一次尝试发现被拒绝了
  2. [root@Box test]# docker push mytomcat:1.0
  3. The push refers to repository [docker.io/box/tomcat]
  4. d29452dfa8de: Preparing
  5. 99051e09a063: Preparing
  6. 65917a0d78a4: Preparing
  7. 2653d992f4ef: Preparing
  8. denied: requested access to the resource is denied
  9. ########### 这里有个坑,需要就该tag ######################
  10. docker tag firstimage YOUR_DOCKERHUB_NAME/firstimage
  11. docker push YOUR_DOCKERHUB_NAME/firstimage
  12. # 修改tag
  13. docker tag mytomcat:1.0 boxxod/tomcat:1.0
  14. # 上传成功
  15. [root@Box test]# docker push boxxod/tomcat:1.0
  16. The push refers to repository [docker.io/boxxod/tomcat]
  17. d29452dfa8de: Pushed
  18. 99051e09a063: Pushed
  19. 65917a0d78a4: Pushed
  20. 2653d992f4ef: Pushed
  21. 1.0: digest: sha256:ead790707c24d931e2c2e5a46c4306929e52ca4117e09024636f8ccffe2ebfe0 size: 1166

镜像发布成功
图片.png