Docker入门
docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。(摘自百度百科)
###自己的理解:为什么要用docker
- 业务分离,比如一个项目中有文件服务器,webUI,Nginx负载均衡和反向代理,其他服务。可以将各个业务分别部署到一个单独的docker容器中,镜像也是分别维护,各自独立。
- 横向扩展,比如文件服务器或者其他服务需要扩展,只需要多起几个相同的容器,进行相关配置,即可满足增加的需求。当负载变低时,又可以将多余的容器停止。
- 部署方便,使用k8s(kubernetes)对各个业务容器分别部署,各自有独立的配置文件,配置脚本。维护镜像也是独立的。
Docker安装
CentOS6
yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
yum install docker-io
CentOS7(库中已带Docker)
yum install docker
###启动Docker
service docker start
chkconfig docker on
Docker三个基本概念
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
镜像
Docker镜像就是一个只读模板,一般是在一个操作系统的基础上,只安装了某一个应用。Docker镜像用来创建Docker容器。
容器
Docker容器是运行应用的环境,从镜像创建的实例。(就像根据类new一个对象一样,根据镜像run一个容器),容器实际上就是一个精简的Linux环境,只有少量的应用程序。
仓库
仓库是存放镜像文件的场所,可以使用公共的仓库,也可以使用本地自己建立的仓库。每个仓库中存放这多个镜像,每个镜像有id、tag等属性。和git一样上传使用push命令,获取使用pull命令。
##Docker常用命令
功能 | 命令 |
---|---|
获取镜像 | docker pull 镜像地址 |
上传镜像 | docker push 镜像 |
创建容器 | docker run -it 镜像 命令(/bin/bash等) |
显示镜像 | docker images |
保存镜像到本地 | docker save -o 目标文件 |
往镜像中导入文件 | docker load --input 文件 |
在启动的容器中添加应用 | gem install 应用名,然后exit,然后docker commit提交新的镜像,可以跟-m描述信息,-a指定用户信息 后面跟上源镜像的id(需要预先记住) |
移除docker镜像 | docker rmi 镜像(需要预先删除依赖于该镜像的容器docker rm 容器) |
启动终止的容器 | docker start 容器 |
终止启动的容器 | docker stop 容器 |
查看容器中的进程 | docker ps |
查看容器输出信息 | docker logs 容器 |
进入docker容器后就像操作一台linux一样,可以使用装好的应用。
###利用dockerfile创建镜像
新建一个dockerfile,包含多条指令:
From指令告诉Docker基于哪个镜像来创建新的镜像
Maintainer Docker 指定维护者信息
Run 跟shell命令
编写完dockerFile之后,可以使用docker build来生成镜像
docker build -t=“tag信息” dockerfile的路径