docker的使用

  • --link表示连接到redis这个容器; -p 是映射端口 ;-e 是设置环境变量
docker run -d --link redis --name flask-redis -p 5000:5000 -e REDIS_HOST=redis xiang/flash-redis
  • 不同宿主机里面容器的通信,通过Overlay网络和etcd实现
  • 数据持久化
docker run -d -v mysql:/var/lib/mysql --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

多机器通信环境搭建

  1. 环境是node1为:172.16.50.32; node2为: 172.16.50.33;系统都为CENTOS7系统
  2. 安装etcd集群,并用下面命令运行,系统需要放开2379和2380两个端口:
nohup /opt/etcd/etcd --name docker-node1 --initial-advertise-peer-urls http://172.16.50.32:2380 \
--listen-peer-urls http://172.16.50.32:2380 \
--listen-client-urls http://172.16.50.32:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://172.16.50.32:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://172.16.50.32:2380,docker-node2=http://172.16.50.33:2380 \
--initial-cluster-state new&

nohup /opt/etcd/etcd --name docker-node2 --initial-advertise-peer-urls http://172.16.50.33:2380 \
--listen-peer-urls http://172.16.50.33:2380 \
--listen-client-urls http://172.16.50.33:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://172.16.50.33:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://172.16.50.32:2380,docker-node2=http://172.16.50.33:2380 \
--initial-cluster-state new&

/opt/etcd/etcdctl cluster-health ##查看etcd集群状态
  1. 停止运行docker服务,并用下面的命令在相应的节点上运行,需要放行2375和7496两个端口
/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://172.16.50.32:2379 --cluster-advertise=172.16.50.32:2375&

/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://172.16.50.33:2379 --cluster-advertise=172.16.50.33:2375&
  1. 创建一个overlay的网络, 只在一个节点上面建立就可以了
docker network create -d overlay demo
  1. 测试在node1和node2上面分别创建一个docker
docker run -d --name test1 --net demo busybox sh -c "while true;do sleep 3600;done"  # node1上面运行
docker run -d --name test2 --net demo busybox sh -c "while true;do sleep 3600;done"  # node2上面运行

使用compose搭建一个wordpress站点

version: '3'
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: wordpress_password
    networks:
      - my-bridge
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: wordpress_password
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge
volumes:
  mysql-data:
networks:
  my-bridge:
    driver: bridge