docker镜像的操作
2015-01-19 15:33
183 查看
在主机上列出镜像
sudo docker images
每从
Docker Hub下载一个镜像就会启动相对的创建一个容器
在镜像列表中看到三个重要的东西:
来自什么镜像源,例如
ubuntu
每个镜像都有标签,例如
14.04
每个镜像都有镜像ID
运行一个带标签镜像的容器:
sudo docker run -t-i ubuntu:14.04 /bin/bash
如果不指定一个镜像的版本标签,例如你只使用
Ubuntu,Docker将默认使用
Ubuntu:latest镜像
建议使用镜像时指定一个标签
获取一个新的镜像
用docker pull命令来下载
sudo docker pull centos
注:有时候下载比较慢,可以使用国内第三方库下载
sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
查找镜像
可以去网上的查找docker hub 的镜像或者使用命令行
sudo docker search sinatra
可以看到列表中有镜像名称、描述、Stars(衡量镜像的流行度-如果用户喜欢这个镜像他就会点击stars)和官方自动构建镜像状态
Stackbrew维护者官方仓库源,镜像源是自动构建的,可以验证图像的来源和内容
两种类型的镜像,像
ubuntu镜像,我们称它为基础镜像或者根镜像
这些镜像是由docker公司提供建立、验证和支持
还有一种就是用户镜像,例如
training/sinatra
创建自己的镜像
如果公共镜像源中没有想要的镜像,可以跟新镜像或者创建镜像达到目的1.我们可以从已经创建的容器中更新镜像,并且提交这个镜像。
2.我们可以使用
Dockerfile指令来创建一个镜像。
更新一个镜像,首先我们要创建一个我们想更新的容器
sudo docker run -t-i training/sinatra /bin/bash
在我们的容器内添加
json
gem install json
然后通过用
docker commit来提交这个容器
sudo docker commit -m="added json gem" -a="admln" 7cdb7bf497a7 admln/sinatra:v2
注意:root@7cdb7bf497a7: 中7cdb7bf497a7是这个容器的短ID
-m标示是允许我们指定提交的信息,就像你提交一个版本控制,
-a标示允许对我们的更新指定一个用户
admln为新的用户名字,保留了原有的镜像名称sinatra,最后为镜像指定了一个标签 v2
使用Dockerfile
创建镜像
创建一个Dockerfile其中包含一组指令告诉docker如何创建镜像
创建一个目录,并且创建一个
Dockerfile
$ mkdir sinatra $ cd sinatra $ touch Dockerfile
#This is a comment FROM ubuntu:14.04 MAINTAINER admln <admln@example.com> RUN apt-get -qq update RUN apt-get -qqy install ruby ruby-dev RUN gem install sinatra
每一个指令会让镜像创建一个新的层
每个指令前缀都必须大写
使用
#注释
第一个指令
FROM告诉Docker使用哪个镜像源,在这个案例中使用了一个
Ubuntu 14.04基础镜像
使用
MAINTAINER指令指定谁是维护者
最后指定三个
RUN指令,一个
RUN指令在镜像内执行命令。例如安装包
使用
docker build命令和
Dockerfile命令来创建一个镜像
sudo docker build-t="admln/sinatra:v3" ./sinatra/
-t来标示我们的新镜像,用户是
admln、仓库源名称
sinatra、标签是
v3
./sinatra/来指定
Dockerfile
docker做的第一件事是通过你的上下文构建。基本上是目录的内容构建。docker会根据本地的内容来在docker进程中去构建
下一步
Dockerfile一步一步执行命令,每个步骤可以创建一个新的容器,在容器内运行指令并且提交改变,就像早期看到的
docker commit流程,当所有的指令执行完成之后,就会得到
324104cde6ad镜像(有助于标记admln/sinatra:v3),然后所有中间容器会被删除干净
设置镜像标签
以给现有的镜像添加标记,然后提交和构,使用docker tag命令
sudo docker tag3dc27133f65d admln/sinatra:devel
向Docker Hub推送镜像
sudo docker push admln/sinatra
主机中移除镜像
sudo docker rmi training/sinatra
注: sudo docker rm * 为移除容器。
镜像导入
要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建: openvz 的模板下载地址为 templates 。比如,先下载了一个 ubuntu-14.04 的镜像,之后使用以下命令导入:
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
镜像存出
要导出镜像到本地文件sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
镜像载入
可以使用docker load从导出的本地文件中再导入到本地镜像库
sudo docker load --input ubuntu_14.04.tar
或者
sudo docker load < ubuntu_14.04.tar
docker实现增量修改和维护的原理:
每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去
相关文章推荐
- docker对镜像的相关操作
- Docker镜像和容器操作(一)
- 2.docker的使用之镜像的操作
- kubernetes如何要使用用户名和密码登陆harbor以拉取docker镜像,应该如何操作?
- 【二十】Docker-镜像操作
- Docker 快速上手系列(1): 镜像的概念及相关操作
- Docker容器技术介绍(二) --- Docker镜像操作
- Docker 镜像、容器、仓库的概念及基本操作
- (五)Docker镜像管理1之镜像操作
- Docker入门(1)-对镜像的操作
- Docker镜像和容器操作(二)
- docker镜像操作
- Docker快速上手系列(1):镜像的概念及相关操作
- docker镜像基本操作
- Docker入门实战(二)——Docker镜像操作
- Docker-1.相关知识+安装+镜像相关操作
- docker学习笔记3:镜像操作(查找和下载)
- 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作
- docker常用命令总结之安装、镜像、容器基本操作
- 【Docker】Docker入门操作容器和镜像