1. Docker 运行容器前,需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

一、获取镜像 - docker pull

Docker pull [选项] name[:tag]

  1. PS C:\> docker pull ubuntu:18.04
  2. 如果不指定 tag ,则默认下载 latest 标签。
  3. 下载镜像到本地后,即可随时使用该镜像了, 例如利用该镜像创建一个容器,在其中运
  4. bash应用, 执行打印"Hello World"命令:
  5. PS C:\> docker run -it ubuntu:18.04 bash
  6. root@5d74a7fe75fc:/# echo "hello"
  7. hello
  8. 另外,有时需要使用镜像代理服务来加速Docker 镜像获取过程 ,可以在Docker服务启动配置中增加--registry-mirror=proxy_URL

二、查看镜像信息

列出本地镜像 - docker images

docker images [OPTIONS] [REPOSITORY[:TAG]] 等同于:docker image ls

  1. PS C:\> docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. ubuntu 18.04 5a214d77f5d7 7 days ago 63.1MB
  4. PS C:\> docker image ls
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. ubuntu 18.04 5a214d77f5d7 7 days ago 63.1MB

添加镜像标签 - docker tag

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

  1. PS C:\> docker tag ubuntu:18.04 my-ubuntu:18
  2. PS C:\> docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. my-ubuntu 18 5a214d77f5d7 7 days ago 63.1MB
  5. ubuntu 18.04 5a214d77f5d7 7 days ago 63.1MB

查看详细信息 - docker inspect

使用 docker inspect 命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:

  1. PS C:\> docker inspect 5a214d77f5d7
  2. [
  3. {
  4. "Id": "sha256:5a214d77f5d747e6ed81632310baa6190301feeb875cf6bf9da560108fa09972",
  5. "RepoTags": [
  6. "my-ubuntu:18",
  7. "ubuntu:18.04"
  8. ],
  9. "RepoDigests": [
  10. "ubuntu@sha256:bfb4cabd667790ead5c95d9fe341937f0c21118fa79bc768d51c5da9d1dbe917"
  11. ],
  12. "Parent": "",
  13. "Comment": "",
  14. "Created": "2021-10-01T02:23:24.179667784Z",
  15. "Container": "20d614d2eca1b5a9ad6d5a56a80efce44096b87ca76a98256eb51f8dbaf7a8d2",
  16. "ContainerConfig": {
  17. "Hostname": "20d614d2eca1",
  18. "Domainname": "",
  19. "User": "",
  20. "AttachStdin": false,
  21. "AttachStdout": false,
  22. "AttachStderr": false,
  23. "Tty": false,
  24. "OpenStdin": false,
  25. "StdinOnce": false,
  26. "Env": [
  27. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  28. ],
  29. "Cmd": [
  30. "/bin/sh",
  31. "-c",
  32. "#(nop) ",
  33. "CMD [\"bash\"]"
  34. ],
  35. "Image": "sha256:de5a48194cb6a383c018b7c57fa642457688605c5d6d4941db88fecabd225a55",
  36. "Volumes": null,
  37. "WorkingDir": "",
  38. "Entrypoint": null,
  39. "OnBuild": null,
  40. "Labels": {}
  41. },
  42. "DockerVersion": "20.10.7",
  43. "Author": "",
  44. "Config": {
  45. "Hostname": "",
  46. "Domainname": "",
  47. "User": "",
  48. "AttachStdin": false,
  49. "AttachStdout": false,
  50. "AttachStderr": false,
  51. "Tty": false,
  52. "OpenStdin": false,
  53. "StdinOnce": false,
  54. "Env": [
  55. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  56. ],
  57. "Cmd": [
  58. "bash"
  59. ],
  60. "Image": "sha256:de5a48194cb6a383c018b7c57fa642457688605c5d6d4941db88fecabd225a55",
  61. "Volumes": null,
  62. "WorkingDir": "",
  63. "Entrypoint": null,
  64. "OnBuild": null,
  65. "Labels": null
  66. },
  67. "Architecture": "amd64",
  68. "Os": "linux",
  69. "Size": 63136384,
  70. "VirtualSize": 63136384,
  71. "GraphDriver": {
  72. "Data": {
  73. "MergedDir": "/var/lib/docker/overlay2/28bd3335c7fc8ea083cc8211404157ff189ff01c16f0caddba6a8b8bc621adeb/merged",
  74. "UpperDir": "/var/lib/docker/overlay2/28bd3335c7fc8ea083cc8211404157ff189ff01c16f0caddba6a8b8bc621adeb/diff",
  75. "WorkDir": "/var/lib/docker/overlay2/28bd3335c7fc8ea083cc8211404157ff189ff01c16f0caddba6a8b8bc621adeb/work"
  76. },
  77. "Name": "overlay2"
  78. },
  79. "RootFS": {
  80. "Type": "layers",
  81. "Layers": [
  82. "sha256:824bf068fd3dc3ad967022f187d85250eb052f61fe158486b2df4e002f6f984e"
  83. ]
  84. },
  85. "Metadata": {
  86. "LastTagTime": "2021-10-08T03:17:07.9380777Z"
  87. }
  88. }
  89. ]

