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 bash
root@5d74a7fe75fc:/# echo "hello"
hello
另外,有时需要使用镜像代理服务来加速Docker 镜像获取过程 ,可以在Docker服务启动配置中增加--registry-mirror=proxy_URL;
二、查看镜像信息
列出本地镜像 - docker images
docker images [OPTIONS] [REPOSITORY[:TAG]] 等同于:docker image ls
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 5a214d77f5d7 7 days ago 63.1MB
PS C:\> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 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:18
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ubuntu 18 5a214d77f5d7 7 days ago 63.1MB
ubuntu 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.04
IMAGE CREATED CREATED BY SIZE COMMENT
5a214d77f5d7 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 php
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
php 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 ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:9d6a8699fb5c9c39cf08a0871bd6219f0400981c570894cd8cbea30d3424a31f
清理镜像 - docker image prune
使用 Docker 一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理。
PS C:\> docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:cbfb3c41fab474034a5d536676cc0c2c6879b8d56c93776cac1020ec8aa1804a
deleted: 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:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 创建2个文件
root@f5d4da82e6cd:/# touch test_2021_1
root@f5d4da82e6cd:/# touch test_2021_2
root@f5d4da82e6cd:/# exit
exit
# commit 命令提交一个新的镜像。
PS C:\> docker commit -m "added two new file" -a 'huige' f5d4da82e6cd test_commit:0.1
sha256:92b710bcb0d3cdeb2de1af2488a9c8623b945f15457561cff0d3a72f48d84826
# 查看镜像列表
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test_commit 0.1 92b710bcb0d3 6 seconds ago 63.1MB
# 验证 - 用刚新建的镜像启动新容器,查看是否有刚才新建的文件。
PS C:\> docker run -it test_commit:0.1 /bin/bash
root@a1a783bffb5b:/# ls
bin dev home lib64 mnt proc run srv test_2021_1 tmp var
boot etc lib media opt root sbin sys test_2021_2 usr
root@a1a783bffb5b:/#
基于本地模板导入
基于 Dockerfile创建
六、存出和载入镜像
存出镜像 - docker save
参数
-o
可以导出镜像到本地,用户就可以复制导出的镜像文件分享给别人。
C:\Users\1314y\docker-stu>docker save -o golangBak.tar golang:latest
C:\Users\1314y\docker-stu>docker save --help
Usage: 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 --help
Usage: docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
-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 镜像》