Docker(八)手动制作镜像

Docker 镜像与制作

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

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

手动制作 yum 版 nginx 镜像

Docker 制作类似于虚拟机的镜像制作,即按照公司的实际业务务求将需要安装的软件、相关配置等基础环境配置完成,然后将其做成镜像,最后再批量从镜像批量生产实例,这样可以极大的简化相同环境的部署工作, Docker 的镜像制作分为手动制作和自动制作(基于 DockerFile), 企业通常都是基于 Dockerfile 制作精细, 其中手动制作镜像步骤具体如下:

下载镜像并初始化系统:
基于某个基础镜像之上重新制作, 因此需要先有一个基础镜像,本次使用官方提供的 centos 镜像为基础:

  1. docker下载centos镜像,并运行进入
docker pull centos
docker run -it docker.io/centos /bin/bash
  • 进入容器
  1. 进入容器后,更改yun源
yum install wget -y
cd /etc/yum.repos.d/
rm -rf ./*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  1. yum安装nginx与常用工具
yum install nginx –y 
yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
  1. 修改nginx配置,关闭后台运行
vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
daemon off; 
  1. 自定义 web 页面
echo "Docker Yum Nginx" > /usr/share/nginx/html/index.html
  • 退出容器
  1. 提交为镜像:在宿主机基于容器 ID 提交为镜像
docker commit -a "chen" -m "nginx_yum_v1" --change="EXPOSE 80 443" 06b28abe9c04 centos-nginx:v1

在这里插入图片描述

带 tag 的镜像提交:
提交的时候标记 tag 号:
标记 tag 号,生产当中比较常用,后期可以根据 tag 标记创建不同版本的镜像以及创建不同版本的容器。

docker commit -m "nginx image" f5f8c13d0f9f jack/centos-nginx:v1
  1. 查看创建的镜像
docker image ls

在这里插入图片描述

  1. 从自己镜像启动容器
docker run -d -p 80:80 --name my-centos-nginx ee9c05bbbb6d /usr/sbin/nginx

ee9c05bbbb6d是IMAGE ID

  1. 访问测试
    在这里插入图片描述

发布了254 篇原创文章 · 获赞 346 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_42758707/article/details/100743636