马哥博客作业第十周

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 会在最顶部添加读写层,用户在容器内做的所有更改,如写日志、修改、删除文件等,都保存到了读写层内,一般称该层为容器层。

原文地址:https://www.cnblogs.com/xuanlv-0413/p/13437165.html