Docker初体验 应用容器引擎

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
本篇文章是实践中使用docker,遇到到的问题并记录下。

首先推荐docker的学习资料

  1. Docker —— 从入门到实践

Docker安装

系统Ubuntu 14.04 内核3.13.0-65-generic
不多说直接给出安装命令,如果想源码编译的请上官网下载编译。

1
2
3
apt-get update

wget -qO- https://get.docker.com/ | sh

Ok, 安装完成。就是这么简单。检测安装的docker版本。

1
docker --version

常用命令

docker安装成功,了解下常用命令。

1
2
3
4
5
6
7
8
9
10
11
12
#启动服务
/bin/systemctl restart docker.service
#登录
docker login registry.rd.fyec.cn
#创建
docker build -t registry.rd.fyec.cn/redis-server .
#运行
docker run -t -i registry.rd.fyec.cn/centos:centos7 /bin/bash
#提交
docker push registry.rd.fyec.cn/virtual_ccb_server
#SSH
docker exec -i -t 8ec02d6b7234 bash

Dockerfile

如何创建自己的docker镜像,当然是写dockerfile了。现在就来写个简单的dockerfile吧。
service是一个linux系统下的可运行文件

1
2
3
4
5
6
7
8
9
10
11
#基础镜像库
from registry.rd.fyec.cn/base:latest

#将service文件添加到docker镜像的/opt目录
ADD service /opt/service

#运行时暴露80端口
EXPOSE 80

#启动后运行/opt/service
CMD /opt/service

简单的Dockerfile写好了,当然是创建docker image了。

1
docker build -t <docker image name> <dockerfile path>

最后,当然是吧docker镜像启动起来

1
2
#启动并bash
docker run -t -i <docker image name> /bin/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-238242qix10.253.101.25swarm manager
i-239z31k6910.253.100.20 
i-238etvs5t10.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
2
3
4
docker create -v /tmp –name cmbdbf dev/file_agent 
docker run -t -i –volumes-from cmbdbf dev/file_agent /bin/bash
echo “I’m not going anywhere” > /tmp/hi
exit

删除noneimage

1
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

这里只是列出常用命令,之后会将docker网络问题与docker-compose管理以例子列出

文章来源