Docker 运行容器前,需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。
一、获取镜像 - docker pull
Docker pull [选项] name[:tag]
PS C:\> docker pull ubuntu:18.04如果不指定 tag ,则默认下载 latest 标签。下载镜像到本地后,即可随时使用该镜像了, 例如利用该镜像创建一个容器,在其中运行bash应用, 执行打印"Hello World"命令:PS C:\> docker run -it ubuntu:18.04 bashroot@5d74a7fe75fc:/# echo "hello"hello另外,有时需要使用镜像代理服务来加速Docker 镜像获取过程 ,可以在Docker服务启动配置中增加--registry-mirror=proxy_URL;
二、查看镜像信息
列出本地镜像 - docker images
docker images [OPTIONS] [REPOSITORY[:TAG]] 等同于:docker image ls
PS C:\> docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu 18.04 5a214d77f5d7 7 days ago 63.1MBPS C:\> docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEubuntu 18.04 5a214d77f5d7 7 days ago 63.1MB
添加镜像标签 - docker tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
PS C:\> docker tag ubuntu:18.04 my-ubuntu:18PS C:\> docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmy-ubuntu 18 5a214d77f5d7 7 days ago 63.1MBubuntu 18.04 5a214d77f5d7 7 days ago 63.1MB
查看详细信息 - docker inspect
使用 docker inspect 命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:
PS C:\> docker inspect 5a214d77f5d7[{"Id": "sha256:5a214d77f5d747e6ed81632310baa6190301feeb875cf6bf9da560108fa09972","RepoTags": ["my-ubuntu:18","ubuntu:18.04"],"RepoDigests": ["ubuntu@sha256:bfb4cabd667790ead5c95d9fe341937f0c21118fa79bc768d51c5da9d1dbe917"],"Parent": "","Comment": "","Created": "2021-10-01T02:23:24.179667784Z","Container": "20d614d2eca1b5a9ad6d5a56a80efce44096b87ca76a98256eb51f8dbaf7a8d2","ContainerConfig": {"Hostname": "20d614d2eca1","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"bash\"]"],"Image": "sha256:de5a48194cb6a383c018b7c57fa642457688605c5d6d4941db88fecabd225a55","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {}},"DockerVersion": "20.10.7","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["bash"],"Image": "sha256:de5a48194cb6a383c018b7c57fa642457688605c5d6d4941db88fecabd225a55","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": null},"Architecture": "amd64","Os": "linux","Size": 63136384,"VirtualSize": 63136384,"GraphDriver": {"Data": {"MergedDir": "/var/lib/docker/overlay2/28bd3335c7fc8ea083cc8211404157ff189ff01c16f0caddba6a8b8bc621adeb/merged","UpperDir": "/var/lib/docker/overlay2/28bd3335c7fc8ea083cc8211404157ff189ff01c16f0caddba6a8b8bc621adeb/diff","WorkDir": "/var/lib/docker/overlay2/28bd3335c7fc8ea083cc8211404157ff189ff01c16f0caddba6a8b8bc621adeb/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:824bf068fd3dc3ad967022f187d85250eb052f61fe158486b2df4e002f6f984e"]},"Metadata": {"LastTagTime": "2021-10-08T03:17:07.9380777Z"}}]
查看镜像历史 - docker history
既然镜像文件由多个层组成, 那么怎么知道各个层的内容具体是什么呢?这时候可以使用history 子命令, 该命令将列出各层的创建信息。
PS C:\> docker history ubuntu:18.04IMAGE CREATED CREATED BY SIZE COMMENT5a214d77f5d7 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B<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/
PS C:\> docker search phpNAME DESCRIPTION STARS OFFICIAL AUTOMATEDphp While designed for web development, the PHP … 6198 [OK]phpmyadmin/phpmyadmin A web interface for MySQL and MariaDB. 1138 [OK]......
四、删除和清理镜像
删除镜像 - docker rmi 镜像名称[镜像id]
等同于命令:docker image rm 镜像名称 或者 镜像id。
PS C:\> docker rmi ubuntuUntagged: ubuntu:latestUntagged: ubuntu@sha256:9d6a8699fb5c9c39cf08a0871bd6219f0400981c570894cd8cbea30d3424a31f
清理镜像 - docker image prune
使用 Docker 一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理。
PS C:\> docker image pruneWARNING! This will remove all dangling images.Are you sure you want to continue? [y/N] yDeleted Images:deleted: sha256:cbfb3c41fab474034a5d536676cc0c2c6879b8d56c93776cac1020ec8aa1804adeleted: sha256:14c852a41a0317d77b046c1a2e15d150bfb1d05259a35cbf9c35d1a34dd881b8
五、创建镜像
创建镜像有三种方法:
- 基于已有镜像的容器创建;
- 基于本地模板导入;
- 基于 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)提交时暂停容器运行。
实例:
# 启动一个容器PS C:\> docker run -it ubuntu:18.04 /bin/bash# 查看目录下面的文件root@f5d4da82e6cd:/# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# 创建2个文件root@f5d4da82e6cd:/# touch test_2021_1root@f5d4da82e6cd:/# touch test_2021_2root@f5d4da82e6cd:/# exitexit# commit 命令提交一个新的镜像。PS C:\> docker commit -m "added two new file" -a 'huige' f5d4da82e6cd test_commit:0.1sha256:92b710bcb0d3cdeb2de1af2488a9c8623b945f15457561cff0d3a72f48d84826# 查看镜像列表PS C:\> docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest_commit 0.1 92b710bcb0d3 6 seconds ago 63.1MB# 验证 - 用刚新建的镜像启动新容器,查看是否有刚才新建的文件。PS C:\> docker run -it test_commit:0.1 /bin/bashroot@a1a783bffb5b:/# lsbin dev home lib64 mnt proc run srv test_2021_1 tmp varboot etc lib media opt root sbin sys test_2021_2 usrroot@a1a783bffb5b:/#
基于本地模板导入
基于 Dockerfile创建
六、存出和载入镜像
存出镜像 - docker save
参数
-o可以导出镜像到本地,用户就可以复制导出的镜像文件分享给别人。
C:\Users\1314y\docker-stu>docker save -o golangBak.tar golang:latestC:\Users\1314y\docker-stu>docker save --helpUsage: docker save [OPTIONS] IMAGE [IMAGE...]Save one or more images to a tar archive (streamed to STDOUT by default)Options:-o, --output string Write to a file, instead of STDOUT
载入镜像 - docker load
C:\Users\1314y\docker-stu>docker load --helpUsage: docker load [OPTIONS]Load an image from a tar archive or STDINOptions:-i, --input string Read from tar archive file, instead of STDIN-q, --quiet Suppress the load output
七、上传镜像
https://www.yuque.com/docs/share/63ccebc5-e0e6-496b-bcb6-3ed87f7b9fba?# 《[完] 如何发布自己的 dokcer 镜像》
