一、需求概述
在此前的实践中,采用docker commit可以将正在运行的容器打包成镜像;在实际中,比如涉及到版本的发布与更新,需要事前订制镜像,此时就用到了Dockerfile。
二、简单示例
1、编写Dockerfile文件
mkdir -p /ops/nginx
vim Dockerfile
FROM nginx
RUN echo '
Hello, Docker!
' > /usr/share/nginx/html/index.html
2、执行打包
docker build -t nginx:v0.1 .
查看镜像:
[
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v0.1 bd4d03571e94 About a minute ago 141MB
3、运行测试
docker run --name test -d -p 81:80 nginx:v0.1
[root@Devops nginx]# docker run --name test -d -p 81:80 nginx:v0.1
dede15797a04bb486b53a72f72d4468db5f797a7d1690559b4d5e8e697a9ff36
三、实际前端项目打包示例
需要将前端文件源码更新至容器镜像内,则
1、编写dockerfile文件
上传源码dist目录到与Dockerfile文件同名目录
vim Dockerfile
FROM nginx
COPY /dist /usr/share/nginx/html/
2、构建镜像
备注:不是必须使用Dockerfile作为文件名,比如可以-f指定文件
docker build -f nginx0.2 -t nginx:v0.3 .
docker build -t nginx:v0.2 .
3、容器运行
docker run --name test2 -d -p 82:80 nginx:v0.2
四、镜像的迁移
1、查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v0.2 2f41692bdd06 2 hours ago 150MB
nginx v0.3 2f41692bdd06 2 hours ago 150MB
nginx v2 2a9b11ef288b 45 hours ago 141MB
nginx latest 605c77e624dd 2 years ago 141MB
2、保存导出镜像文件
docker save nginx:v0.3| gzip > nginx-v0.3.tar.gz
保存正在运行的容器:
3、上传到另一台机器并导入
docker load -i nginx-v0.3.tar.gz
[root@XAYL ops]# docker load -i nginx-v0.3.tar.gz
2edcec3590a4: Loading layer 83.86MB/83.86MB
e379e8aedd4d: Loading layer 62MB/62MB
b8d6e692a25e: Loading layer 3.072kB/3.072kB
f1db227348d0: Loading layer 4.096kB/4.096kB
32ce5f6a5106: Loading layer 3.584kB/3.584kB
d874fd2bc83b: Loading layer 7.168kB/7.168kB
a558f1fd952c: Loading layer 8.62MB/8.62MB
Loaded image: nginx:v0.3
4、运行导入后的容器。
备注:从一个机器将镜像迁移到另一个机器,并显示进度条:
docker save 镜像名> | bzip2 | pv | ssh 用户名>@主机名> 'cat | docker load'