现在,你创建好了一个镜像,你可以把它分享出去。为了分享镜像,你需要一个Docker的注册中心。默认的注册中心是Docker Hub,这也是你所需要的镜像最主要的来源。
Docker ID
Docker ID可以让你访问Docker Hub,它是全世界最大的Docker镜像仓库。如果你没有,你需要注册一个。
获取示例程序
├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock
创建一个仓库
在上传镜像之前,你需要先在Docker Hub上创建一个仓库。
- 注册或者登录Docker Hub。
- 点击Create Repository按钮
- repository name填入"getting-started",确保Visibility是public的。
- 选择Create
在下图,你可以看到Docker命令的例子,这个命令可以把镜像推入这个仓库。
上传镜像
- 在命令行,执行上面看到的命令。注意,命令需包含你的Docker ID。例如
docker push kebikeren2/getting-started
。
$ docker push <Your Docker ID>/getting-started
The push refers to repository [docker.io/<Your Docker ID>/getting-started]
An image does not exist locally with the tag: <Your Docker ID>/getting-started
失败了!为什么呢?push
命令找不到一个名为*/getting-started*的镜像,你执行docker image ls
命令,也是找不到。
解决这个问题,你需要另外给这个镜像起个名字。
2. 使用docker login -u YOUR-USER-NAME
登录进Docker Hub。
3. 使用docker tag
命令赋予getting-started
一个新的名字。
$ docker tag getting-started <Your Docker ID>/getting-started
- 现在再次执行
docker push
命令。你可以省略tagname
,如果不写,Docker会使用latest
作为tagname
。
$ docker push <Your Docker ID>/getting-started
在一个新的环境中运行程序
现在,你的镜像已经创建并发布到注册中心,试着在一个新的环境中运行程序。下面,我们用Play with Docker来完成。
- 浏览网站Play with Docker。
- 点击Login,然后再下拉列表中选择docker。
- 用你的Docker Hub账号登录,然后点击Start。
- 点击左边栏中的ADD NEW INSTANCE。过一会,会有出现以下页面。
- 在终端中,键入命令。
docker run -dp 0.0.0.0:3000:3000 <Your Docker ID>/getting-started
你会看到镜像被拉了下来,然后马上开始运行。
你可能注意到了这里的命令中,把端口映射到了跟之前不一样的地址。之前映射到宿主机的
127.0.0.1:3000
,现在是0.0.0.0:3000
。
绑定127.0.0.0只是对宿主机的回环接口开放容器的端口。绑定0.0.0.0,就会对宿主机的所有网络接口上开放容器的端口,这就使外部可以访问。
- 点击显示3000的这个按钮,正常情况下,网页就会显示出来。
总结
这篇文章,我们学习了如何共享你创建的镜像。然后,在一个新的环境中运行了这个镜像的一个新的实例。这在CI(持续集成)流水线中很常见,流水线制造镜像,上传镜像,然后生成环境拉取镜像。
下一篇,我们学习如何在容器化程序中持久化数据。