Dockerfile 自动构建 CentOS 镜像
需要提前准备好rootfs.tar.xz文件,否则无法完成以下操作,docker的常用的子系统rootfs。 下载地址:https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/centos/7/amd64/default/20191210_07%3A08/rootfs.tar.xz
操作步骤:
# 环境硬性准备工作:
$ cd /opt/
$ mkdir centos7-base
# 将rootfs.tar.xz文件放到目录下,后面需要解压并且生成一个小型的系统,rootfs.tar.xz是docker的前身系统,前提得准备好rootfs.tar.xz文件才能做,是根据lcx系统文件里面的rootfs.tar.xz文件做的,需要找到他,否则做不了。
$ centos7-base/
# 填写硬性配置文件:
# 新建一个Dockerfile文件,官方格式名字就叫这个,最好不要更改,保持规范就好,一定要在centos7-base目录下新建。
vim Dockerfile
FROM scratch #做最基础镜像时,最好填写scratch白手起家的意思,从谁的基础上开始做这个小型系统,类似导入一个镜像,从这个镜像继续操作,如果没有镜像,那不以任何镜像为基础,写法就为:FROM scratch,同时说明接下来所写的指令将作为镜像的第一层开始,相当于它是在自己作镜像。
MAINTAINER YangGuoXiang #作者
ADD rootfs.tar.xz / #添加一个文件,ADD这个功能能自动解压这个文件,并且能制定解压后的位置,在镜像的/根目录下。
RUN echo " test ==> hello world..." > /home/hello.txt #测试命令
CMD ["/bin/bash"] #容器启动时,默认执行的命令,启动/bin/bash
# 开始制作镜像:
docker image build -t yangguoxiang/centos7-base . #使用build -t命令指定制作完后的镜像名字为centos7-base,并且指定Dockerfile文件的位置,那个点.是在当前目录下,因为刚进入了centos6-base目录下,所以文件也在那,命令在当前目录下执行的,也可写文件绝对路径。
# 查看制作好的镜像,并且找到centos7-base的镜像名字。
docker images
# 进入制作好的镜像:
docker run -it --name centos7-base yangguoxiang/centos7-base:latest #dockerfile制作镜像前在cmd指定了默认启动后执行的命令在/bin/bash,否则没有指定cmd就会报错启动不了。
以上操作都只是做一个最最基础的bash镜像,相当于用 centos 或 Ubuntu 的底层系统来做的一个小系统。
Dockerfile 自动构建 Nginx 镜像
myapp/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body>
Hello MyApp | Version: 1.0 | <a href="hostname.html">Pod Name</a>
</body>
</html>
myapp/Dockerfile
FROM nginx
MAINTAINER YangGuoXiang
COPY index.html /usr/share/nginx/html/
RUN cp /etc/hostname /usr/share/nginx/html/hostname.html
EXPOSE 80
ENTRYPOINT nginx -g "daemon off;"
docker build -t myapp:v1.0 .
docker run --name myapp -p 80:80 -d myapp:v1.0