这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
之前文章中我们初步了解了dockerfile,知道dockerfile是用来构建docker镜像的文件,也就是命令参数脚本,现在我们尝试深入学习下dockerfile
先了解下构建步骤dockerfile构建的完整步骤:
- 编写一个dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DokcerHub、阿里云镜像仓库)
看下官方是怎么做的
1、在dockerhub上随便搜索一个镜像
2、随便选择一个版本会直接跳转到github上,并且可以看到镜像的命令脚本
很多官方的镜像是一个很纯净的包,我们可以按照自己的需求制作自己的镜像
Dockerfile的构建
dockerfile的构建并不难,主要我们要把命令脚本写好
基础知识
1、每个关键字(指令)都必须是大写字母
2、执行是从上到下顺序执行的
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层并提交
dockerfile是面向开发的,我们后面发布项目,做镜像,就需要编写dockerfile这个文件(dockerfile逐渐成为企业交付的标准)
我们在回顾下几个概念
- dockerfile:构建文件,定义所有步骤,源代码
- dockerImages:通过dockerfile构建生成镜像,最终发布和运行的产品
- docker容器:容器就是镜像运行起来提供服务器
DockerFile的指令
1 | shell复制代码FROM # 基础镜像,一切从这里开始 |
实战测试
从上面centos命令脚本中可以看到开头FROM scratch,dockerhub中99%的镜像都是从FROM scratch这个基础镜像来的,然后配置需要的软件和配置来构建的。
在官方的centos中对于一些基础的命令都是没有的,所以尝试创建一个自己的centos试一下
1 | ruby复制代码$ docker run -it centos |
第一步:编写文件
在指定路径下编写dockerfile的配置文件
1 | bash复制代码FROM centos |
第二步:构建镜像
mydockerfile是文件名
1 | 复制代码docker build -f mydockerfile -t mycentos:0.1 . |
可以看到是按照我们编写的指令逐步构建的
查看下生成的镜像
第三步:测试运行
1 | arduino复制代码docker run -it mycentos:0.1 |
运行进入容器后,可以看到进入的是配置的工作目录,并且ifconfig命令也是可以使用的,尝试用vim命令也是ok的,所以我们自己通过dockerfile写的镜像是可以正常使用的
我们可以列出本地镜像的变更历史,通过历史可以看下这个镜像是怎么做起来的。这样的话我们可以研究下平时使用的镜像是怎么做的
1 | bash复制代码docker history |
实战tomcat镜像
准备镜像文件
准备镜像文件tomcat压缩包,jdk压缩包
编写dockerfile
编写dockerfile文件,官方命名Dockerfile,build的时候可以自动寻找这个文件,不需要-f指定了!
1 | shell复制代码FROM centos |
构建镜像
编写好了dockerfile可以构建了
1 | erlang复制代码docker build -t diytomcat . |
到这来自定义的tomcat镜像就创建成功了
启动镜像
然后我们启动这个镜像,并且顺便做了些操作,可以仔细看下下面的命令
- 端口映射到9090
- 工程目录、日志目录进行挂载
1 | shell复制代码docker run -d -p 9090:8080 --name ajtomcat -v /Users/cb/test/tomcat-out/test:/usr/local/apache-tomcat-8.5.70/webapps/test -v /Users/cb/test/tomcat-out/tomcatlogs:/usr/local/apache-tomcat-8.5.70/logs diytomcat |
进入容器
1 | shell复制代码$ docker exec -it 9f3f7ed2b184 /bin/bash |
访问测试
访问下tomcat(curl localhost:8080),是通的哦
宿主机访问下9090看下也是OK的哦
发布项目
由于做了卷挂载,我们之间在本地编写项目就可以了
上面的命令的挂载关系
/Users/cb/test/tomcat-out/test:/usr/local/apache-tomcat-8.5.70/webapps/test
我们在外部路径下创建一个最简单的web工程
- 创建一个WEB-INF文件夹,文件夹中新建一个web.xml文件
- 创建一个index.jsp文件
文件中按照格式随便写点东西
web.xml
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
index.jsp
1 | jsp复制代码<html> |
搞定之后我们来访问下这个web工程
最后我们来看下日志的输出情况,由下图可见日志也是稳稳的打印了
OK,到这里我们就算成功了
现在我们在本地就可以完成项目的实时发布,而且项目是部署在docker中的,最重要的是docker镜像使我们纯手工打造的哦,这一套完成的流程我们就算搞定了…
docker学习到这里算是对docker有了一个比较全面的认识了,后面还会继续深入的再研究下docker网络、镜像发布等一些东西,希望这个文章对大家有一点帮助!
有时我们的眼睛可以看见宇宙,却看不见社会底层最悲惨的世界 –《十宗罪》
本文转载自: 掘金