查看镜像历史 - docker history

既然镜像文件由多个层组成, 那么怎么知道各个层的内容具体是什么呢?这时候可以使用history 子命令, 该命令将列出各层的创建信息。

  1. PS C:\> docker history ubuntu:18.04
  2. IMAGE CREATED CREATED BY SIZE COMMENT
  3. 5a214d77f5d7 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
  4. <missing> 7 days ago /bin/sh -c #(nop) ADD file:0d82cd095966e8ee7… 63.1MB

三、搜索镜像 - docker search

docker search [选项] 关键字 https://docs.docker.com/engine/reference/commandline/search/

  1. PS C:\> docker search php
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. php While designed for web development, the PHP 6198 [OK]
  4. phpmyadmin/phpmyadmin A web interface for MySQL and MariaDB. 1138 [OK]
  5. ......

四、删除和清理镜像

删除镜像 - docker rmi 镜像名称[镜像id]

等同于命令:docker image rm 镜像名称 或者 镜像id。

  1. PS C:\> docker rmi ubuntu
  2. Untagged: ubuntu:latest
  3. Untagged: ubuntu@sha256:9d6a8699fb5c9c39cf08a0871bd6219f0400981c570894cd8cbea30d3424a31f

清理镜像 - docker image prune

使用 Docker 一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理。

  1. PS C:\> docker image prune
  2. WARNING! This will remove all dangling images.
  3. Are you sure you want to continue? [y/N] y
  4. Deleted Images:
  5. deleted: sha256:cbfb3c41fab474034a5d536676cc0c2c6879b8d56c93776cac1020ec8aa1804a
  6. deleted: sha256:14c852a41a0317d77b046c1a2e15d150bfb1d05259a35cbf9c35d1a34dd881b8

五、创建镜像

创建镜像有三种方法:

  1. 基于已有镜像的容器创建;
  2. 基于本地模板导入;
  3. 基于 Dockerfile创建;

基于已有容器创建 - docker commit

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container’s changes

Options: -a, —author string Author (e.g., “John Hannibal Smith hannibal@a-team.com“) -c, —change list Apply Dockerfile instruction to the created image 提交的时候执行Dockerfile指令, 包括CMDIENTRYPOINT 但 NVIEXPOSEILABELIONBUILDIUSERIVOLUMEIWORKDIR等 -m, —message string Commit message -p, —pause Pause container during commit (default true)提交时暂停容器运行。

实例:

  1. # 启动一个容器
  2. PS C:\> docker run -it ubuntu:18.04 /bin/bash
  3. # 查看目录下面的文件
  4. root@f5d4da82e6cd:/# ls
  5. bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  6. # 创建2个文件
  7. root@f5d4da82e6cd:/# touch test_2021_1
  8. root@f5d4da82e6cd:/# touch test_2021_2
  9. root@f5d4da82e6cd:/# exit
  10. exit
  11. # commit 命令提交一个新的镜像。
  12. PS C:\> docker commit -m "added two new file" -a 'huige' f5d4da82e6cd test_commit:0.1
  13. sha256:92b710bcb0d3cdeb2de1af2488a9c8623b945f15457561cff0d3a72f48d84826
  14. # 查看镜像列表
  15. PS C:\> docker images
  16. REPOSITORY TAG IMAGE ID CREATED SIZE
  17. test_commit 0.1 92b710bcb0d3 6 seconds ago 63.1MB
  18. # 验证 - 用刚新建的镜像启动新容器,查看是否有刚才新建的文件。
  19. PS C:\> docker run -it test_commit:0.1 /bin/bash
  20. root@a1a783bffb5b:/# ls
  21. bin dev home lib64 mnt proc run srv test_2021_1 tmp var
  22. boot etc lib media opt root sbin sys test_2021_2 usr
  23. root@a1a783bffb5b:/#

基于本地模板导入

基于 Dockerfile创建

六、存出和载入镜像

存出镜像 - docker save

参数 -o 可以导出镜像到本地,用户就可以复制导出的镜像文件分享给别人。

  1. C:\Users\1314y\docker-stu>docker save -o golangBak.tar golang:latest
  2. C:\Users\1314y\docker-stu>docker save --help
  3. Usage: docker save [OPTIONS] IMAGE [IMAGE...]
  4. Save one or more images to a tar archive (streamed to STDOUT by default)
  5. Options:
  6. -o, --output string Write to a file, instead of STDOUT

载入镜像 - docker load

  1. C:\Users\1314y\docker-stu>docker load --help
  2. Usage: docker load [OPTIONS]
  3. Load an image from a tar archive or STDIN
  4. Options:
  5. -i, --input string Read from tar archive file, instead of STDIN
  6. -q, --quiet Suppress the load output

七、上传镜像

https://www.yuque.com/docs/share/63ccebc5-e0e6-496b-bcb6-3ed87f7b9fba?# 《[完] 如何发布自己的 dokcer 镜像》