上一节我们讲了实战项目:docker部署springboot项目,我介绍了镜像的基本操作和镜像的原理以及如何利用docker部署springboot项目,那么有了镜像,我们应该如何更好地存储和分发镜像呢?答案就是今天的主角——Docker 的镜像仓库。
仓库(Repository)是存储和分发 Docker 镜像的地方。镜像仓库类似于代码仓库,Docker Hub 的命名来自 GitHub,Github 是我们常用的代码存储和分发的地方。同样 Docker Hub 是用来提供 Docker 镜像存储和分发的地方。
有的同学可能经常分不清注册服务器(Registry)和仓库(Repository)的概念。在这里我可以解释下这两个概念的区别:注册服务器是存放仓库的实际服务器,而仓库则可以被理解为一个具体的项目或者目录;注册服务器可以包含很多个仓库,每个仓库又可以包含多个镜像。例如我的镜像地址为 docker.io/centos,docker.io 是注册服务器,centos 是仓库名。 它们之间的关系如图 1 所示。
按照类型,我们将镜像仓库分为公共镜像仓库和私有镜像仓库。
公共镜像仓库
公共镜像仓库一般是 Docker 官方或者其他第三方组织(阿里云,腾讯云,华为云等)提供的,允许所有人注册和使用的镜像仓库。
Docker Hub 是全球最大的镜像市场,目前已经有超过 10w 个容器镜像,这些容器镜像主要来自软件供应商、开源组织和社区。大部分的操作系统镜像和软件镜像都可以直接在 Docker Hub 下载并使用。
图 2 Docker Hub 镜像
下面我以 Docker Hub 为例,教你如何使用公共镜像仓库分发和存储镜像。
1、注册 Docker Hub 账号
我们首先访问Docker Hub官网,点击注册按钮进入注册账号界面。
2、创建仓库
注册完成后,我们可以点击创建仓库,新建一个仓库用于推送镜像。
3、push镜像到远程仓库
这里我的账号为 cativen,创建了一个名称为 fishexam2的仓库,创建好仓库后我们就可以推送本地镜像到这个仓库里了。下面我通过一个实例来演示一下如何推送镜像到自己的仓库中。
在推送镜像仓库前,我们需要使用docker login
命令先登录一下镜像服务器,因为只有已经登录的用户才可以推送镜像到仓库。
[root@iZ7xvb2aw7a3ekhvnen6u1Z ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to <https://hub.docker.com> to create one.
Username: cativen
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
<https://docs.docker.com/engine/reference/commandline/login/#credentials-store>
Login Succeeded
使用docker login
命令登录镜像服务器,这时 Docker 会要求我们输入用户名和密码,输入我们刚才注册的账号和密码,看到Login Succeeded
表示登录成功。登录成功后就可以推送镜像到自己创建的仓库了。
使用docker image
命令查看当前服务器存在的镜像。
[root@iZ7xvb2aw7a3ekhvnen6u1Z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fishexam latest bbc5ded42e1a 40 hours ago 631MB
mysql 5.7.31 42cdba9f1b08 2 years ago 448MB
在本地镜像推送到自定义仓库前,我们需要先把镜像“重命名”一下,才能正确推送到自己创建的镜像仓库中,使用docker tag
命令将镜像“重命名”:
[root@iZ7xvb2aw7a3ekhvnen6u1Z ~]# docker tag fishexam cativen/fishexam2
使用docker push
远程推送镜像
[root@iZ7xvb2aw7a3ekhvnen6u1Z ~]# docker push cativen/fishexam2
此时我们查看远程仓库的镜像是否存在
4、使用另外一台服务器查看可行性
使用docker pull
拉取刚刚上传到远程仓库的镜像
[root@racknerd-e0c617 ~]# docker pull cativen/fishexam2
使用docker run
运行镜像
docker run -d -p 8888:8888 --name fishexam-8888 bb
最终的效果