docker镜像与制作基于手动YUM安装nginx及编译安装nginx并提交镜像(小节5)

211 阅读4分钟

Docker 镜像与制作

Docker 镜像有没有内核?

从镜像大小上面来说,一个比较小的镜像只有十几MB,而内核文件需要一百多兆,因此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的rootfs,即系统正常运行所必须的用户空间的文件系统,比如/dev/,/proc,/bin,/etc等目录,所以容器当中基本是没有/boot目录的,而/boot当中保存的就是内核相关的文件和目录。

为什么没有内核?

由于容器启动和运行过程中是直接使用了宿主机的内核,所以没有直接调用过物理硬件,所以也不会涉及到硬件驱动,因此也用不上内核和驱动,另外有内核的那是虚拟机。

实验一:yum安装nginx镜像

  1. 下载官方Centos 基础镜像
~# docker pull centos:7.7.1908
  1. 启动为容器
~# docker run -it -p 80:80 centos:7.7.1908 bash
  1. 在容器安装EPEL和Nginx
#安装epel源
ed86315ef22c /]# yum install epel-release -y
#安装nginx、及常用命令
ed86315ef22c /]# yum install zip unzip gcc wget iproute openssl openssl-devel pcre pcre-devel iotop zlib zlib-devel vim net-tools -y
ed86315ef22c /]# yum install nginx -y
  1. 生成自定义web页面 '/usr/share/nginx/html/index.html',无法保存需要删除源链接文件
#进到目录
ed86315ef22c html]# pwd
/usr/share/nginx/html
#删除
ed86315ef22c html]# rm -rf index.html
#创建新的 index.html
ed86315ef22c html]# cat index.html
linux web1
#进程nginx语法
ed86315ef22c html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#开启nginx
ed86315ef22c html]# nginx

图片.png

  1. 修改配置文件、关闭nginx后台运行
ed86315ef22c html]# vim /etc/nginx/nginx.conf
...
daemon off;    <--
...
  1. 原来窗口不要动、再开一个窗口
~# docker ps
CONTAINER ID   IMAGE             COMMAND   CREATED          STATUS          PORTS                               NAMES
ed86315ef22c   centos:7.7.1908   "bash"    40 minutes ago   Up 40 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   suspicious_satoshi
#                                                  镜像版本                        镜像名称
~# docker commit -a "stao clark_0932@qq.com" -m "nginx 1.20.1" ed86315ef22c centos-nginx:v1.20.1
sha256:a326dc889e662af77fd487d040dc4c731f5f06a554a7ba216fc024174e5d51fb
~# docker images
REPOSITORY     TAG        IMAGE ID       CREATED         SIZE
centos-nginx   v1.20.1    a326dc889e66   2 minutes ago   536MB
centos         7.7.1908   08d05d1d5859   3 years ago     204MB

测试

~# docker run -it -p 8801:80 centos-nginx:v1.20.1 nginx

浏览器查看

图片.png

实验二:编译安装镜像

  1. 下载官方Centos 基础镜像
~# docker pull centos:7.7.1908
  1. 启动为容器
~# docker run -it -p 80:80 centos:7.7.1908 bash
  1. 在容器安装EPEL和Nginx
#安装epel源
f0a23935f2f1 /]# yum install epel-release -y
  1. 安装常用命令
f0a23935f2f1 /]# yum install gcc wget iproute openssl openssl-devel pcre pcre-devel iotop zlib zlib-devel vim net-tools zip unzip -y
  1. 下载镜像
f0a23935f2f1 /]# cd /usr/local/src/
f0a23935f2f1 src]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
  1. 解压缩
f0a23935f2f1 src]# tar xvf nginx-1.18.0.tar.gz
  1. 编译安装
f0a23935f2f1 src]# cd nginx-1.18.0
#安装路径'/apps/nginx'
f0a23935f2f1 nginx-1.18.0]# ./configure --prefix=/apps/nginx
f0a23935f2f1 nginx-1.18.0]# make
f0a23935f2f1 nginx-1.18.0]# make install
  1. 修改测试页面信息
f0a23935f2f1 nginx-1.18.0]# cat /apps/nginx/html/index.html
nginx web2 test
  1. 制作镜像原来窗口不要动、再开一个窗口

9.1. 状态1:nginx.conf没有加'daemon off;'也没有做nginx软链接

~# docker commit -a "stao clark_0932@qq.com" -m "nginx-make 1.18.0" f0a23935f2f1 centos-nginx:v1

~# docker run -it -p 8801:80 centos-nginx:v1 /apps/nginx/sbin/nginx "-g daemon off;" bash

图片.png

9.2. 状态2:有nginx软链接但是没有nginx.conf没有加'daemon off;'

旧窗口

f0a23935f2f1 nginx-1.18.0]# ln -sv /apps/nginx/sbin/nginx /usr/bin/

新窗口

软链接后就不需要写绝对路径了

~# docker commit -a "stao clark_0932@qq.com" -m "nginx-make 1.18.0" f0a23935f2f1 centos-nginx:v2

~# docker run -it -p 8802:80 centos-nginx:v2 nginx "-g daemon off;" bash

图片.png

9.3. 状态3:有nginx软链接和nginx.conf中加'daemon off;'

旧窗口

f0a23935f2f1 nginx-1.18.0]# vim /apps/nginx/conf/nginx.conf
...
daemon off;    <--
...

新窗口

~# docker commit -a "stao clark_0932@qq.com" -m "nginx-make 1.18.0" f0a23935f2f1 centos-nginx:v3

~# docker run -it -p 8803:80 centos-nginx:v3 nginx bash

图片.png