Docker 包括三个基本概念
Image
Container
Repository
用操作系统类比,镜像就是打包好的iso
文件;容器就是用iso
文件安装好的操作系统;仓库就是下载iso
的网站。
所以,使用Docker的第一步,就是用docker pull
下载镜像,通过help
可查看其命令格式
>docker pull --help
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
其中,NAME即镜像名称,包括仓库地址和仓库名:
<域名/IP>[:端口号]
,默认地址是Docker Hub。<用户名>/<软件名>
,在Docker Hub中默认为library
,也就是官方镜像。下面以ubuntu20.04为例:
>docker pull ubuntu:20.04
docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
527f5363b98e: Pull complete
Digest: sha256:f2034e7195f61334e6caff6ecf2e965f92d11e888309065da85ff50c617732b8
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
What's Next?
View summary of image vulnerabilities and recommendations → docker scout quickview ubuntu:20.04
如果是在Windows中报出无法连接的错误,可以打开桌面版Docker之后重试。
由于未给出仓库地址,所以从Docker Hub获取镜像,最终从官方镜像library/ubuntu
仓库中获取标签为20.04的镜像。
下载时列出的哈希串表示每一层ID的前12位,结束后给出完整的哈希摘要,用以保证下载正确。
最后,还贴心第给出了下一步应该做什么的提示,按照指示,来预览一下ubuntu20.04
docker scout quickview ubuntu:20.04
INFO New version 1.2.2 available (installed version is 0.20.0)
level=error msg="Status: login using Docker Desktop or 'docker login' command: no credential found for \"index.docker.io\", Code: 1"
下载完成后,就可以通过run
来启动这个镜像中的指令了,例如
>docker run --rm ubuntu:20.04 cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
cat
是大家熟悉的文本查看指令,可见docker run
的确执行了ubuntu中的程序。其中,run后面的--rm
表示执行完命令后删除容器。
docker run
当然也可以直接进入容器的命令行bash shell
,
>docker run -it --rm ubuntu:20.04 bash
root@b29634ace3cf:/# exit
exit
其中,-it
中的i
表示交互式执行,t
表示进入终端。进入之后什么都没做,用exit
退出了终端。
通过image ls
可以列出镜像,目前只有一个ubuntu20.04。
>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 f78909c2b360 2 weeks ago 72.8MB
通过docker ps -a
可列出所有容器,由于在创建Ubuntu容器时使用了--rm
,所以目前的容器是空的。若重新运行一次Ubuntu,但并不使用--rm
参数,则ps -a
会返回这个容器。
>docker run ubuntu:20.04
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
3f48dfc691b5 ubuntu:20.04 "/bin/bash" 4 seconds ago Exited (0)
若想将其删除,如在运行可先用stop
停止运行,再用rm
删除。
>docker stop 3f48dfc691b5
3f48dfc691b5
>docker rm 3f48dfc691b5
这回再运行ps -a
就不会显示这个容器了。