初步实践
1、安装
curl -sSL get.docker.com | sh
将当前用户添加到用户组,可以不用再sudo
执行
sudo usermod -aG docker $USER
断开连接后重新登录
2、查看信息
系统信息等
docker info
查看可用镜像
docker search tutorial(for example)
本地镜像
docker images
3、基本命令
下载镜像
docker pull learn/tutorial(for example)
容器中执行命令(注意-y
)
docker run learn/tutorial apt-get install -y ping
得到容器id
docker ps -l
保存对容器的修改(通常选择容器id
的前3-4个字符,如698)
docker commit 698 learn/ping
查看容器的更详细信息
docker inspect 698
发布自己的镜像
docker push learn/ping
执行命令
docker exec -it [container name] [command]
makefile
制作镜像
docker build -t [user]/[name] .
管理工具
portainer
安装
docker pull registry.docker-cn.com/portainer/portainer:linux-arm-1.14.0
mkdir -p ~/portaniner/data
docker run -d --name portainer --restart unless-stopped -p 9000:9000 -v ~/portaniner/data:/data -v /var/run/docker.sock:/var/run/docker.sock registry.docker-cn.com/portainer/portainer:linux-arm-1.14.0
docker-compose
安装pip
sudo apt install python-pip
安装compose
cd
mkdir dockercompose
cd dockercompose
sudo pip install virtualenv
virtualenv dockercompose
source dockercompose/bin/activate
pip install docker-compose
启动compose
docker-compose up -d
安装工具(树莓派暂时没有支持)
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compo
sudo chmod +x /usr/local/bin/docker-compose
实例
docker run -d --name elasticpot --restart always -p 9200:9200 -v /home/pi/log:/opt/ElasticpotPY/log hsdfz0201/elasticpot
集群swarm
1、创建集群
sudo docker swarm init --advertise-addr xxx.xxx.xxx.xxx
2、节点管理(配合portainer)
增加远程api
sudo nano /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
sudo systemctl daemon-reload
sudo service docker restart
在manager节点上安装portainer
sudo docker service create --name portainer --publish 9000:9000 --constraint 'node.role == manager' --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock portainer/portainer -H unix:///var/run/docker.sock
添加endpoint
,在portainer
的图形界面即可
3、swarm技巧(重点)
docker swarm指定节点node运行容器。
这里可以在每个节点打标签,然后设置限制条件。
此处官方的说明异常坑爹!!!
首先打标签
sudo nano /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --label hostname=swarm1
sudo systemctl daemon-reload
sudo service docker restart
下面是重点!!!
label
的键值对存在engine.labels
下面,官网和其他参考资料完全没说!!!
感谢下面这篇博客的作者
https://blog.lab99.org/post/docker-2016-07-14-faq.html#wei-shi-me-swarm-ji-qun-de-overlay-network-kua-su-zhu-wu-fa-hu-fang
在manage
节点执行
xxx@xxx-NF5280M3:~$ sudo docker service create --name test --constraint 'engine.labels.hostname == swarm1' test
4wk88tcegp5nb8x9rqjelmpcu
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
删除集群节点
docker node ls
获取节点列表后
docker node update --availability drain $nodeID
docker node rm --force $nodeID
删除管理节点
docker swarm leave --force
注意
如果出现不能pull
,可能是树莓派时间有误,ssl
证书不认(ntp端口易被封)
请参考
http://shumeipai.nxez.com/2015/06/28/raspberry-pi-date-and-time-correction-method-allowed.html