docker核心概念(镜像、容器、仓库)及基本操作
概要
docker是一种linux容器技术。容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求。可简单理解为一种沙盒 。每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,资源需求远远低于虚拟机。
好处
能高效地构建应用。
对于运维开发来说,
能快速的交付和部署
高效的资源利用
轻松的迁移扩展
简单的更新管理
与虚拟机的比较
docker与虚拟化
虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存等抽象、转化后呈现出来,使用户以更好的方式来应用这些资源。虚拟化目标往往是为了在同一个主机上运行多个系统或者应用,从而提高资源的利用率,降低成本,方便管理及容错容灾。
操作系统级的虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。docker以及其他容器技术就属于此范畴。
传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。而docker容器是在操作系统层面上实现虚拟化,直接复用本地主机操作系统,更加轻量。
docker核心概念
镜像(Image)
容器(Container)
仓库(Repository)
镜像:类似虚拟机镜像
容器:类似linux系统环境,运行和隔离应用。容器从镜像启动的时候,docker会在镜像的最上一层创建一个可写层,镜像本身是只读的,保持不变。
仓库:每个仓库存放某一类镜像。
容器、仓库、镜像运行关系图:
docker的安装以及镜像,容器,仓库的基本操作
docker的安装(centos7中可以直接yum安装)
yum install –y docker
更新需要自行通过源码安装,或者下载二进制文件安装。
镜像
# 搜索镜像
docker search <image> # 在docker index中搜索image
--automated=false 仅显示自动创建的镜像
--no-trunc=false 输出信息不截断显示
-s 0 指定仅显示评价为指定星级的镜像
# 下载镜像
docker pull <image> # 从docker registry server 中下拉image
还可通过指定标签下载某镜像
docker pull [:TAG]
docker pull centos:7
# 查看镜像/删除
docker images: # 列出images
docker images -a # 列出所有的images(包含历史)
docker ps -a #列出本机所有容器
docker rmi <image ID>: # 删除一个或多个image
# 存出和载入镜像
存出本地镜像文件为.tar
docker save -o ubuntu_14.04.tar ubuntu:14.04
导入镜像到本地镜像库
docker load --input ubuntu_14.04.tar或者
docker load < ubuntu_14.04.tar
# 上传镜像
用户在dockerhub网站注册后,即可上传自制的镜像。
docker push NAME[:TAG]
容器
容器是镜像的一个运行实例,不同的是它带有额外的可写层。
可认为docker容器就是独立运行的一个或一组应用,以及它们所运行的必需环境。
# 创建(使用镜像创建容器):
首先得查看镜像的REPOSITORY和TAG
docker run -i -t REPOSITORY:TAG (等价于先执行docker create 再执行docker start 命令)
其中-t选项让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开。若要在后台以守护态(daemonized)形式运行,可加参数-d
在执行docker run来创建并启动容器时,后台运行的标准包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
- 从宿主机配置的网桥接口中桥接一个虚拟接口到容器
- 从地址池配置一个ip地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
docker start/stop/restart <container> #:开启/停止/重启container
# 进入容器:
docker attach [container_id] #连接一个正在运行的container实例(即实例须为start状态,可以多个 窗口同时attach 一个container实例),但当某个窗口因命令阻塞时,其它窗口也无法执行了。
exec可直接在容器内运行的命令。docker exec -ti [container_id] /bin/bash
# 删除容器:
docker rm <container...> #:删除一个或多个container
docker rm `docker ps -a -q` #:删除所有的container
docker ps -a -q | xargs docker rm #:同上, 删除所有的container
docker -rm
-f 强制中止并运行的容器
-l 删除容器的连接,但保留容器
-v 删除容器挂载的数据卷
# 修改容器:
docker commit <container> [repo:tag] # 将一个container固化为一个新的image,后面的repo:tag可选。
# 导入和导出容器:
导出到一个文件,不管是否处于运行状态。
docker export CONTAINER > test.tar
导入为镜像:
cat test.tar | docker import - centos:latest
仓库
仓库是集中存放镜像的地方。每个服务器上可以有多个仓库。
仓库又分为公有仓库(DockerHub、dockerpool)和私有仓库
DockerHub:docker官方维护的一个公共仓库https://hub.docker.com,其中包括了15000多个的镜像,大部分都可以通过dockerhub直接下载镜像。也可通过docker search和docker pull命令来下载。
DockerPool:国内专业的docker技术社区,http://www.dockerpool.com也提供官方镜像的下载。
docker私有仓库的搭建:
192.168.2.189 仓库
192.168.2.201 客户端
1.先拉取registry镜像(用来启动仓库)和busybox镜像(用来上传)
docker pull registry
docker pull busybox
我这里下载的是registry 2
2.使用docker tag命令将这个镜像标记为192.168.2.189:5000/busybox
docker tag IMAGR[:TAG] NAME[:TAG]
docker tag docker.io/busybox 192.168.2.189:5000
3.修改docker配置文件,增加参数 --insecure-registry=192.168.2.189:5000
此处的参数指定为非安全模式,也就是http而不是https,然后重启docker服务。
4.创建registry容器并启动
docker run -d -p 5000:5000 --privileged=true -v /myregistry:/var/lib/registry registry
–privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: '/tmp/registry/repositories/liibrary')或者(Received unexpected HTTP status: 500 Internal Server Error)错误
-v选项指定将/myregistry/目录挂载给/var/lib/registry/,/tmp/registry是registry版本1的仓库目录。
/myregistry为本地创建的目录。
5.把本地标记的镜像push到仓库
docker push 192.168.2.189:5000/busybox
6.查看本地目录/myregistry以及在客户端上pull刚才push的镜像
客户端在pull之前也需要修改配置文件指定仓库,也和上面一样添加参数--insecure-registry=192.168.2.189:5000,然后重启docker。
7.也可以通过registry v2 api来查看push的镜像是否存在于仓库
GET /v2/_catalog检索列出所有存储库(Listing Repositories),也就是存储在库中的镜像。
docker核心概念(镜像、容器、仓库)及基本操作的更多相关文章
- Docker概念学习系列之Docker核心概念之容器container
不多说,直接上干货! Docker 利用容器来运行应用. 容器是从镜像创建的运行实例. 它可以被启动.开始.停止.删除.每个容器都是相互隔离的.保证安全的平台. 可以把容器看做是一个简易版的 Linu ...
- Docker 核心概念、安装、端口映射及常用操作命令,详细到令人发指。
Docker简介 Docker是开源应用容器引擎,轻量级容器技术. 基于Go语言,并遵循Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...
- Docker 镜像 容器 仓库
Docker 包括三个基本概念镜像(Image)容器(Container)仓库(Repository) Docker 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资 ...
- docker核心概念与配置安装
一.Docker的三大核心概念: 镜像(image) 容器(container) 仓库(repository) 1.Docker镜像类是与虚拟机镜像,可以把它理解为一个只读的模板. 不仅仅是操作系统 ...
- 后端技术杂谈9:先搞懂Docker核心概念吧
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- docker 批量删除 镜像 容器
我们在docker构建和测试时,经常会产生很多无用的镜像或者容器,我们可用如下两条命令一个一个删除. docker container rm 容器id #删除容器 可简写: docker rm 容器i ...
- Docker概念学习系列之Docker核心概念之镜像Image
不多说,直接上干货! 说明: Docker 运行容器之前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户 ...
- Docker概念学习系列之Docker核心概念之仓库Repository
不多说,直接上干货! Docker仓库 仓库(Repository)是集中存放镜像的地方,分公共仓库和私有仓库. 仓库是集中存放镜像文件的场所. 有时候会把仓库和仓库注册服务器(Registry)混为 ...
- 核心概念 —— 服务容器
1.简介 Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具.依赖注入听上去很花哨,其实质是通过构造函数或者某些情况下通过 set 方法将类依赖注入到类中. 让我们看一个简单的例子: ...
随机推荐
- NIO 学习笔记一
Java NIO 由以下几个核心部分组成: ChannelsBuffersSelectors Channel 和 Buffer 基本上,所有的 IO 在NIO 中都从一个Channel 开始.Chan ...
- Python 练习: 简单角色游戏程序
要求: 1.创建三个游戏人物,分别是: 苍井井,女,18,初始战斗力1000 东尼木木,男,20,初始战斗力1800 波多多,女,19,初始战斗力2500 2.游戏场景,分别: 草丛战斗,消耗200战 ...
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...
- 函数节流scroll,兼容火狐滚轮事件
//函数节流 var wheelTimeout; var wheelFun = function (func) { if (wheelTimeout) { return; } func(); whee ...
- C# 6 元组应用 Part 1:方便的字典工厂方法
首先是简单的实现: public static class CollectionExtensions { public static IDictionary<TKey, TValue> M ...
- 不用Visual Studio,5分钟轻松实现一张报表
常规的报表设计,如RDLC.水晶报表等,需要安装Visual Studio,通过VS提供的报表设计界面来设计报表,通过VS设计报表对.NET开发者而言非常方便,但是对于非开发人员,要安装4G的一个VS ...
- Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122 目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...
- Jni 线程JNIEnv,JavaVM,JNI_OnLoad(GetEnv返回NULL?FindClass返回NULL?)
此文章是关于NDK线程的第二篇理论知识笔记.主要有两个点,如下: 1.pthread_create(Too many arguements, expected 1) ?2.线程中如何获取JNIEnv? ...
- 移动端上拉加载,下拉刷新效果Demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 路由交换01-----ICMP协议
路由交换协议------ICMP ICMP协议 ICMP (InternetControl Message Protocol)协议是TCP/IP协议簇的核心协议之一,用来在网络设备之间传递各种差错和控 ...