虚拟化主流技术
第一章 虚拟化之ESXi (待补充)
第二章 虚拟化之Hyper-V
第三章 虚拟化之KVM
第四章 虚拟化之Docker(一)
第五章 虚拟化之Docker(二)——部署tomcat
第六章 虚拟化之Docker(三)——初识Dockerfile
前言
上一节我们利用了tomcat镜像跑起来一个自定义的web,大家一定很渴望构建自己的镜像,那就要用到强大的Dockerfile,你可以把Dockerfile理解为shell命令的集合。
一、Dockerfile是什么?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
二、Dockerfile中常用指令
1. FROM
用来指定基础环境,也就是说,你要继承哪个镜像,在它的基础上搞点事情。
2. COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
3. WORKDIR
指定工作目录。
4. RUN
相当于写shell脚本,写的就是linux命令
5. EXPOSE
暴露容器端口
三、写一个Dockerfile栗子(还是tomcat)
首先要在你的指定目录创建Dockerfile文件,我在/usr/local/docker/myapp下创建了我的Dockerfile
[root@docker docker]# mkdir myapp
[root@docker docker]# cd myapp
创建自己的index.jsp文件(我写的是hello myapp),目的还是要替换掉tomcat默认的index.jsp,展示我们自己的内容。
[root@docker myapp]# vi index.jsp
创建Dockerfile
[root@docker myapp]# vi Dockerfile
这是我的Dockerfile,为了避免上一章tomcat出现的问题,这里用了8.0.22版本
FROM tomcat:8.0.22
RUN rm -fr /usr/local/tomcat/webapps/ROOT/*
COPY index.jsp.tar.gz /usr/local/tomcat/webapps/ROOT
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN tar -zxvf index.jsp.tar.gz \
&& rm -fr index.jsp.tar.gz
EXPOSE 8080
然后就可以构建我们自己的镜像了,“.”是上下文的意思,此处你可以理解为将Dockerfile所在的整个目录打包发到定制镜像的指定目录; myapp是我们定制镜像的名称。
[root@docker myapp]# docker build -t myapp .
Sending build context to Docker daemon 4.096kB
Step 1/6 : FROM tomcat:8.0.22
---> 76d235c1c377
Step 2/6 : RUN rm -fr /usr/local/tomcat/webapps/ROOT/*
---> Running in f97bc27a8bc5
Removing intermediate container f97bc27a8bc5
---> f27e501d0477
Step 3/6 : COPY index.jsp.tar.gz /usr/local/tomcat/webapps/ROOT
---> ba9562bfa158
Step 4/6 : WORKDIR /usr/local/tomcat/webapps/ROOT
---> Running in 9bfe15a844b9
Removing intermediate container 9bfe15a844b9
---> fc2fa9ee1564
Step 5/6 : RUN tar -zxvf index.jsp.tar.gz && rm -fr index.jsp.tar.gz
---> Running in 38e49a79ac05
index.jsp
Removing intermediate container 38e49a79ac05
---> 66538e6b234e
Step 6/6 : EXPOSE 8080
---> Running in a6f5e7500e3b
Removing intermediate container a6f5e7500e3b
---> 9f0a2419d840
Successfully built 9f0a2419d840
Successfully tagged myapp:latest
我们看一下我们的images,发现多了一个myapp,这就是我们新构建的新镜像。
[root@docker myapp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp latest 9f0a2419d840 40 seconds ago 349MB
<none> <none> 0b8122b9d710 5 minutes ago 349MB
tomcat 8.0.22 76d235c1c377 5 years ago 349MB
然后就是我们熟悉的run镜像,让我们的容器飞起来!
[root@docker myapp]# docker run -p 8080:8080 --name myapp-test -d myapp
01cfb43db437f444f864b10ed4463c9a97b92a97254a03686fb20421b37f401e
去访问自己的IP:8080
总结
简单的Dockerfile很容易,还有其他几个命令没有涉及到,我们的重点是能看懂Dockerfile!