应用场景
- docker镜像一旦构建,就已经一次性完成了应用自动打包、集成。
- 通过统一的docker环境封装,保证应用服务运行环境的一致性。
- docker可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
- 镜像可下载、可复用,docker容器可快速启动等特性,结合容器编排服务可以实现大型分布式部署的弹性伸缩,快速扩展。
1. 注册账号
在Doocker仓库免费注册一个 Docker 账号。
2. 将容器封装为镜像
## 查看已有的镜像
junli@ubuntu16:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5d58a220222 nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04 "/bin/bash" About an hour ago Exited (137) 8 minutes ago anaconda
junli@ubuntu16:~$
## 将NAMES=anaconda的容器打包为镜像,镜像的名字为ubuntu16.04-cuda8-cudnn6-annconda2,版本号为v1.0
junli@ubuntu16:~$ docker container commit anaconda ubuntu16.04-cuda8-cudnn6-annconda2:v1.0
sha256:959c95a916786b636f595aae20f436c25fad7e1967de7b4a3d570d247bcae202
junli@ubuntu16:~$
junli@ubuntu16:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu16.04-cuda8-cudnn6-annconda2 v1.0 959c95a91678 3 minutes ago 4.01GB
nvidia/cuda 8.0-cudnn6-devel-ubuntu16.04 d57da4f50cd1 10 months ago 2.01GB
3. 将打包后的镜像上传到仓库
## 首先,登录到自己的docker仓库
junli@ubuntu16:~$ 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: ***
Password:
WARNING! Your password will be stored unencrypted in /home/junli/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
## 上传
junli@ubuntu16:~$ docker tag ubuntu16.04-cuda8-cudnn6-annconda2:v1.0 jlgao/ubuntu16.04-cuda8-cudnn6-annconda2:v1.0
junli@ubuntu16:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jlgao/ubuntu16.04-cuda8-cudnn6-annconda2 v1.0 959c95a91678 17 minutes ago 4.01GB
ubuntu16.04-cuda8-cudnn6-annconda2 v1.0 959c95a91678 17 minutes ago 4.01GB
nvidia/cuda 8.0-cudnn6-devel-ubuntu16.04 d57da4f50cd1 10 months ago 2.01GB
junli@ubuntu16:~$
junli@ubuntu16:~$ docker push jlgao/ubuntu16.04-cuda8-cudnn6-annconda2:v1.0
4. 查看
总结常用的操作命令:
docker container commit CONTAINER_NAME IMAGE_NAME:TAG -- 将容器打包
docker tag IMAGE_NAME:TAG USERNAME/IMAGE_NAME:TAG -- 标记镜像的版本号
docker push USERNAME/IMAGE_NAME:TAG -- 将镜像上传到Doocker仓库中
# CONTAINER_NAME -- 要打包为镜像的容器名字
# IMAGE_NAME:TAG -- 打包为镜像后,给镜像取得名字:版本号
# USERNAME -- 在Doocker仓库中创建的用户名