1.通过dockerfile 制作centos系统镜像然后再制作 nginx编译镜像
答:
1)准备工作
关闭防火墙
关闭selinux
安装好docker-ce,并准备好docker设置加速
2)拉取centos7系统镜像
docker pull centos:centos7.8.2003
3)创建准备文件目录结构,方便后期镜像比较多可以进行分类
[root@localhost ~]# mkdir /data/dockerfile/{system/{centos,ubuntu},web/{apache,nginx}} -pv
[root@localhost ~]# cd /data/dockerfile/system/
[root@localhost /data/dockerfile/system]# vim Dockerfile
FROM centos:centos7.8.2003
LABEL maintainer="liaolongxuan <root@liaolongxuan.com>"
RUN yum -y install wget && rm -rf /etc/yum.repos.d/*
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
&& yum -y install vim-enhanced tcpdump lrzsz tree telnet bash-completion net-tools wget bzip2 lsof zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel
&& yum clean all
&& rm -rf /etc/localtime
&& ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& rm -rf /var/cache/yum/*
4)写个脚本执行构建
[root@localhost /data/dockerfile/system]# cat build.sh
#!/bin/bash
TAG=$1
docker build -t centos7-base:$TAG .
授可执行权限
[root@localhost /data/dockerfile/system]# chmod +x build.sh
执行构建
[root@localhost /data/dockerfile/system]#./build.sh v1.0
5)制作Nginx编译镜像,宿主机下载有Nginx编译包并做好模板配置文件
[root@localhost /data/dockerfile/web/nginx]# ll
-rwxr-xr-x 1 root root 56 Aug 3 00:24 build.sh
-rw-r--r-- 1 root root 400 Aug 3 21:26 Dockerfile
-rw-r--r-- 1 root root 14 Aug 3 00:11 index.html
-rw-r--r-- 1 root root 1032630 Aug 3 00:22 nginx-1.16.1.tar.gz
-rw-r--r-- 1 root root 2680 Aug 3 21:17 nginx.conf
修改配置并添加一行
[root@localhost /data/dockerfile/web/nginx]# cat nginx.conf
user www;
worker_processes 1;
daemon off; # 添加的这行,前台运行Nginx
[root@localhost /data/dockerfile/web/nginx]# cat Dockerfile
FROM centos7-base:v1.0
LABEL maintainer="liaolongxuan <root@liaolongxuan.com>"
ADD nginx-1.16.1.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.16.1
&& ./configure --prefix=/apps/nginx/
&& make && make install
&& rm -rf /usr/local/src/nginx*
&& useradd -r nginx -s /sbin/nologin -M
COPY nginx.conf /apps/nginx/conf/
COPY index.html /apps/nginx/html/
EXPOSE 80
CMD ["/apps/nginx/sbin/nginx"]
6)编写构建执行脚本
[root@localhost /data/dockerfile/web/nginx]# vim build.sh
#!/bin/bash
TAG=$1
docker build -t nginx-centos7:$TAG .
7)授可执行权限
[root@localhost /data/dockerfile/web/nginx]# chmod +x build.sh
8)执行脚本构建镜像
[root@localhost /data/dockerfile/web/nginx]# ./build.sh v1.0
9)启动
[root@localhost /data/dockerfile/web/nginx]# docker run -d -p 80:80 nginx-centos7:v1.0
10)测试
[ root@localhost ~]# curl 10.0.0.10
Test is nginx
2.写出10个常用的dockerfile 脚本参数及使用说明
答:
FORM:指定基础镜像
RUN:执行shell命令
ADD:可以复制即可以解压缩包
COPY:复制文件
ENV:设置环境变量
CMD:容器启动命令
LABEL:指定镜像元数据,比如,镜像作者,邮箱等信息
EXPOSE:暴露端口
WORKDIR:指定工作目录
USER:指定当前用户
3.请写出dockerfile的分层原理
答:
Dockerfile通常会指定基础镜像,这个可以认为是系统层,复制文件、执行命令等操作时会生成新的镜像层,每层只记录本层所做的更改,而这些层都是只读的,当启动一个容器,Docker 会在最顶部添加读写层,用户在容器内做的所有更改,如写日志、修改、删除文件等,都保存到了读写层内,一般称该层为容器层。