Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
本篇文章是实践中使用docker,遇到到的问题并记录下。
首先推荐docker的学习资料
Docker安装
系统Ubuntu 14.04 内核3.13.0-65-generic
不多说直接给出安装命令,如果想源码编译的请上官网下载编译。
1 | apt-get update |
Ok, 安装完成。就是这么简单。检测安装的docker版本。
1 | docker --version |
常用命令
docker安装成功,了解下常用命令。
1 | #启动服务 |
Dockerfile
如何创建自己的docker镜像,当然是写dockerfile了。现在就来写个简单的dockerfile吧。
service是一个linux系统下的可运行文件
1 | #基础镜像库 |
简单的Dockerfile写好了,当然是创建docker image了。
1 | docker build -t <docker image name> <dockerfile path> |
最后,当然是吧docker镜像启动起来
1 | #启动并bash |
Docker Swarm
Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用Go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。
安装Docker-swarm
有三台服务器, 这三台机器创建一个Docker集群 其中 i-238242qix (10.253.101.25) 同时充当swarm manager管理集群
机器名 | Ip | 描述 |
---|---|---|
i-238242qix | 10.253.101.25 | swarm manager |
i-239z31k69 | 10.253.100.20 | |
i-238etvs5t | 10.253.100.229 |
Docker deamon 的监听端口 vim /etc/default/docker
在文件后面添加
1 | DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --graph /mnt/datadisk/docker --storage-driver btrfs" |
--graph
指定docker使用磁盘 --storage-driver
指定文件系统
如果是使用consul配置Docker
1 | DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock -D --cluster-advertise 10.139.52.27:2375 --cluster-store consul://10.139.52.27:8500/swarm --graph /mnt/data/docker --storage-driver btrfs" |
Docker命令
重启 Docker deamon
1 | service docker restart |
安装Docker官方提供的Swarm镜像
1 | docker pull swarm |
运行swarm manager
1 | docker run -d -p 2376:2376 swarm manage -H :2376 --replication --advertise 10.168.10.198:2376 consul://10.168.10.198:8500/swarm |
加入 swarm
1 | docker run -d swarm join --advertise=10.168.10.198:2375 consul://10.168.10.198:8500/swarm |
查看集群信息
1 | docker -H 0.0.0.0:2376 info |
其他
共享主机目录
1 | docker run -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 -i nginx |
持久化
1 | docker create -v /tmp –name cmbdbf dev/file_agent |
删除noneimage
1 | docker rmi $(docker images | grep "^<none>" | awk "{print $3}") |
这里只是列出常用命令,之后会将docker网络问题与docker-compose管理以例子列出