Docker应用之镜像
一、Docker包括三个基本概念
1、镜像(Image):Docker镜像是一个只读模板,例如一个镜像可以包含完整的Linux系统环境,里面仅仅安装了Apache或用户其他应用程序;镜像可以用来创建Docker容器,每一次使用命令run一个镜像就是创建一个容器;Docker提供了一个很简单的机制来创建或更新现有镜像,用户甚至可以直接从别处下载一个镜像使用
2、容器(Container):Docker利用容器来运行应用;容器是从镜像创建的运行实例,它可以被启动、开始、停止、删除,每个容器都是相互隔离的,保证安全的平台;可以把容器看做是一个简易版的linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序;注意,镜像是只读的,容器在启动的时候创建一层可写层作为最上层
3、仓库(Repository):仓库是集中存放镜像文件的场所,有时候会把仓库注册服务器(Registry)混为一谈,严格说仓库注册服务器存放在多个仓库,每个仓库又包含多个镜像,每个镜像有不同的标签(tag);仓库分为公开仓库和私有仓库,最大的公开仓库是Docker Hub,用户可以在本地网络创建私有仓库;用户可以通过push将镜像上传到公开或私有仓库,或者通过pull从公开或私有仓库下载镜像
二、镜像
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,docker会从镜像仓库下载(默认从Docker Hub公共仓库下载)
1、获取镜像:如,在Docker Hub公共仓库下载Ubuntu 12.04操作系统
docker pull ubuntu:12.04
其实上面命令等价于
docker pull registry.hub.docker.com/ubuntu:12.04
即从docker hub注册服务器上的ubuntu仓库下载标记为12.04的镜像;如果在docker hub上下载比较慢,可以从其他库下载,如下
docker pull dl.dockerpool.com:/ubuntu:12.04
创建一个交互式容器,运行bash应用
docker run -t -i ubuntu:12.04 /bin/bash
2、列出镜像
docker images
列标题可以看出镜像REPOSITORY仓库,TAG镜像标记,IMAGE ID镜像ID(唯一),CREATED创建时间,SIZE大小
其中UbuntuIMAGE ID一样,说明这两个镜像实际上是同一个镜像,TAG信息来标记来自同一个仓库的镜像版本
创建容器时,如果不指定镜像版本,则默认使用latest标记的版本(本地没有,就要到仓库下载)
3、创建镜像
创建镜像可以从仓库下载更新,也可以利用本地文件系统创建
1)在现有镜像基础上创建新镜像
启动一个容器,然后在里面添加json和gem两个应用
docker run -t -i training/sinatra /bin/bash
gem install json
安装完成后使用exit命令退出,然后用docker commit命令来提交更新后的副本
docker commit -m "Add json gem" -a "Docker Newbee" 836bcab25b1d ouruser/sinatra:v2
如果去掉了:v2,则提交后的TAG为latest,使用dokcer images命令可以查看本地现有镜像
-m 指定提交的说明信息,-a 指定更新的用户信息,再后面是用来创建镜像的容器ID,最后是目标镜像的仓库名和tag信息
2)利用Dockerfile来创建镜像
新建一个目录和Dockerfile
mkdir sinatra
cd sinatra/
touch Dockerfile
vi Dockerfile
Dockerfile文件中的内容如下
# This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
Dockerfile基本语法:1)、使用#来注释,2)、FROM指令告诉Docker使用哪个镜像作为基础,3)、接下来是维护者信息,4)、RUN开头的指令会在创建中执行,比如安装一个软件包
(Dockerfile中创建一个镜像每执行一条指令就创建一个新的容器,最后把中间步骤产生的容器删除掉,规定不能超过127层;可以利用ADD命令复制本地文件到镜像,用EXPOSE命令来向外开放端口,用CMD命令来描述容器启动后运行的程序等,命令如下:
# put my local web site in myApp folder to /var/www
ADD myApp /var/www
# expose httpd port
EXPOSE
# the command to run
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
)
编写完以后可以使用docker build来生成镜像
docker build -t="ouruser/sinatra:v3" .
-t来添加tag,及用户信息,"."是指Dockerfile所在目录,即当前目录
我在第一次执行build时候出现了错误,是RUN后面的命令导致的,所有就删除了,不执行RUN命令,使用查看镜像命令得结果如下
再给镜像重新打一个标签
docker tag bb31 ouruser/sinatra:devel
3)从本地文件系统导入
要从本地文件系统导入一个镜像,可以使用openvz(容器虚拟化的先锋技术)的模板来创建,openvz模板下载地址为templates,在这里面比如下载了一个镜像文件ubuntu-14.04-x86_64-minimal.tar.gz
,之后使用以下命令导入
cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
4)上传镜像,上传到私服或Docker Hub上(Docker Hub需要注册)
docker push ouruser/sinatra上传该库下所有镜像
4、镜像存出、载入和移除
1)、cd ~,切换到home文件夹下,执行下面命令
docker save -o ubuntu_14.04.tar ubuntu:14.04
在home文件夹下查看文件
2)、载入存出的镜像文件
docker load --input ubuntu_14..tar
或
docker load < ubuntu_14..tar
这种方式会导入镜像及其元数据信息(如标签等)
3)移除镜像,移除镜像前要先删掉依赖这个镜像的所有容器
删除所有容器命令
docker rm -f $(docker ps -a -q)
-f 强制,-a 所有,-q 只列出容器ID
移除ubuntu:14.04镜像,然后验证是否移除,然后再载入
docker rmi ubuntu:14.04
5、查看镜像详细信息
docker inspect [ImageID]
Docker应用之镜像的更多相关文章
- Docker的ubuntu镜像安装的容器无ifconfig和ping命令的解决
Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令 解决: apt-get update apt install net-tools # ifconfig apt ...
- 关于Docker官方CentOS镜像无法启动mysqld的总结
很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动. 无法正常启动表现为两种情况: 1> 初始完数据库后,mysqld启动报错 2> syst ...
- 理解docker容器和镜像(layer,ufs)和docker命令解释
博客好文1:http://blog.csdn.net/x931100537/article/details/49633107(理解docker容器和镜像,理解简单,从原理入手,什么是layer,什么是 ...
- 4.docker学习之镜像
镜像 我们知道,我们想在Windows操作系统上跑Linux,需要安装一个虚拟机程序,然后下载一个Linux镜像,在该虚拟机程序中创建一个虚拟机,并使用该镜像安装对应的Linux操作系统,安装好之后, ...
- 容器与Docker简介(四)Docker容器,镜像与 Registries——微软微服务电子书翻译系列
当使用Docker时,开发人员创建一个应用程序或服务,并将其和其依赖关系打包到容器镜像中. 镜像是应用程序或服务及其配置和依赖的静态表示形式. 要运行应用程序或服务,应用程序的镜像将被实例化以创建一个 ...
- docker之NGINX镜像构建
Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:1.作为Web服务器.2.作为负载均衡服务器.3.作为邮件代理服务器.4.安装及配置简单.接下来我们介绍在docker构建ng ...
- Docker 中国官方镜像加速
参考:https://www.docker-cn.com/registry-mirror 通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像.该镜像托管于中国大陆,本 ...
- Docker公共&本地镜像仓库(七)--技术流ken
分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...
- docker简单介绍----镜像和容器管理
docker可以分为三部分:docker镜像 docker仓库 docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...
- docker学习构建镜像---第三章节
一.docker镜像使用 运行docker容器时,使用的镜像如果在本地不存在,docker会自动从docker镜像仓库中下载,默认是从docker hub公共镜像源下载 在这里,我们需要了解:管理和使 ...
随机推荐
- PCL滤波介绍(1)
在获取点云数据时 ,由于设备精度,操作者经验环境因素带来的影响,以及电磁波的衍射特性,被测物体表面性质变化和数据拼接配准操作过程的影响,点云数据中讲不可避免的出现一些噪声.在点云处理流程中滤波处理作为 ...
- SpringMVC深度探险(一) —— SpringMVC前传
在我们熟知的建立在三层结构(表示层.业务逻辑层.持久层)基础之上的J2EE应用程序开发之中,表示层的解决方案最多.因为在表示层自身的知识触角很多,需要解决的问题也不少,这也就难免造成与之对应的解决方案 ...
- 快速掌握Vue.js使用【转】
Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使 ...
- css关于定位那些事情
css绝对定位.相对定位和文档流的那些事 前言 接触html.和css时间也不短了,但每次用div+css布局的时候心里还是有点儿虚,有时候干脆就直接用table算了,很多时候用div会出现些不可预料 ...
- so在genymotation中错误问题
genymotation的android模拟器运行起来非常快,但是有些项目安装到上面不是crash,log一般是so文件调用失败的信息,或则直接提示INSTALL_FAILED_CPU_ABI_INC ...
- 在kali linux之下安装wps之后 报错字体缺失
启动WPS for Linux后,出现提示"系统缺失字体" . 出现提示的原因是因为WPS for Linux没有自带windows的字体,只要在Linux系统中加载字体即可. 第 ...
- 解决DLNA方案的技术框架
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00000950 Http协议 1.NanoHTTPD是一 ...
- c 变量的存储类型auto等(基础知识)和c函数变量
总结 1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别. 2). 对数据型(如整型.字符型等).存储类别指的是数据在内存中存储的方式. 存储方式分为两大类: 静态存储类和动态存储类 ...
- 使用Photoshop实现弹簧字效果
一.准备工作 软件环境:PhotoshopCS6 目的:使用路径实现弹簧字效果 二.实验步骤 1,新建画布 2,背景改为黑色,快捷键 Alt+Delete 3,键入文字,发现文字显示不出来,这时选择左 ...
- Lambda动态排序
private static IList<T> IListOrderBy<T>(IList<T> list, string propertyName) where ...