From a0a9245b6602e727402ac03f2ac835482f0212ec Mon Sep 17 00:00:00 2001 From: super Date: Thu, 1 Apr 2021 19:34:11 +0800 Subject: [PATCH] update docker --- Docker/06 docker compose.md | 2 + .../elasticSearch-单点模式/docker-compose.yml | 19 ++ .../elasticSearch-集群模式/docker-compose.yml | 73 ++++++++ .../Compose/常用服务/etcd/docker-compose.yml | 53 ++++++ .../mysql主从复置集群/docker-compose.yml | 177 ++++++++++++++++++ .../常用服务/rabbitmq/docker-compose.yml | 29 +++ .../常用服务/traefik代理/docker-compose.yml | 32 ++++ 7 files changed, 385 insertions(+) create mode 100644 Docker/Compose/常用服务/elasticSearch-单点模式/docker-compose.yml create mode 100644 Docker/Compose/常用服务/elasticSearch-集群模式/docker-compose.yml create mode 100644 Docker/Compose/常用服务/etcd/docker-compose.yml create mode 100644 Docker/Compose/常用服务/mysql主从复置集群/docker-compose.yml create mode 100644 Docker/Compose/常用服务/rabbitmq/docker-compose.yml create mode 100644 Docker/Compose/常用服务/traefik代理/docker-compose.yml diff --git a/Docker/06 docker compose.md b/Docker/06 docker compose.md index 3748767..edc3446 100644 --- a/Docker/06 docker compose.md +++ b/Docker/06 docker compose.md @@ -6,6 +6,8 @@ 关于docker compose的安装请移步[docker compose安装与卸载](https://vuepress.mirror.docker-practice.com/compose/install/)或根据[docker官网](https://docs.docker.com/compose/install/)进行安装。 +> 对于docker compose的学习推荐大家多看看一些项目的docker-compose.yml文件是怎么写的,慢慢模仿着去写很多就越来越熟练清晰了。在[Compose文件夹]()下也在网上收集了一些docker-compose.yml文件,欢迎大家一起来补充。 + ## 什么是docker compose 通过之前的介绍,我们知道使用一个 `Dockerfile` 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。 diff --git a/Docker/Compose/常用服务/elasticSearch-单点模式/docker-compose.yml b/Docker/Compose/常用服务/elasticSearch-单点模式/docker-compose.yml new file mode 100644 index 0000000..823c9ce --- /dev/null +++ b/Docker/Compose/常用服务/elasticSearch-单点模式/docker-compose.yml @@ -0,0 +1,19 @@ +```yaml +version: "3" + +services: + + elastic: + image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 + ports: + - "9200:9200" + - "9300:9300" + volumes: + - elastic-data:/data + environment: + - discovery.type=single-node + +volumes: + elastic-data: +``` + diff --git a/Docker/Compose/常用服务/elasticSearch-集群模式/docker-compose.yml b/Docker/Compose/常用服务/elasticSearch-集群模式/docker-compose.yml new file mode 100644 index 0000000..8ecec99 --- /dev/null +++ b/Docker/Compose/常用服务/elasticSearch-集群模式/docker-compose.yml @@ -0,0 +1,73 @@ +```yaml +version: '2.2' +services: + es01: + image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 + container_name: es01 + environment: + - node.name=es01 + - cluster.name=es-docker-cluster + - discovery.seed_hosts=es02,es03 + - cluster.initial_master_nodes=es01,es02,es03 + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - data01:/usr/share/elasticsearch/data + ports: + - 9200:9200 + networks: + - elastic + es02: + image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 + container_name: es02 + environment: + - node.name=es02 + - cluster.name=es-docker-cluster + - discovery.seed_hosts=es01,es03 + - cluster.initial_master_nodes=es01,es02,es03 + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - data02:/usr/share/elasticsearch/data + networks: + - elastic + es03: + image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 + container_name: es03 + environment: + - node.name=es03 + - cluster.name=es-docker-cluster + - discovery.seed_hosts=es01,es02 + - cluster.initial_master_nodes=es01,es02,es03 + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ulimits: + memlock: + soft: -1 + hard: -1 + volumes: + - data03:/usr/share/elasticsearch/data + networks: + - elastic + +volumes: + data01: + driver: local + data02: + driver: local + data03: + driver: local + +networks: + elastic: + driver: bridge +``` + diff --git a/Docker/Compose/常用服务/etcd/docker-compose.yml b/Docker/Compose/常用服务/etcd/docker-compose.yml new file mode 100644 index 0000000..1bbbeef --- /dev/null +++ b/Docker/Compose/常用服务/etcd/docker-compose.yml @@ -0,0 +1,53 @@ +```yaml +version: '2' +services: + + etcd1: + image: quay.io/coreos/etcd:v3.1.13 + restart: always + ports: + - 23791:2379 + - 23801:2380 + environment: + ETCD_NAME: infra1 + ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd1:2380 + ETCD_INITIAL_CLUSTER: infra3=http://etcd3:2380,infra1=http://etcd1:2380,infra2=http://etcd2:2380 + ETCD_INITIAL_CLUSTER_STATE: new + ETCD_INITIAL_CLUSTER_TOKEN: etcd-tasting-01 + ETCD_LISTEN_CLIENT_URLS: http://etcd1:2379,http://localhost:2379 + ETCD_LISTEN_PEER_URLS: http://etcd1:2380 + ETCD_ADVERTISE_CLIENT_URLS: http://etcd1:2379 + + etcd2: + image: quay.io/coreos/etcd:v3.1.13 + restart: always + ports: + - 23792:2379 + - 23802:2380 + environment: + ETCD_NAME: infra2 + ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd2:2380 + ETCD_INITIAL_CLUSTER: infra3=http://etcd3:2380,infra1=http://etcd1:2380,infra2=http://etcd2:2380 + ETCD_INITIAL_CLUSTER_STATE: new + ETCD_INITIAL_CLUSTER_TOKEN: etcd-tasting-01 + ETCD_LISTEN_CLIENT_URLS: http://etcd2:2379,http://localhost:2379 + ETCD_LISTEN_PEER_URLS: http://etcd2:2380 + ETCD_ADVERTISE_CLIENT_URLS: http://etcd2:2379 + + etcd3: + image: quay.io/coreos/etcd:v3.1.13 + restart: always + ports: + - 23793:2379 + - 23803:2380 + environment: + ETCD_NAME: infra3 + ETCD_INITIAL_ADVERTISE_PEER_URLS: http://etcd3:2380 + ETCD_INITIAL_CLUSTER: infra3=http://etcd3:2380,infra1=http://etcd1:2380,infra2=http://etcd2:2380 + ETCD_INITIAL_CLUSTER_STATE: new + ETCD_INITIAL_CLUSTER_TOKEN: etcd-tasting-01 + ETCD_LISTEN_CLIENT_URLS: http://etcd3:2379,http://localhost:2379 + ETCD_LISTEN_PEER_URLS: http://etcd3:2380 + ETCD_ADVERTISE_CLIENT_URLS: http://etcd3:2379 +``` + diff --git a/Docker/Compose/常用服务/mysql主从复置集群/docker-compose.yml b/Docker/Compose/常用服务/mysql主从复置集群/docker-compose.yml new file mode 100644 index 0000000..d69fd91 --- /dev/null +++ b/Docker/Compose/常用服务/mysql主从复置集群/docker-compose.yml @@ -0,0 +1,177 @@ +### 首先创建master结点的Dockerfile + +在编写之前我们先要创建一个配置master的my.cnf配置文件 + +``` +[mysqld] +log_bin = mysql-bin +server_id = 10 +``` + +之后我们创建master结点的Dockerfile + +``` +FROM mysql:5.7 +ADD ./master/my.cnf /etc/mysql/my.cnf +``` + +### 第二创建slave结点的Dockerfile + +在编写之前我们先要创建一个配置slave结点my.cnf配置文件 + +``` +[mysqld] +log_bin = mysql-bin +server_id = 11 +relay_log = /var/lib/mysql/mysql-relay-bin +log_slave_updates = 1 +read_only = 1 +``` + +注意要修改server_id为不同值,否则会发生错误,之后我们创建slave结点的Dockerfile + +``` +FROM mysql:5.7 +ADD ./slave/my.cnf /etc/mysql/my.cnf +``` + +### 最终的docker-compose.yml + +我们创建这样一个目录结构 + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gs1fzkpj30ko01gjrj.jpg) + +其中master文件夹存放关于master结点的my.cnf和Dockerfile,slave文件夹存放关于slave结点的my.cnf和Dockerfile。 + +```yaml +version: "3" +services: + db-master: + build: + context: ./ + dockerfile: master/Dockerfile + restart: always + environment: + MYSQL_DATABASE: 'db' + # So you don't have to use root, but you can if you like + MYSQL_USER: 'user' + # You can use whatever password you like + MYSQL_PASSWORD: 'password' + # Password for root access + MYSQL_ROOT_PASSWORD: 'password' + ports: + # : < MySQL Port running inside container> + - '3306:3306' + # Where our data will be persisted + volumes: + - my-db-master:/var/lib/mysql + networks: + - net-mysql + + db-slave: + build: + context: ./ + dockerfile: slave/Dockerfile + restart: always + environment: + MYSQL_DATABASE: 'db' + # So you don't have to use root, but you can if you like + MYSQL_USER: 'user' + # You can use whatever password you like + MYSQL_PASSWORD: 'password' + # Password for root access + MYSQL_ROOT_PASSWORD: 'password' + ports: + # : < MySQL Port running inside container> + - '3307:3306' + # Where our data will be persisted + volumes: + - my-db-slave:/var/lib/mysql + networks: + - net-mysql + +# Names our volume +volumes: + my-db-master: + my-db-slave: + + +networks: + net-mysql: + driver: bridge +``` + +现在我们就可以通过docker-compose来启动这两个结点了 + +``` +docker-compose up -d +``` + +接下来我们就可以看到一些镜像的构建信息,当两个结点都启动之后我们来查看一下两个结点的状态 + +``` +docker-compose ps -a +``` + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gshmsx1j31p2050abw.jpg) + +可以看到两个结点的状态已经是Up了,并且主结点映射在宿主机的3306端口,从结点映射在宿主机的3307端口。我们再来查看一下这两个结点的网络信息,以便后续使用 + +``` +docker network ls +``` + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gsrjtcbj317w07g76l.jpg)‌ + +这个就是我们刚才创建的网络,刚才创建的两个结点也挂载在这个网络上,我们来查看一下详细信息 + +``` +docker inspect 62fa5033ce48 +``` + +![img](https://img-blog.csdnimg.cn/20200423215125125.png?x-oss-process=image%2Fwatermark%2Ctype_ZmFuZ3poZW5naGVpdGk%2Cshadow_10%2Ctext_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NfODQyNDk5NDY3%2Csize_16%2Ccolor_FFFFFF%2Ct_70)‌ + +这样我们就差看到来两个结点的具体IP地址,因为Docker网络的配置,两个连接到同一network的容器会直接相互连通。 + +### 主从配置 + +启动之后进入从结点 + +``` +docker-compose exec db-slave bash +``` + +进入从结点mysql中 + +``` +mysql -u root -p +``` + +在从结点上配置主节点信息,然后把当前结点设置为从结点。 + +``` +mysql> CHANGE MASTER TO MASTER_HOST='192.168.64.3', MASTER_USER='root', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; +Query OK, 0 rows affected, 2 warnings (0.11 sec) + + +mysql> start slave; +Query OK, 0 rows affected (0.00 sec) +``` + +正常情况我们应该创建一个用户然后赋予其相应的权限,而不是将root用户配置给他.现在查看一下从结点的状态 + +``` +mysql> show slave status\G; +``` + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gtlb8g6j30k20c7wg5.jpg) + +都显示为YES的话那么我们的主从配置已经成功,现在我们在主节点创建一个test_db3数据库 + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gtbc0vuj30lk0l0q4x.jpg)‌ + +然后切换到从结点,可以看到数据已经同步到从结点了 + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gtsqnp5j307k08maah.jpg) + +到这里一个简单的单主节点单从结点的MySQL架构已经搭建完毕。 \ No newline at end of file diff --git a/Docker/Compose/常用服务/rabbitmq/docker-compose.yml b/Docker/Compose/常用服务/rabbitmq/docker-compose.yml new file mode 100644 index 0000000..e970f80 --- /dev/null +++ b/Docker/Compose/常用服务/rabbitmq/docker-compose.yml @@ -0,0 +1,29 @@ +```yaml +version: "3" + +services: + + rabbitmq: + image: rabbitmq:management + hostname: myrabbitmq + ports: + - "5672:5672" + - "15672:15672" + volumes: + - rabbitmq-data:/var/lib/rabbitmq + +volumes: + rabbitmq-data: +``` + +查看服务状态 + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gxru51ij31tm07e0ur.jpg) + +确定服务正常启动后在浏览器输入网址[http://localhost:15672](http://localhost:15672/#/),进入RabbitMQ的登陆界面 + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gy2a0irj309604cglp.jpg) + +默认用户名密码都是guest。登陆之后就可以进入到主界面了 + +![](https://tva1.sinaimg.cn/large/008eGmZEly1gp4gyc2xe8j312m0j3whd.jpg) \ No newline at end of file diff --git a/Docker/Compose/常用服务/traefik代理/docker-compose.yml b/Docker/Compose/常用服务/traefik代理/docker-compose.yml new file mode 100644 index 0000000..53e1c4b --- /dev/null +++ b/Docker/Compose/常用服务/traefik代理/docker-compose.yml @@ -0,0 +1,32 @@ +```yaml +version: '2' + +services: + proxy: + image: traefik + command: --api --docker --docker.domain=docker.localhost --logLevel=DEBUG + networks: + - apinetwork + ports: + - "80:80" + - "8080:8080" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik.toml:/etc/traefik/traefik.toml + +networks: + apinetwork: + external: + name: fileserver +``` + +注意需要编写traefik.toml文件 + +``` +defaultEntryPoints = ["http"] +insecureSkipVerify = true +[entryPoints] + [entryPoints.http] + address = ":80" +``` +