update docker
This commit is contained in:
parent
37f9b41838
commit
a0a9245b66
|
@ -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 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
|
||||
|
|
|
@ -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:
|
||||
```
|
||||
|
|
@ -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
|
||||
```
|
||||
|
|
@ -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
|
||||
```
|
||||
|
|
@ -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
|
||||
|
||||
我们创建这样一个目录结构
|
||||
|
||||

|
||||
|
||||
其中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:
|
||||
# <Port exposed> : < 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:
|
||||
# <Port exposed> : < 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
|
||||
```
|
||||
|
||||

|
||||
|
||||
可以看到两个结点的状态已经是Up了,并且主结点映射在宿主机的3306端口,从结点映射在宿主机的3307端口。我们再来查看一下这两个结点的网络信息,以便后续使用
|
||||
|
||||
```
|
||||
docker network ls
|
||||
```
|
||||
|
||||

|
||||
|
||||
这个就是我们刚才创建的网络,刚才创建的两个结点也挂载在这个网络上,我们来查看一下详细信息
|
||||
|
||||
```
|
||||
docker inspect 62fa5033ce48
|
||||
```
|
||||
|
||||

|
||||
|
||||
这样我们就差看到来两个结点的具体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;
|
||||
```
|
||||
|
||||

|
||||
|
||||
都显示为YES的话那么我们的主从配置已经成功,现在我们在主节点创建一个test_db3数据库
|
||||
|
||||

|
||||
|
||||
然后切换到从结点,可以看到数据已经同步到从结点了
|
||||
|
||||

|
||||
|
||||
到这里一个简单的单主节点单从结点的MySQL架构已经搭建完毕。
|
|
@ -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:
|
||||
```
|
||||
|
||||
查看服务状态
|
||||
|
||||

|
||||
|
||||
确定服务正常启动后在浏览器输入网址[http://localhost:15672](http://localhost:15672/#/),进入RabbitMQ的登陆界面
|
||||
|
||||

|
||||
|
||||
默认用户名密码都是guest。登陆之后就可以进入到主界面了
|
||||
|
||||

|
|
@ -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"
|
||||
```
|
||||
|
Loading…
Reference in New Issue