理解了镜像和容器,你就掌握了Docker的80%( 二 )


理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 博主拉取一个centos8镜像 , 镜像名后面不跟版本则表示拉取latest最新的
docker pull centos:centos8
  • 除了官方提供的images镜像外 , 还有第三方的镜像(个人的或者公司的) , 比如搜索wordPress/ target=_blank class=infotextkey>WordPress第一个标记Official的则表示官方提供的 , 如下这种用户名/wordpress的image则表示是个人或者公司的

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 拉取这个人的wordpress images , 由于文件比较多 , 博主这里就不继续下载了

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
4.如何制作一个Base Image
  • 说明一点 , 博主之前在执行docker命令时是在root用户下执行的 , 如博主exit退出root用户 , 使用cdtaogang用户那么每次执行命名docker命令都需要加上sudo就比较麻烦 , 不添加sudo则会提示权限不够

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 将当前cdtaogang用户添加到docker用户组中 , 然后重启docker服务 , 执行docker image ls命令结果还是提示权限不够

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 原因是 , 需要xshell重新远程连接centos即可

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 回到正轨 , 之前博主在centos虚拟机中安装docker时 , 拉取过hello-world基础镜像 , 在这个base image中其实存在一个可执行文件 , 通过docker run 执行这个hello-world基础镜像就会创建一个容器并运行这个容器 , 打印出如下hello from docker这一段话

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 现在就模拟hello-world做一个基础镜像 , 就需要hello world程序 , 可以通过C语言编写一个hello world 将这个hello world编译成一个可执行的二进制文件
【理解了镜像和容器,你就掌握了Docker的80%】mkdir hello-worldcd hello-worldvi hello.c
理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 编译c语言脚本 , 需要安装gcc
sudo yum install gccsudo yum install glibc-static
理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 编译hello.c文件输出为hello可执行文件 , 执行hello文件 , 成功打印

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 通过dockerfile把这个可执行文件打成docker image , 在hello-world目录创建dockerfile文件 , 因为是我们自己创建基础镜像 , 所以FROM字段不以任何镜像为基础 , 写法为FROM scratch , 之前创建的dockerfile文件中FROM字段指定以ubuntu:14.04为基础镜像 , 具体配置如下

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 构建dockerfile文件 , 生成tag为cdtaogang/hello-world的image

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 对比cdtaogang/hello-world镜像与hello-world文件中的hello可执行文件大小 , 差距很小 , 几乎是基于hello可执行文件的大小下创建的image

理解了镜像和容器,你就掌握了Docker的80%

文章插图
 
  • 通过docker history <image id> , 查看构建的cdtaogang/hello-world镜像的分层情况 , 第一层是执行hello文件 , 第二层这是添加文件到指定路径 , 因为FROM 没有指定基础镜像所以该层不显示

理解了镜像和容器,你就掌握了Docker的80%


推荐阅读