docker入门-镜像的创建管理和发布

1.镜像的获取方式

  • pull from registry:从registry拉取(online,可以是互联网也可以是内网)
    • public(公有)
    • private(私有):比如在公司内部搭建registry,仅限于公司内部使用。
  • build from Dockerfile:从Dockerfile构建(online)
  • load from file:文件导入(offline)

docker入门-镜像的创建管理和发布_第1张图片

2.镜像的获取查看和删除

  • 镜像的获取:

    docker image pull nginx:获取nginx镜像,不加版本号默认拉取最新版本

    docker image pull nginx:1.20.0:拉取指定版本的镜像

docker入门-镜像的创建管理和发布_第2张图片

  • 镜像的查看:

    docker image ls:查看拉取到本地的镜像

在这里插入图片描述

  • 镜像的删除:

    docker image rm d23:删除指定镜像,rm后面加上IMAGE ID即可

    如果镜像正在被容器使用的时候,该镜像是无法删除的;如果停止该容器但是没有删除容器的话,还是无法删除镜像的。

docker入门-镜像的创建管理和发布_第3张图片

3.镜像的导入导出

  • 如果电脑没有联网,可以尝试从别的主机上导出镜像:

    docker image save nginx:latest -o nginx.image:选择指定版本的镜像(nginx:latest)导出到指定文件(当前目录下的nginx.image)

在这里插入图片描述

  • 然后将该镜像传输到本机并导入:

    docker image load -i ./nginx.image:导入指定目录下的image文件

docker入门-镜像的创建管理和发布_第4张图片

4.Dockerfile介绍

  • Dockerfile是用于构建docker镜像的文件
  • Dockerfile里面包含了构建镜像所需的指令
  • Dockerfile有特定的语法规则

5. 镜像的构建和分享

5.1 镜像的构建:

假如要在一台ubuntu 21.04上运行hello.py(内容是"hello docker"),此时构建一个Dockerfile文件:

  1. 在当前目录下构建需要运行的py文件和Dockerfile文件,Dockerfile文件内容如下:

在这里插入图片描述

  • FROM ubuntu:21.04:选择需要拉取的基础镜像

  • RUN apt-get ....:下载需要的python依赖,和在本机ubuntu系统中下载python依赖一样。

  • ADD hello.py /:将本机上的hello.py文件添加到镜像的根目录中

  • CMD ["python3", "/hello.py"]:相当于执行"python3 /hello.py"命令

  1. 根据Dockerfile去构建镜像:

    docker image build -t hello .:hello表示构建的镜像的名称(没加版本号默认为hello:latest),后面的’.'表示执行的是当前目录下的Dockerfile文件

    此时会出现两个镜像,一个是ununtu21.04的镜像,一个是hello的镜像:

    docker入门-镜像的创建管理和发布_第5张图片

  1. 使用hello镜像去运行一个容器(进程):

    docker run -it hello:以交互式的方式运行容器,此时打印出"hello docker",并且容器会退出。

在这里插入图片描述

5.2 镜像的分享:

和普通镜像一样,可以使用docker image save/load去进行镜像的分享,更方便的方式是通过dockerhub去操作:

  1. 对需要分享的镜像指定tag:

    ①第一种方式是重新build一个image。如果修改了已经存在镜像的tag,尽管tag变化了,但是IMAGE ID不会变化:

docker入门-镜像的创建管理和发布_第6张图片

​ 如果此时执行docker image rm 6b3删除image是不行的,需要加上tag,即执行docker image rm hello:1.0才能删除指定的image

​ ②第二种方式是使用docker image tag hello:1.0 hello:2.0,hello:1.0表示被重新命名的镜像+TAG,hello:2.0表示新的镜像名+TAG

  1. 将镜像push到dockerhub:
    • 首先使用docker login命令并输入dockerhub的账号和密码进行登录
    • 然后使用docker image push pshijie/hello:3.0命令进行push。注意这里的pshijie/hello:3.0是重新指定了名字和tag的镜像,因为需要push到dockerhub的镜像名字前面需要加上此时登录的dockerhub的ID号,否则无法push。

docker入门-镜像的创建管理和发布_第7张图片

完成上述操作后,dockerhub便会出现push好的镜像,之后再进行pull操作即可。

6.通过commit创建镜像

在“镜像的获取方式”一节中,可以看到获取镜像还可以通过Containers进行commit操作实现。

假设使用nginx镜像启动一个容器,然后修改该容器中nginx的index.html,并将此修改保存为一个镜像:

  1. 后台启动nginx的容器。由于没有浏览器显示index.html页面,所以使用curl 127.0.0.1进行验证是否修改成功:

docker入门-镜像的创建管理和发布_第8张图片

  1. 使用docker container exec -it c52 sh进入交互式shell,将nginx的index.html(在容器内的/usr/share/nginx/html下)进行修改。修改完后重新curl 127.0.0.1会出现修改后的网页代码:

docker入门-镜像的创建管理和发布_第9张图片

此时如果将容器删除,再使用nginx镜像创建新的容器,nginx的index.html会重新恢复为原来的页面。

  1. 使用docker container commit c52 pshijie/nginx:2.0创建镜像:c52是被使用创建镜像的容器ID号,后面的是新的镜像名称+TAG

7.参考

https://dockertips.readthedocs.io/en/latest/docker-image.html

你可能感兴趣的