本篇能让你了解到基于容器制作镜像,并把镜像上传到docker hub上

docker采用分层构建机制,最底层为bootfs,是用于系统引导的文件系统,容器启动完后会被卸载以节约内存资源,最底层的称为基础镜像base image,最上层为可写层,其下的均为只读层

启动容器时,docker daemon默认从本地获取镜像,本地不存在时从Registry中下载镜像并保存到本地,用户可自建私有Registry,也可使用官方的Docker Hub,也可使用第三方的Registry

docker官方制作了很多基础镜像,如centos、ubuntu等,用户在这些基础镜像上制作自己的镜像,上传且公开到docker hub

制作镜像有几种方式:
  • 1.Dockerfile,使用docker build命令制作
  • 2.基于容器制作,使用docker commit制作本篇将使用此方式做镜像
  • 3.docker hub automated builds ,用户把Dockerfile文件上传到github,再让docker hub监控github上Dockerfile文件的变化,然后自动构建镜像,也是第一种方式基于Dockerfile的实现

下面将基于容器制作镜像,需要先启动一个容器,然后使用docker commit 命令做成镜像,以busybox作为基础镜像,启动成容器,并进入容器的shell窗口中创建一个html,启动一个httpd服务,把处于此状态的容器做成一个镜像,运行该镜像时就会自动运行httpd服务

语法:docker commit [options] CONTAINER [REGPOSITORY[:TAG]]

  • 1.下载busybox镜像,docker pull busybox
  • 2.让容器处于启动状态,docker run -it --name b1 busybox
  • 3.-it 会默认进入 /bin/bash 窗口,创建一个目录和html文件,mkdir -p /data/html ,vi /data/html/index.html ,输入 < h1>Busybox httpd server.</ h1>
  • 4.再开一个linux连接终端,使用 docker commit -h 查看制作镜像的帮助文档
  • 5.做镜像, docker commit -p b1 (引用b1容器,让b1容器处于暂停状态)
  • 6.查看刚制作的镜像,docker image ls,发现 repostory 与 tag 都为none,因为制作时没有设置repository和tag
  • 7.给容器打标签,docker tag imageId 645906265/httpd:v0.1 (因为没有repostory所以使用 imageId为容器名),还可以再打个新标签,docker tag 645906265/bbhttpd:v0.1 645906265/httpd:v0.2 (有repostory:tag就用)
  • 8.删除镜像时,如果它有多个tag标签,则只会删除当前标签的引用,直到是最后一个引用时则删除镜像,docker image rm 645906265/httpd:v0.2
  • 9.启动刚刚制作的容器, docker run -it --name b2 645906265/httpd:v0.1 ,验证有没有刚刚创建的目录与html文件
  • 10.基于b1容器再次制作镜像,docker commit -p -c ‘CMD [“/bin/httpd” , “-f” , “-h /data/html”]’ b1 645906265/httpd:v0.3 ,启动容器时要默认执行一段命令可使用 -c 命令注入一段CMD指令
  • 11.运行镜像:docker run --name b3 645906265/httpd:v0.3 ,查看容器:docker inspect b3,找到IPAddress ,通过 curl 该IPAddress 可访问html 页面
  • 12.把制作好的镜像push到 docker hub 供他人使用,先在hub.docker.com上登录,https://cloud.docker.com/repository/list ,然后创建一个 repository,创建时默认有登录账户作为前缀,name为httpd,和打包的repository:tag一样(如果没有账户需要注册一个)
  • 13.推送镜像使用 docker push --help,推送前先要登录,docker login --help
  • 14.登录docker hub,docker login -u 645906265 回车,输入密码,成功后会提示 Login Succeeded
  • 15.推送,docker push 645906265/httpd ,不加标签推送会把所有刚刚创建的都推送到docker hub上,如果推送时指定标签,则只推送这个镜像
  • 16.退出登录,docker logout
  • 17.把镜像本地打包成压缩包,然后分发到其他服务器上还原到docker中
    把两个镜像打包:docker save -o myimages.gz 645906265/httpd:v0.1 645906265/httpd:v0.3
    复制到其他主机上,scp myimages.gz node02:/root/
    node02上如果装了 docker ,使用 docker load -i myimages.gz 命令把刚刚打包的镜像文件载入本地

docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出

在hub.docker.com 上搜索 645906265/httpd 就可以搜索到刚刚推送的镜像,其他人可以pull下载使用了

docker网心云下载 网心云docker镜像_推送


docker网心云下载 网心云docker镜像_html_02


docker网心云下载 网心云docker镜像_docker_03