mac本机可以通过docker machine + docker compose的方式部署,也可以通过docker swarm的方式single node部署
本文描述如何在阿里云的虚拟主机上single node的方式部署docker swarm
升级docker
运维给的机子是centos7+docker 1.12, 需要升级到docker 1.13
1.登录阿里云主机
1.1 先连 aliyunhz的vpn
1.2 登录跳板机 ssh -p3299 xxx@$IP
1.3 ssh $EVA_HOSTNAME
2.修改配置文件 解决yum无法联网安装软件包的bug
sudo vi /etc/yum.conf
#注释掉最后proxy相关的行
#proxy=http://
3.升级docker1.12 到 1.13 参考资料1-https://docs.docker.com/engine/installation/linux/centos/#install-docker
3.1 准备工作
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo
yum list docker-engine.x86_64 --showduplicates |sort -r
sudo yum makecache fast
3.2 安装 1.13.1
sudo yum -y install docker-engine-1.13.1-1.el7.centos
报错:
错误:docker-engine conflicts with 2:docker-1.12.5-14.el7.centos.x86_64
错误:docker-engine-selinux conflicts with 2:container-selinux-1.12.5-14.el7.centos.x86_64
3.3 解决冲突
yum list installed |grep docker
docker.x86_64 2:1.12.5-14.el7.centos @xxx-extras
docker-client.x86_64 2:1.12.5-14.el7.centos @xxx-extras
docker-common.x86_64 2:1.12.5-14.el7.centos @xxx-extras
sudo yum -y remove docker.x86_64
sudo yum -y remove docker-client.x86_64
sudo yum -y remove docker-common.x86_64
yum list installed |grep container-selinux
sudo yum -y remove container-selinux.x86_64
3.4 重复3.2 sudo yum -y install docker-engine-1.13.1-1.el7.centos
安装成功
sudo docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:38:28 2017
OS/Arch: linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
部署docker swarm
参考资料2-Run Docker Engine in swarm mode https://docs.docker.com/engine/swarm/swarm-mode/
参考资料3-swarm 路由配置 https://docs.docker.com/engine/swarm/ingress/
4.1 创建swarm
$ sudo docker swarm leave -f
#多ip的机子, swarm init 必须指定--advertise-addr参数 本机的公网ip是121.*.*.*
$ sudo docker swarm init --advertise-addr $(ifconfig |grep inet |grep -v inet6|grep 121| awk '{print $2}')
Swarm initialized: current node (k0jikwapsoy31kja5sx9svz55) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-271fkt35jk35i7akrznc379yffardv1kfsdrzc6111exbe1fai-25uuohjxi6k450p4xw0e2swvw \
10.117.24.180:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
k0jikwapsoy31kja5sx9svz55 * $HOSTNAME Ready Active Leader
4.2 创建overlay network
$ docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
eva-sandbox
4.3从仓库拉取最新image
#登录远程仓库
$ sudo docker login https://$REPO_ADDR/
Username:
Password:
#pull image
$ sudo docker pull $REPO_ADDR/eva-api
$ sudo docker pull $REPO_ADDR/eva-web
$ sudo docker pull $REPO_ADDR/eva-mysql
sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
$REPO_ADDR/eva-web latest e359aca3bd6e 3 days ago 593 MB
$REPO_ADDR/eva-mysql latest d7c0644118a2 3 days ago 406 MB
$REPO_ADDR/eva-api latest eefe12d7c2cf 3 days ago 485 MB
4.4 创建service
$ sudo docker service create \
--with-registry-auth \
--replicas 1 \
--name eva-web \
--network eva-sandbox \
--publish 80:8087 \
--env SERVER=$(sudo docker network inspect eva-sandbox|grep \"IP\":|awk -F"\"" '{print $4}') \
$REPO_ADDR/eva-web
$ sudo docker service create \
--with-registry-auth \
--replicas 1 \
--name eva-mysql \
--network eva-sandbox \
$REPO_ADDR/eva-mysql
$ sudo docker service create \
--with-registry-auth \
--replicas 1 \
--name eva-api \
--network eva-sandbox \
--publish 20171:20171 \
--env MYSQLHOST=eva-mysql \
$REPO_ADDR/eva-api
访问公网地址 http://121...* 检查前后台功能是否正常
4.5 解析eva-sdb.xxx 到 121...* , 访问 http://eva-sdb.xxx 检查前后台功能是否正常
docker更新
5.1 重复4.3 拉取最新image
5.2 不停服务,在线升级
$ sudo docker service update \
--env-add SERVER=$(sudo docker network inspect eva-sandbox|grep \"IP\":|awk -F"\"" '{print $4}') \
--image $(sudo docker inspect -f '{{index .RepoDigests 0}}' $REPO_ADDR/eva-web) \
eva-web
$ sudo docker service update \
--image $(sudo docker inspect -f '{{index .RepoDigests 0}}' $REPO_ADDR/eva-mysql) \
eva-mysql
$ sudo docker service update \
--env-add MYSQLHOST=eva-mysql \
--image $(sudo docker inspect -f '{{index .RepoDigests 0}}' $REPO_ADDR/eva-api) \
--publish-add 20171:20171 \
eva-api
5.3 如果5.2的update方式失败 那就删了重建
先删除旧的service
sudo docker service rm eva-web
sudo docker service rm eva-mysql
sudo docker service rm eva-api
然后重复4.4 创建新的service