在使用Dockerfile构建镜像之前,我们先用一个案例来演示构建镜像的过程,首先我们使用ubuntu作为基础镜像,然后安装并运行figlet程序.
案例1:
1、安装figlet
1、运行并进入容器
docker container run -ti ubuntu bash
2、更新容器环境
apt-get update
3、安装figlet
apt-get install -y figlet
2、运行figlet "hello docker",效果如下图
![](https://img.haomeiwen.com/i15999949/9e2009fbccd2e3ad.png)
3、退出容器并查看容器id
![](https://img.haomeiwen.com/i15999949/aaa81b2545a564be.png)
4、制作镜像,docker container commit c439fd3f731a
![](https://img.haomeiwen.com/i15999949/472d475dad87b543.png)
5、查看制作的镜像,docker image ls,此时的镜像没有仓库和tag标签信息
![](https://img.haomeiwen.com/i15999949/82a83bbc84e03bb9.png)
6、给镜像打标签,docker image tag dae95304ac1d ourfiglet,可以看到镜像已添加标签信息
![](https://img.haomeiwen.com/i15999949/93fc84d0d8a261ca.png)
7、测试镜像docker容器运行
docker container run ourfiglet figlet hello docker
![](https://img.haomeiwen.com/i15999949/37d8783085780f34.png)
上面的通过在容器里安装好我们需要的应用然后通过命令手动提交制作镜像让我们了解了制作镜像的详细过程,接下来我们通过Dockerfile来完成镜像的制作,通过Dockerfile我们可以完成更加复杂的镜像制作.
案例2:
通过一个简单的nodejs项目来演示Dockerfile的过程,这里我们使用alpine作为基础镜像,这个镜像可以方便的使用apk进行软件管理,安装nodejs环境
1、首先我新建一个简单的js测试程序
tee index.js <<-'EOF'
var os = require("os");
var hostname = os.hostname();
console.log("hello from " + hostname);
EOF
![](https://img.haomeiwen.com/i15999949/07b2cbffe71fda68.png)
2、在index.js同级目录下创建Dockerfile
tee Dockerfile <<-'EOF'
FROM alpine
RUN apk update && apk add nodejs
COPY . /app
WORKDIR /app
CMD ["node","index.js"]
EOF
![](https://img.haomeiwen.com/i15999949/96ce55ed56174789.png)
3、使用命令构建镜像
docker image build -t hello:v0.1 .
![](https://img.haomeiwen.com/i15999949/658b7036940980f0.png)
4、测试容器运行镜像,node环境可以运行js文件,可以看到我们成功运行了上面写的测试程序
docker container run hello:v0.1
![](https://img.haomeiwen.com/i15999949/ddfe04c1b30d782b.png)
5、下图是镜像构建的过程
![](https://img.haomeiwen.com/i15999949/05f1282c9c90ad61.png)
6、Dockerfile层的概念,层的设计理念在构建镜像时可以帮助我们节省时间,Dockerfile的每一行命令代表一个层,每一层之间独立不受其他层影响,例如我们需要改动index.js文件需要重建镜像时,Docker知道其他层没有变动,所以会使用缓存,只对index.js的层进行重新构建,我们一起来看一下这个过程
6-1 增加index.js内容
echo "console.log("this is v0.2");" >> index.js
6-2 重新构建
docker image build -t hello:v0.2 .
![](https://img.haomeiwen.com/i15999949/2659bf232aee083b.png)
![](https://img.haomeiwen.com/i15999949/9a4abe729266c7dd.png)
上面我们使用Dockerfile完成了一个简单的镜像制作
网友评论