Docker 入门(二)
分享你的镜像
为了演示我们刚刚创建的东西的可移植性,让我们上传构建的映像并在其他地方运行它。毕竟,当您想要将容器部署到生产环境中时,您需要知道如何推送到注册中心。
注册中心是存储库的集合,而存储库是镜像的集合——有点像GitHub存储库,只是代码已经构建好了。注册中心上的帐户可以创建许多存储库。docker CLI默认使用docker的公共注册表
注意:我们在这里使用Docker的公共注册中心,因为它是免费的,而且是预先配置的,但是有许多公共注册中心可供选择,您也可以使用Docker Trusted registry设置自己的私有注册中心。
使用Docker ID登录到公共注册中心
如果你没有Docker帐户,在hub.docker.com注册一个。记下你的用户名。
在本地计算机上登录到Docker公共注册中心。
$ docker login
镜像标记
将本地镜像与注册中心上的存储库关联的符号是username/repository:tag。标记是可选的,但推荐使用它,因为注册中心使用它来为Docker镜像提供一个版本。为上下文提供存储库和标记有意义的名称,例如get-started:part2。这将镜像放入get-started存储库并将其标记为part2。
现在,把它们放在一起来标签镜像。使用用户名、存储库和标记名称运行 docker tag image
,以便将镜像上传到所需的目的地。该命令的语法为:
docker tag image username/repository:tag
例如:
docker tag friendlyhello gordon/get-started:part2
运行docker image ls
查看新标记的镜像。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
friendlyhello latest d9e555c53008 3 minutes ago 195MB
gordon/get-started part2 d9e555c53008 3 minutes ago 195MB
python 2.7-slim 1c7128a655f6 5 days ago 183MB
...
发布镜像
上传您的标签镜像到存储库:
docker push username/repository:tag
一旦完成,此上传的结果将公开可用。如果您登录到Docker Hub,您将在那里看到带有pull命令的新镜像。
从远程存储库拉出镜像并运行
从现在开始,您可以使用docker run
,在任何机器上运行您的应用程序:
docker run -p 4000:80 username/repository:tag
如果镜像在本地找不到,Docker将从存储库中提取它。
$ docker run -p 4000:80 gordon/get-started:part2
Unable to find image 'gordon/get-started:part2' locally
part2: Pulling from gordon/get-started
10a267c67f42: Already exists
f68a39a6a5e4: Already exists
9beaffc0cf19: Already exists
3c1fe835fb6b: Already exists
4c9f1fa8fcb8: Already exists
ee7d8f576a14: Already exists
fbccdcced46e: Already exists
Digest: sha256:0601c866aab2adcc6498200efd0f754037e909e5fd42069adeff72d1e2439068
Status: Downloaded newer image for gordon/get-started:part2
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
无论docker run
在何处执行,它都会提取您的镜像、Python和所有依赖项。并运行您的代码。它以一个简洁的小程序包的形式运行,您不需要在主机上安装任何东西就可以运行它。
本节命令:
docker build -t friendlyhello . # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyhello # Run "friendlyhello" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyhello # Same thing, but in detached mode
docker container ls # List all running containers
docker container ls -a # List all containers, even those not running
docker container stop <hash> # Gracefully stop the specified container
docker container kill <hash> # Force shutdown of the specified container
docker container rm <hash> # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
docker image ls -a # List all images on this machine
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
docker login # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag # Tag <image> for upload to registry
docker push username/repository:tag # Upload tagged image to registry
docker run username/repository:tag # Run image from a registry