什么是Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。自定义镜像可以用来满足我们的个性化需求。
Docker通过读取Dockerfile 中指令按步自动生成镜像
docker -build -t 机构/镜像名<:tags> dockerfile目录
如何通过Dockerfile构建自定义镜像
Dockerfile自动部署Tomcat应用示例
1、在本地目录创建docker应用
例如在E:\docker\dockerfile\docker-app中创建index.html
文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>欢迎来到李小白的博客</title>
</head>
<body>
<h1>欢迎来到李小白的博客</h1>
</body>
</html>
2、在E:\docker\dockerfile目录下新建Dockerfile文件(注意:Dockerfile无文件后缀)
Dockerfile文件内容如下
# 设置基准镜像,在此基础上进行扩展
FROM tomcat:8.5.46-jdk8-openjdk
# 说明镜像的维护者或组织者,只是说明性信息
MAINTAINER lixiaobai.com
# 切换工作目录 相当于进入容器内部的指定部署目录 如果工作目录不存在会自动创建
WORKDIR /usr/local/tomcat/webapps
# 拷贝所有文件 第一个docker-app代表当前目录下的docker-app ./docker-app是指/usr/local/tomcat/webapps下的docker-app
ADD docker-app ./docker-app
3、将E:\docker\dockerfile文件拷贝到Linux服务器
在linux服务器的/usr目录下创建image目录,通过Xftp或者WinSCP工具进行文件传输,将dockerfile上传到/usr/image目录下
Xshell终端进入到/usr/image目录验证是否拷贝成功
拷贝成功后,进行下一步
4、执行docker build命令对镜像进行构建
# 构建镜像 -t 用于指定镜像的名字 拥有者/应用名:版本 上下文路径(绝对路径和相对路径都可以)
docker build -t lixiaobai/myapp:1.0 /usr/image/dockerfile
# 相对路径 .代表当前目录
# docker build -t lixiaobai/myapp:1.0 .
通过执行完Dockerfile中的4步构建指令,镜像构建成功
5、创建容器并启动服务
docker run -d -p 80:8080 lixiaobai/myapp:1.0
打开浏览器,测试服务是否可以正常访问
6、进入容器内部查看部署情况
docker exec -it 855f7930476b /bin/bash
补充:
文中镜像构建出涉及到的上下文路径,是指 docker 在构建镜像时,可能要使用到本机的文件,docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机(linux服务器)是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件(/usr/image/dockerfile)一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。