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

操作步骤:

  1. # 环境硬性准备工作:
  2. $ cd /opt/
  3. $ mkdir centos7-base
  4. # 将rootfs.tar.xz文件放到目录下,后面需要解压并且生成一个小型的系统,rootfs.tar.xz是docker的前身系统,前提得准备好rootfs.tar.xz文件才能做,是根据lcx系统文件里面的rootfs.tar.xz文件做的,需要找到他,否则做不了。
  5. $ centos7-base/
  1. # 填写硬性配置文件:
  2. # 新建一个Dockerfile文件,官方格式名字就叫这个,最好不要更改,保持规范就好,一定要在centos7-base目录下新建。
  3. vim Dockerfile
  4. FROM scratch #做最基础镜像时,最好填写scratch白手起家的意思,从谁的基础上开始做这个小型系统,类似导入一个镜像,从这个镜像继续操作,如果没有镜像,那不以任何镜像为基础,写法就为:FROM scratch,同时说明接下来所写的指令将作为镜像的第一层开始,相当于它是在自己作镜像。
  5. MAINTAINER YangGuoXiang #作者
  6. ADD rootfs.tar.xz / #添加一个文件,ADD这个功能能自动解压这个文件,并且能制定解压后的位置,在镜像的/根目录下。
  7. RUN echo " test ==> hello world..." > /home/hello.txt #测试命令
  8. CMD ["/bin/bash"] #容器启动时,默认执行的命令,启动/bin/bash
  1. # 开始制作镜像:
  2. docker image build -t yangguoxiang/centos7-base . #使用build -t命令指定制作完后的镜像名字为centos7-base,并且指定Dockerfile文件的位置,那个点.是在当前目录下,因为刚进入了centos6-base目录下,所以文件也在那,命令在当前目录下执行的,也可写文件绝对路径。
  3. # 查看制作好的镜像,并且找到centos7-base的镜像名字。
  4. docker images
  5. # 进入制作好的镜像:
  6. docker run -it --name centos7-base yangguoxiang/centos7-base:latest #dockerfile制作镜像前在cmd指定了默认启动后执行的命令在/bin/bash,否则没有指定cmd就会报错启动不了。

以上操作都只是做一个最最基础的bash镜像,相当于用 centos 或 Ubuntu 的底层系统来做的一个小系统。

Dockerfile 自动构建 Nginx 镜像

myapp/index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Welcome to nginx!</title>
  5. </head>
  6. <body>
  7. Hello MyApp | Version: 1.0 | <a href="hostname.html">Pod Name</a>
  8. </body>
  9. </html>

myapp/Dockerfile

  1. FROM nginx
  2. MAINTAINER YangGuoXiang
  3. COPY index.html /usr/share/nginx/html/
  4. RUN cp /etc/hostname /usr/share/nginx/html/hostname.html
  5. EXPOSE 80
  6. ENTRYPOINT nginx -g "daemon off;"
  1. docker build -t myapp:v1.0 .
  2. docker run --name myapp -p 80:80 -d myapp:v1.0