三、镜像制作
此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机 的内核,而镜像本身则只提供相应的 rootfs,即系统正常运行所必须的用户空间 的文件系统,比如/dev/,/proc,/bin, /etc 等目录,所以容器当中基本是没有/boot 目录的,而/boot 当中保存的就是与内核相关的文件和目录。 也不会涉及到硬件驱动,因此也用不上内核和驱动。
3.1:手动制作yum版nginx镜像
在宿主机 docker pull centos:7.7.1908 docker run -it -p 80:80 centos:7.7.1908 在容器里 [root@8c7a3f362bd6 /] yum install epel-release -y yum install nginx vim net-tools -y vim /etc/nginx/nginx.conf 添加daemon off rm -rf /usr/share/nginx/html/index.html echo lou > index.html 不要exit 更换窗口 在宿主机基于容器 ID 提交为镜像 root@ubuntu:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c7a3f362bd6 centos:7.7.1908 "/bin/bash" 11 minutes ago 带 tag 的镜像提交: root@ubuntu:~# docker commit -a "loufangyi 895320177@qq.com" -m "nginx 1.16.1" 8c7a3f362bd6 centos-nginx:1.16.1 sha256:e440a6085a7febb0e2a8381e113402406cfc6a716773a46790f49cfc43bc1385 root@ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-nginx 1.16.1 e440a6085a7f 23 seconds ago 444MB 从自己镜像启动容器 docker run -it -p 8080:80 centos-nginx:1.16.1 nginx
测试:
3.2:手动制作编译版本 nginx 1.16.1 镜像
过程为在 centos 基础镜像之上手动编译安装 nginx,然后再提交为镜像。
下载镜像并初始化系统
基于正在运行的容器 yum install -y vim wget tree lrzsz gcc gccc++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop #安装基础包 cd /usr/local/src/ wget http://nginx.org/download/nginx-1.16.1.tar.gz tar xvf nginx-1.16.1.tar.gz cd nginx-1.16.1 ./configure --prefix=/apps/nginx make && make install 在宿主机提交为镜像 docker commit -a "loufangyi 895320177@qq.com" -m "make-nginx 1.16.1" c1fcfd739c16 centos-nginx:v1 REPOSITORY TAG IMAGE ID CREATED SIZE centos-nginx v1 afe839689cf2 54 seconds ago 452MB 从自己的镜像启动容器: docker run -it -p 8008:80 centos-nginx:v1 /apps/nginx/sbin/nginx "-g daemon off"
3.3:DockerFile 制作编译版 nginx 1.16.1 镜像
首先在宿主机
创建并进入到指定的 Dockerfile目录 root@ubuntu:/opt/dockerfile# ll total 1296 drwxr-xr-x 5 root root 4096 Feb 18 21:27 ./ drwxr-xr-x 4 root root 4096 Feb 18 20:30 ../ -rw-r--r-- 1 root root 623 Feb 18 21:27 Dockerfile #生成的镜像的时候会在执行命 令的当前目录查找 Dockerfile 文件,所以名称不可写错,而且 D 必须大写 -rw-r--r-- 1 root root 1032630 Aug 14 2019 nginx-1.16.1.tar.gz drwxr-xr-x 2 root root 4096 Feb 18 21:14 picture/ -rw-r--r-- 1 root root 262535 Feb 18 21:18 picture.zip drwxr-xr-x 5 root root 4096 Feb 18 20:30 system/ drwxr-xr-x 6 root root 4096 Feb 18 20:30 web/
编写 Dockerfile
#"#"为注释,等于 shell 脚本的中#
FROM centos:7.7.1908 #第一行先定义基础镜像,后面的本地有效的镜像名,如果本地没有会从远程仓库下载,第一行很重要 #MAINTAINER fangyilou 123456@qq.com LABEL maintainer="loufangyi <123456@qq.com>" #镜像维护者的信息 ENV password 123456 #设置容器变量,常用于想容器内传递用户密码 RUN yum install -y epel-release && yum install -y vim wget unzip gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop #执行的命令 ADD nginx-1.16.1.tar.gz /usr/local/src #ADD自动解压压缩包 RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && rm -rf nginx-1.16.1 ADD picture.zip /apps/nginx/html RUN cd /apps/nginx/html && unzip picture.zip && rm -rf picture.zip EXPOSE 80 443 CMD ["/apps/nginx/sbin/nginx", "-g", "daemon off;"] #运行的命令,每个 Dockerfile 只能有一条, 如果有多条则只有最后一条被执行
执行镜像构建:
root@ubuntu:/opt/dockerfile# docker build -t nginx:v3 .
查看是否生成本地镜像:
root@ubuntu:/opt/dockerfile# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v3 91f34176bd3d 42 minutes ago 514MB
从镜像启动容器:
ot@ubuntu:/opt/dockerfile# docker run -it -p 8888:80 nginx:v3
测试: