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公共镜像源下载 在这里,我们需要了解:管理和使 ...
随机推荐
- ubuntu16.04安装workbench
sudo dpkg -i mysql-workbench-community-6.3.10-1ubuntu16.04-amd64.deb 报错: Selecting previously unsele ...
- springmvc搭建环境时报No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with name 'spring2'
项目是使用spring MVC (1)在浏览器中访问,后台总报错: No mapping found for HTTP request with URI [/exam3/welcome] in Dis ...
- 关于div一侧固定,另一侧自适应
关于div一侧固定,另一侧自适应,从文字看出 一侧固定:说明有固定长度, 一侧自适应:说明是按比例缩放 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
- 用source函数代替繁冗的R语言打包过程
用source函数代替繁冗的R语言打包过程 经过初级的学习和使用R语言之后我们渐渐的开始动手写自己的R语言小程序,这些小程序因为和自己的工作非常契合而变得通用性不是那么强.因此,要让它们成为一个独立的 ...
- python——读取MATLAB数据文件 *.mat
鉴于以后的目标主要是利用现有的Matlab数据(.mat或者.txt),主要考虑python导入Matlab数据的问题.以下代码可以解决python读取.mat文件的问题.主要使用sicpy.io即可 ...
- Sword STL之仿函数概念介绍
--介绍 函数和类似函数的对象(仿函数)遍布STL.关联容器使用它们来使元素保持有序:find_if这样的算法使用它们来控制它们的行为: 如果缺少它们,那么比如for_each和transform这样 ...
- 字符串分隔 ->连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100 ...
- 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器
对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...
- 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url
第三百二十六节,web爬虫,scrapy模块,解决重复url——自动递归url 一般抓取过的url不重复抓取,那么就需要记录url,判断当前URL如果在记录里说明已经抓取过了,如果不存在说明没抓取过 ...
- 优化 PHP 代码技巧
优化 PHP 代码技巧1. 如果一个方法能被静态,那就声明他为静态的,速度可提高 1/4;2. echo 的效率高于 print,因为 echo 没有返回值,print 返回一个整型;3. 在循环之前 ...