Docker - 镜像,容器,仓库基本介绍
本文参考了Docker从入门到实践
Docker镜像
Docker镜像就是一个只读的模板,例如一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装Apache或用户需要的其他应用程序。
Docker容器
Docker利用容器来运行应用,容器是从镜像创建的运行实例。可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
Docker仓库
仓库是集中存放镜像文件的场所。有时候会被仓库和仓库注册服务器混为一谈,不严格区分。仓库注册服务器上往往存放着多个仓库,每个仓库中有包含了多个镜像,每个镜像有不同的标签。
仓库分为公开仓库和私有仓库两种形式。
Linux安装Docker:
yum install docker
安装之后启动Docker服务,并让它随系统启动自动加载
service docker start
chkconfig docer on
Docker镜像
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会从镜像仓库下载。
可以使用docker pull命令从仓库获取所需要的镜像。
docker pullregistry.hub.docker.com/Ubuntu:12.04 从注册服务器registry.hub.docker.com的ubuntu仓库下载标记为12.04的镜像。
docker run –t –I Ubuntu:12.04 /bin/bash 创建一个容器,让其运行bash应用。
docker images 显示本地已有的镜像
docker commit 提交更新后的副本
docker build 生成镜像
dokcer tag 修改镜像标签
docker push 将自己创建的镜像上传到仓库
docker save 导出镜像到本地文件
docker load 从导出的本地文件中再导入到本地镜像库
dokcer rmi 移除本地镜像 删除本地镜像需要先用docker rm删除依赖这个镜像的所有容器
Docker镜像是怎么实现增量的修改和维护的?每个镜像都由很多层次构成,Docker使用UnionFS 将这些不同的层结合到一个镜像中去。
union文件系统(unionFS)是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
union文件系统是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具有应用镜像
另外,不同docker容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率
Docker中使用的AUFS 就是一种union FS。 AUFS支持为每一个成员目录(类似git的分支)设定 只读,读写,写出 权限,同时AUFS里有一个类似分层的概念,对只读权限的分支可以逻辑上进行增量的修改(不影响只读部分)
Docker目前支持的union文件系统种类包括AUFS,btrfs,vfs和DeviceMapper。
Docker容器
容器是Docker又一核心概念。容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。
dokcer run新建并重启
docker run –t –iubuntu:14.04 /bin/bash :-t让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
当docker run 来创建容器时,docker在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个ip地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
docker start 启动运行一个已经终止的容器
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的,除此之外,并没有其他的资源,可以在伪终端中利用ps或top来查看进程信息。
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。
docker run -d ubuntu:14.04 /bin/sh -c”while true; do echo hello world; sleep 1; done”
docker stop 终止一个运行中的容器
当docker容器中指定的应用终结时,容器也自动终止,比如对之前只启动一个终端的容器,通过exit或ctrl + d来退出终端时,创建的容器立刻终止。
可以使用 docker ps –a 来看到终止状态的容器。
可以使用docker start来重新启动处于终止状态的容器。
也可以使用docker restart来重启一个运行态的容器。
有时候我们需要进入容器进行操作
docker attach是docker自带的命令,但有时候使用attach命令并不方便,多个窗口同时attach到同一个容器的时候,所有的窗口都会同步显示。某个窗口因命令阻塞时,其他窗口也无法执行操作了。
我们也可以使用nsenter命令,在这个时候,需要知道容器的PID:
PID= $(docker inspect —format”{ {.State.Pid }}“
通过这个PID,可以连接到这个容器
nsenter —target $(PID) —mount —uts —ipc—net –pid
docker export 导出本地某个容器。 dockerexport
docker import 将容器快照文件导入为镜像。 Cat xxx.tar | docker import –test/xxx:v1.0
docker rm删除一个处于终止状态的容器。
docker rm –f 删除一个运行中的容器。Docker会发送SIGKILL信号给容器。
仓库
仓库(Repository)是集中存放镜像的地方。
这里需要区分的是注册服务器(Registry)。注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。仓库可以被认为一个具体的项目或目录。比如dl.dockerpool.com/ubuntu,dl.dickerpool.com是注册服务器地址,ubuntu是仓库名。
目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括超过15000的镜像。
docker login:输入用户名,密码和邮箱来完成注册和登录。以后用户的认证信息就保存在本地用户目录的.dockercfg中。
docker search可以进行搜索仓库中的镜像。
docker pull将镜像下载到本地。
docker push将镜像推送到docker hub。
自动创建允许用户通过Docker hub指定跟踪一个目标网站上的项目,一旦项目发生新的提交,则自动执行创建。当然,我们也可以手动更新镜像。。。。。
配置自动镜像:
创建并登陆Docker hub,以及目标网站
在目标网站中连接账户到Docker hub
在Docker hub中配置一个自动创建。
选取一个目标网站中的项目(需要含Dockerfile)和分支
指定Dockerfile的位置,并提交创建。
我们有时候可能需要创建一个本地仓库给私人使用。
docker-registry是官方提供的高工具,可以用于构建私有的镜像仓库。
我们也可以本地安装docker-registry来安装存储仓库。
docker tag:标记镜像
Docker 的 Registry利用配置文件提供了一些仓库的模板,用户可以直接使用它们来进行开发或生产部署。
在config-sample.yml中,可以看到一些现成的模板段:
还没有评论,来说两句吧...