仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。
一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。例如对于仓库地址 private-docker. com/ubuntu 来说,private-docker.com 是注册服务器地址,ubuntu 是仓库名。
登录/登出仓库
首先,需要在 https://hub.docker.com 免费注册一个 Docker 账号。
通过执行 docker login
命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub。
你可以通过 docker logout
退出登录。执行完登录成功后,会在本地 ~/.docker/config.json 中存储用户的认证信息。
search查找仓库
通过 docker search
命令来查找官方仓库中的镜像。
根据是否为官方提供,可以将镜像资源分为根镜像(官方镜像,仅适用单个单词作为名称)和 docker 用户镜像(由 docker 用户创建并维护,带有用户前缀的镜像)。
> docker search centos --filter=stars=10 # 仅显示收藏数量为 10 以上的镜像
用户可以通过 docker pull
和 docker push
来拉取和上传镜像,具体操作在镜像章节已详解,这里不再赘述。
自动创建
自动创建(Automated Builds)是 Docker Hub 提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像。目前支持 GitHub 或 BitBucket 网站上的项目,当项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:
- 登录 Docker Hub;
- 在 Docker Hub 点击右上角头像,在账号设置(Account Settings)中关联(Linked Accounts)目标网站;
- 在 Docker Hub 中新建或选择已有的仓库,在
Builds
选项卡中选择Configure Automated Builds
; - 选取一个目标网站中的项目(需要含
Dockerfile
)和分支; - 指定
Dockerfile
的位置,并保存。
之后,可以在 Docker Hub 的仓库页面的 Timeline
选项卡中查看每次构建的状态。
第三方镜像市场
国内不少云服务商都提供了 Docker 镜像市场,包括腾讯云、网易云、阿里云等。这里以网易云为例,需要先注册账号登录。
查看镜像
访问 https://c.163yun.com/hub,可以搜索已存在的仓库和存储的镜像,包括 Ubuntu、Java、Mongo、MySQL、Nginx 等热门仓库和镜像。
下载镜像
下载镜像也是使用 docker pull 命令,但是要在镜像名称前添加注册服务器的具体地址。格式为example.com/<namespace>/<repository>:<tag>
。
例如,要下载 Docker 官方仓库中的 node:latest 镜像,可以使用如下命令:
> docker pull hub.c.163.com/library/node:latest
> docker tag hub.c.163.com/library/node:latest node:latest # 更新镜像标签,与官方一致,方便使用
正常情况下,镜像下载会比直接从 Docker Hub 下载快得多。
搭建私有仓库
通过官方提供的 registry 镜像来简单搭建一套本地私有仓库环境。
# 自动从官方下载并启动一个registry容器,创建本地的私有仓库服务
> docker run -d -p 5000:5000 --name registry registry
默认情况下,仓库会被创建在容器的 /var/lib/registry
目录下。你可以通过 -v
参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 /opt/data/registry
目录。
> docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
创建完私有仓库就可以通过 tag 标记一个镜像,并上传到私有仓库。这里我的虚拟机地址是127.0.0.1,所以私有仓库地址为 127.0.0.1:5000。然后上传镜像,删除本地镜像,再次下载,查看。
# 先查看本地已有镜像
> docker images
# 给已有镜像打标
> docker tag hello-world:latest 127.0.0.1:5000/hello-world:latest
# 上传打标镜像
> docker push 127.0.0.1:5000/hello-world:latest
# 查看仓库中的镜像,这里可以看到 {"repositories":["hello-world"]},表明镜像已经被成功上传了
> curl 127.0.0.1:5000/v2/_catalog
# 删除已有镜像,再尝试从私有仓库中下载这个镜像
> docker image rm 127.0.0.1:5000/hello-world:latest
# 拉取私有仓库的hello-world镜像
> docker pull 127.0.0.1:5000/hello-world:latest
# 最后查看
> docker images
如果你不想使用
127.0.0.1:5000
作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如192.168.199.100:5000
这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。 这是因为 Docker 默认不允许非HTTPS
方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制
Ubuntu 16.04+, Debian 8+, centos 7
对于使用 systemd
的系统,请在 /etc/docker/daemon.json
中写入如下内容(如果文件不存在请新建该文件):
{
"registry-mirror": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
其他
对于 Docker Desktop for Windows 、 Docker Desktop for Mac 在设置中的 Docker Engine
中进行编辑 ,增加和上边一样的字符串即可。
to be continue…