docker放弃

1 mysql配置主从

先在宿主机上创建配置文件

cd /mydaata/mysql-master/conf
vim my.cnf

将下面的内容复制进去

[mysqld]
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
default_authentication_plugin='mysql_native_password' #不然从机在连接时会有误

主机容器启动配置

docker run -d \
--name mysql-master \
--privileged=true \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /mydata/mysql-master/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3307:3306 \
mysql:8.0

进入主机连接mysql,创建从机使用的账户

mysql -uroot -proot

create user 'nihao'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'nihao'@'%';
flush privileges;

在宿主机上创建配置文件

cd /mydaata/mysql-slave/conf
vim my.cnf

将下面的内容复制进去

[mysqld]
server_id=102
binlog-ignore-db=mysql
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=mall-mysql-relay-bin
log_slave_updates=1
read_only=on
default_authentication_plugin='mysql_native_password' #不然从机在连接时会有误

从机容器启动配置

docker run -d \
--name mysql-slave \
--privileged=true \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /mydata/mysql-slave/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3308:3306 \
mysql:8.0

查询主机的状态,用于从机的配置:

show master staus;

在这里插入图片描述

进入从机连接mysql,配置主从配置

mysql -uroot -proot

change master to master_host='192.168.238.xxx', master_user='nihao', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000006', master_log_pos=848, master_connect_retry=30;  

在从机上启动主从,并查询状态

start slave;
show slave status \G;

看到这两个yes则成功
在这里插入图片描述

2 Redis 3主3从集群搭建

创建6个redis docker实例

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

进入一个容器配置集群和主从

docker exec -it redis-node-1 bash
redis-cli --cluster create 192.168.238.100:6381 192.168.238.100:6382 192.168.238.100:6383 192.168.238.100:6384 192.168.238.100:6385 192.168.238.100:6386 --cluster-replicas 1

进入一个容器,查看主从配置的结果

docker exec -it redis-node-1 bash
redis-cli -p 6381
cluster node

在这里插入图片描述
配置好了之后,再连接redis的客户端就需要加-c参数

redis-cli -p 6381 -c

扩容至4主4从

新起两个容器

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

进入7号节点,进行配置

docker exec -it redis-node-7 bash
redis-cli --cluster add-node 192.168.238.100:6387 192.168.238.100:6381

#重新分配槽位
redis-cli --cluster reshard 192.168.238.100:6381
#之后按照rehash的步骤来
#结果是前三个匀给了他

#再把8号节点给他作为从节点
#id从redis-cli --cluster check 192.168.238.100:6381查询
redis-cli --cluster add-node 192.168.238.100:6388 192.168.238.100:6387 --cluster-slave --cluster-master-id 205c07477391ca43dafd637c6641224fec8b6eb8

缩容回3主3从

# 删除8号节点
redis-cli --cluster del-node 192.168.238.100:6388 df13a2f508cd9d5bcd71ab65a81b02abf00695eb

# 归还槽位
redis-cli --cluster reshard 192.168.238.100:6381

# 删除7号节点
redis-cli --cluster del-node 192.168.238.100:6387 205c07477391ca43dafd637c6641224fec8b6eb8

3 docker file

FROM   #基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER    #镜像维护者的姓名和邮箱地址

RUN    #容器构建时需要运行的命令

EXPOSE    #当前容器对外暴露出的端口

WORKDIR    #指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

USER    #指定该镜像以什么样的用户去执行,如果都不指定,默认是root

ENV    #用来在构建镜像过程中设置环境变量

ADD    #将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

COPY    #拷贝文件和目录到镜像中

VOLUME    #容器数据卷,用于数据保存和持久化工作

CMD    #让用户指定容器默认启动命令,指定好的command可以被覆盖

ENTRYPOINT    #让用户指定容器默认启动命令,指定好的command只可以通过--entrypoint进行显示的覆盖

go服务部署docker上

首先写一个简单的服务:

package main

import (
	"fmt"
	"log"
	"net/http"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "hello world")
}

func main() {
	http.HandleFunc("/", sayHello)

	log.Println("【默认项目】服务启动成功 监听端口 80")

	er := http.ListenAndServe("0.0.0.0:80", nil)
	if er != nil {
		log.Fatal("ListenAndServe: ", er)
	}
}

编译成一个可执行的二进制文件, 这里我的叫hello
在这里插入图片描述
然后拖进linux系统里面,写好执行脚本和Dockerfile,构成这样的文件目录
在这里插入图片描述

Dockefile如下:

FROM golang
MAINTAINER  tl
WORKDIR /go/src/
COPY . .
EXPOSE 80
CMD ["/bin/bash", "/go/src/script/build.sh"]

build.sh如下:

#!/usr/bin/env bash
cd /go/src/app/ && ./hello

构建镜像,执行镜像

docker build -t go-hello:1.0 .
docker run -d -p 80:80 go-hello:1.0

访问结果
在这里插入图片描述

4 docker网络

bridge模式

在这里插入图片描述

host模式

在这里插入图片描述

container模式

在这里插入图片描述

自定义网络

默认也是桥接模式,能够自动维护容器名和ip的对应关系

常用指令

#查看网络
docker network ls

#创建自定义网络
docker netword create XXX网络名字

#删除网络
docker network rm XXX网络名字

5 Compose

Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

安装

https://docs.docker.com/compose/install/

常用命令

docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose exec  yml里面的服务id          # 进入容器实例内部
docker-compose ps                           # 展示当前docker-compose编排过的运行的所有容器
docker-compose top                          # 展示当前docker-compose编排过的容器进程 
docker-compose logs  yml里面的服务id          # 查看容器输出日志
docker-compose config                       # 检查配置
docker-compose config -q                    # 检查配置,有问题才有输出
docker-compose restart                      # 重启服务
docker-compose start                        # 启动服务
docker-compose stop                         # 停止服务 

实战

假设go服务需要用到mysql和redis,现在要先起mysql和redis才能启动我们的go服务
编写docker-compose.yml文件:

version: "3"

services:
   	container_name: ms01
   	image: go-hello:1.0
   	ports:
		- "80:80"
	volumes:
		- ./app/go/hello:/go/src/app:rw
	networks:
		- haha
	depends_on:
		- redis
		- mysql

redis:    
	image: redis:6.0.8    
	ports:      
		- "6379:6379"    
	volumes:      
		- /app/redis/redis.conf:/etc/redis/redis.conf      
		- /app/redis/data:/data    
	networks:       
		- haha   
	command: redis-server /etc/redis/redis.conf   

mysql:    
	image: mysql:8.0    
	environment:      
		MYSQL_ROOT_PASSWORD: '123456'      
		MYSQL_ALLOW_EMPTY_PASSWORD: 'no'      
		MYSQL_DATABASE: 'db2021'      
		MYSQL_USER: 'zzyy'      
		MYSQL_PASSWORD: 'zzyy123'    
	ports:       
		- "3306:3306"    
	volumes:       
		- /app/mysql/db:/var/lib/mysql      
		- /app/mysql/conf/my.cnf:/etc/my.cnf       
		- /app/mysql/init:/docker-entrypoint-initdb.d    
	networks:      
		- atguigu_net    
	command: --default-authentication-plugin=mysql_native_password #解决外部无法访问 

networks: 
	haha

这么编写完后,在go里面写的连接mysql,redis的配置,可以不用具体ip,而使用mysql, redis这样的服务名来替代

#之后先检查配置文件是否有错误
docker-compose config -q

#运行
docker-compose up -d

#关停
docke-compose stop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值