docker镜像管理

随声附和 提交于 2019-11-28 11:03:42

docker镜像
1.image(镜像)包含了启动容器所需要的文件系统及其内容作用,是创建
  并启动容器,特点是分层构建,联合挂载(同时也是构建新镜像的核心)
  容器在运行时,会在当前镜像最上级之上复制出一个可写层,运行完毕
  后,该可写层会被删除;如果将该可写层数据保存,则一个新的镜象就
  构建出来了。
2.镜象的制作方式有基于容器,Dockerfile,Dcoker Hub自动构建(基于Docker
  file制作,将Dockerfile推送到GitHub仓库,通过Webhooks通知Docker HUb,
  以此触发构建,并存入Docker Hub的仓库中)。
3.基于容器创建镜像(容器要储于运行中)
  [root@localhost ~]# docker run --name web-based-busybox -it busybox
    / # ls
  bin   dev   etc   home  proc  root  sys   tmp   usr   var
  / # mkdir -p /data/html
  /data/html # vi index.html
             <h1>build image based container busybox!</h1>
  注:启动一个容器,并创建一个静态网页
  基于运行中的容器创建新镜像(创建过程中最好暂停容器(-p),防止数据丢失)
  [root@localhost ~]# docker commit -p web-based-busybox
  sha256:47505f92891d667c34cb8208f5664da696912fa6f00cb6e3929b2f16f731dbcc
  [root@localhost ~]# docker image ls
    REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
    <none>                                            <none>              47505f92891d        5 seconds ago       1.22MB
    注:创建除了一个新镜像(无标签,无所诉仓库)
    给创建的镜像添加标签
    [root@localhost ~]# docker tag 47505f92891d web:v0.1-1
    [root@localhost ~]# docker image ls
    REPOSITORY                                        TAG                 IMAGE ID            CREATED              SIZE
    web                                               v0.1-1              47505f92891d        About a minute ago   1.22MB
  注:一个镜像可以有多个标签,但是一个标签只能属于一个镜像
  [root@localhost ~]# docker tag web:v0.1-1 web:latest
  [root@localhost ~]# docker image ls
    REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
    web                                               latest              47505f92891d        2 minutes ago       1.22MB
    web                                               v0.1-1              47505f92891d        2 minutes ago       1.22MB
4.再次启动用于创建新镜像的容器(需要删除容器,可以添加--rm让容器运行完自动删除)
  [root@localhost ~]# docker run --name web-based-busybox --rm -it busybox
  / # ls
  bin   dev   etc   home  proc  root  sys   tmp   usr   var
  注:之前创建的/data/html/index.html数据没有(容器运行结束,数据会被删除)
5.通过新镜像启动容器
    [root@localhost ~]# docker run --name web-based-busybox --rm -it web
    / # cat /data/html/index.html
    <h1>build image based container busybox!</h1>
    / #
    注:可以看到修改的数据保留了下来,新镜像创建成功
6.改变镜像启动后默认运行的命令(刚刚创建的镜像默认运行的还是‘sh’)
  [root@localhost ~]# docker commit -a "namespace <test@test.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p web-based-busybox test/web:v0.1-2
  sha256:5530414b24e5d3b2301a06cbe9c37ea853bcf62bce77c68f682ba5e57c1c1161
  [root@localhost ~]# docker image ls
    REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
    test/web                                          v0.1-2              5530414b24e5        8 seconds ago       1.22MB
    查看默认运行的命令
    [root@localhost ~]# docker inspect test/web:v0.1-2
    "Cmd": [
                "/bin/httpd",
                "-f",
                "-h",
                "/data/html"
            ],
7.基于创建好的镜像启动容器
  [root@localhost ~]# docker run --name web-based-busybox --rm test/web:v0.1-2
  绕过容器边界进入容器
  [root@localhost ~]# docker exec -it web-based-busybox /bin/sh
  / # ps
  PID   USER     TIME  COMMAND
    1 root      0:00 /bin/httpd -f -h /data/html
    6 root      0:00 /bin/sh
   12 root      0:00 ps
  查看是否监听80端口
  / # netstat -an | grep 80
  Proto Recv-Q Send-Q Local Address           Foreign Address         State       
  tcp        0      0 :::80                   :::*                    LISTEN
  访问80端口的网页(没有curl命令)
  / # wget -O - localhost
  Connecting to localhost (127.0.0.1:80)
  writing to stdout
  <h1>build image based container busybox!</h1>
   -                    100% |**************************************************************************************|    46  0:00:00 ETA
  written to stdout
  / #
8.镜像打包,可以通过打包镜像发送给需要使用镜像的主机使用
  [root@localhost ~]# docker save -o allweb.tar.gz test/web web:latest busybox
  注:-o 输出路径/包名
  [root@localhost ~]# ls
  allweb.tar.gz
  清理掉现有镜像
  [root@localhost ~]# docker image rm test/web:v0.1-2 web:latest busybox
  [root@localhost ~]# docker load -i allweb.tar.gz
  faeae25afe93: Loading layer [==================================================>]   2.56kB/2.56kB
  Loaded image: test/web:v0.1-2
  Loaded image: web:latest
  Loaded image: busybox:latest
  [root@localhost ~]# docker image ls
  REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
  test/web                                          v0.1-2              5530414b24e5        26 minutes ago      1.22MB
  web                                               latest              47505f92891d        53 minutes ago      1.22MB
  busybox                                           latest              db8ee88ad75f        5 weeks ago         1.22MB

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!