本文章是在网易云课堂的课程学习中编写,部分图片从网易云课堂ppt引用
【公共仓库Docker Hub】
首先我们来了解一下公共仓库Docker Hub。Docker官方维护了一个公共仓库Docker Hub,大部分镜像都可以在Docker Hub中直接下载。
1、注册登录
在 https://hub.docker.com/ 免费注册一个 Docker 账号
注册好账号后,在某个宿主机上执行 docker login
命令,输入用户名及密码,可以在命令行界面登录 Docker Hub
通过 docker logout
可以退出登录
2、拉取镜像
可以通过docker search
命令来查找官方仓库中的镜像,并利用 docker pull
命令来将它下载到本地。
比如:
docker search tomcat
docker pull tomcat
3、推送镜像
我们也可以在登录后通过 docker push
命令来将自己的镜像推送到 Docker Hub
以下命令中的 dockerId为镜像id,username 替换为自己的 Docker 账号用户名,image:version为镜像名及版本号
docker tag dockerId username/image:version
docker image ls
docker push username/image:version
docker search username
来操作试一下:
4、自动创建
对于需要经常升级的镜像内程序来说,自动创建功能十分方便。
软件发布新版本,一般需要手动更新镜像,而自动创建功能,允许用户通过 Docker Hub 指定跟踪一个目标网站(目前支持 GitHub 或 BitBucket)上的项目。一旦项目发生新的提交或者创建新的标签(tag),Docker Hub 会自动构建镜像并推送到 Docker Hub 中。
要配置自动创建,包括如下的步骤:
- 创建并登录 Docker Hub,以及目标网站
- 在目标网站中连接帐户到 Docker Hub
- 在 Docker Hub 中 配置一个自动创建
- 选取一个目标网站中的项目(需要含 Dockerfile)和分支
- 指定 Dockerfile 的位置,并提交创建
- 之后,可以在 Docker Hub 的 自动创建页面 中跟踪每次创建的状态
【Docker私有仓库】
有时候使用 Docker Hub 公共仓库可能不方便,那么我们可以创建一个本地仓库供私人使用。
1、安装运行 docker-registry
docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。本次构建是基于 docker-registry v2.x 版本。
docker run --name registry -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry registry
使用官方 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下,我们可以通过 -v 参数来将镜像文件存放在本地的指定路径。例如上面的例子将上传的镜像放到本地的 /opt/data/registry 目录
2、在私有仓库上传、搜索、下载镜像
创建好私有仓库之后,就可以使用 docker tag
来标记一个镜像,然后推送它到仓库。格式为:
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]。
例如私有仓库地址为 127.0.0.1:5000,先在本机查看已有的镜像:
docker image ls
2.1 使用 docker tag 将 ubuntu:16.04 这个镜像标记为 127.0.0.1:5000/ubuntu:16.04
docker tag ubuntu:16.04 127.0.0.1:5000/ubuntu:16.04
docker image ls
2.2 使用 docker push
上传标记的镜像
docker push 127.0.0.1:5000/ubuntu:16.04
2.3 用 curl 查看仓库中的镜像
curl 127.0.0.1:5000/v2/_catalog
这里可以看到 {"repositories":["ubuntu"]},表明镜像已经被成功上传了。
2.4 下面我们来试试从私有仓库下载这个镜像,先删除已有镜像,再拉取。
docker image rm 127.0.0.1:5000/ubuntu:16.04
docker pull 127.0.0.1:5000/ubuntu:16.04
docker images
3、注意事项
如果不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库,就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时会发现无法成功推送镜像。
这是因为 Docker 默认不允许非 HTTPS 方式推送镜像,我们可以通过 Docker 的配置选项来取消这个限制。
3.1 Ubuntu 14.04, Debian 7 Wheezy
对于使用 upstart 的系统,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中增加如下内容:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registries=192.168.199.100:5000"
重新启动服务
sudo service docker restart
3.2 Ubuntu 16.04+, Debian 8+, centos 7
对于使用 systemd 的系统,在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在需新建该文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
insecure-registries参数是我们新增的配置
注意:该文件必须符合 json 规范,否则 Docker 将不能启动。
3.3 Windows、Mac
对于 Docker for Windows 、Docker for Mac ,在设置中编辑 daemon.json 增加和上边一样的字符串
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]