容器简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
CentOS 7 安装docker
安装必要的一些系统工具
1
| $ yum install -y yum-utils device-mapper-persistent-data lvm2
|
添加软件源信息
1
| $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
更新并安装 Docker
1 2 3 4 5 6 7
| $ yum makecache fast $ yum -y install docker-ce
$ echo 开启容器服务 $ systemctl enable docker $ systemctl start docker
|
注意:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。 $ vim /etc/yum.repos.d/docker-ce.repo $ 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1 $ $ 安装指定版本的Docker-CE: $ Step 1: 查找Docker-CE的版本: $ yum list docker-ce.x86_64 --showduplicates | sort -r $ Loading mirror speeds from cached hostfile $ Loaded plugins: branch, fastestmirror, langpacks $ docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable $ docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable $ docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable $ Available Packages $ Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos) $ yum -y install docker-ce-[VERSION]
|
注册一个阿里的账号,
进入加速器页面https://cr.console.aliyun.com/#/accelerator
1
| $ vim /etc/docker/daemon.json
|
内容如下
1 2 3
| { "registry-mirrors": ["https://你的阿里云加速地址.mirror.aliyuncs.com"] }
|
重启docker
1 2
| $ systemctl daemon-reload $ systemctl restart docker
|
常用docker命令
查看运行容器
查看所有容器
进入容器
其中字符串为容器ID:
1
| $ docker exec -it d27bd3008ad9 /bin/bash
|
1.停用全部运行中的容器:
1
| $ docker stop $(docker ps -q)
|
2.删除全部容器:
1
| $ docker rm $(docker ps -aq)
|
3.一条命令实现停用并删除容器:
1
| $ docker stop $(docker ps -q) && docker rm $(docker ps -aq)
|
安装mariadb
centOS上比yum安装mysql要方便.
###安装mysql-client,用于访问mysql容器数据库
1
| $ yum -y install mariadb
|
单独MySQL模式
1 2 3 4 5 6 7
| docker run -d \ -e TIMEZONE=Asia/Shanghai \ -v /data/mariadb-master:/data/mariadb \ -e MYSQL_ROOT_PASSWORD=admin \ -e REPLICATION_PASSWORD=admin \ -p 3306:3306 \ mariadb
|
MariaDB MASTER
进入容器需要修改镜像
将下面内容添加进/etc/mysql/conf.d/*.cnf
从机server-id=2
1 2 3 4 5
| [mysqld] server-id=1 log-bin=mysql-bin binlog_format=MIXED default-time_zone = '+8:00'
|
提交
1 2
| docker commit -m "set log bin on" -a "lional" d27bd3008ad9 mariadb-master:1.0 docker commit -m "set log bin on" -a "lional" d27bd3008ad9 mariadb-slave:1.0
|
运行master, 这里LOG_BIN参数没有用,所以在上面修改了镜像
1 2 3 4 5 6 7 8 9 10 11
| docker run -d \ --restart=always \ --name mysql-master \ -e TIMEZONE=Asia/Shanghai \ -v /data/mariadb-master:/data/mariadb \ -e MYSQL_ROOT_PASSWORD=admin \ -e LOG_BIN=mysql-bin \ -e BINLOG_FORMAT=MIXED \ -e REPLICATION_PASSWORD=admin \ -p 3306:3306 \ mariadb-master:1.0
|
查询容器的ip地址
1
| $ docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)
|
链接容器mysql
1
| mysql -uroot -padmin -h 172.17.0.2
|
查看master是否启用了log_bin
1 2 3 4 5 6 7 8 9 10 11 12
| MariaDB [(none)]> show variables like '%log_bin%'; +---------------------------------+--------------------------------+ | Variable_name | Value | +---------------------------------+--------------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/mysql-bin | | log_bin_compress | OFF | | log_bin_compress_min_len | 256 | | log_bin_index | /var/lib/mysql/mysql-bin.index | | log_bin_trust_function_creators | OFF | | sql_log_bin | ON | +---------------------------------+--------------------------------+
|
查看主机状态,注意启动从机的时候bin和pos的参数
1 2 3 4 5 6
| MariaDB [(none)]> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 342 | | | +------------------+----------+--------------+------------------+
|
添加slave账户
1 2
| GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by 'reader'; FLUSH PRIVILEGES;
|
MariaDB SLAVE
没有sql导入的情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| docker run -d \ --restart=always \ --name mysql-slave2 \ -e TIMEZONE=Asia/Shanghai \ -v /data/mariadb-slave:/data/mariadb \ -e MYSQL_ROOT_PASSWORD=admin \ -e LOG_BIN=mysql-bin \ -e BINLOG_FORMAT=MIXED \ -e REPLICATION_PASSWORD=admin \ -e MASTER_LOG_FILE=mysql-bin.000003 \ -e MASTER_LOG_POS=342 \ -e MASTER_PORT=3306 \ -e MASTER_HOST=172.17.0.2 \ -p 3310:3306 \ mariadb-slave2:1.0
|
先用sql文件导入再同步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| docker run -d \ --restart=always \ --name mysql-master \ -e TIMEZONE=Asia/Shanghai \ -v /data/mariadb-slave:/data/mariadb \ -e MYSQL_ROOT_PASSWORD=admin \ -e BINLOG_FORMAT=MIXED \ -e REPLICATION_PASSWORD=admin \ -e DATABASE_FILE=database.sql \ -e MASTER_LOG_FILE=mysql-bin.000003 \ -e MASTER_LOG_POS=342 \ -e MASTER_PORT=3306 \ -e MASTER_HOST=172.17.0.2 \ -p 3308:3306 \ mariadb-slave:1.0
|
需要把database.sql文件存提前存放在/data/mariadb-slave目录
进入slaver的mariadb
1
| mysql -uroot -padmin -h 172.17.0.3
|
设置主库链接
1
| change master to master_host='172.17.0.2',master_user='slave',master_password='reader',master_log_file='mysql-bin.000003',master_log_pos=342,master_port=3306;
|
启动从库同步
查看状态
当看到
1 2
| Slave_IO_Running: Yes Slave_SQL_Running: Yes
|
则启动成功
##docker redis 集群(cluster)搭建
顺带完成redis集群,安装依赖
创建redis容器
1、创建redis配置文件(redis-cluster.tmpl)
我在路径/root下创建一个文件夹redis-cluster,在路径/root/redis-cluster下创建一个文件redis-cluster.tmpl,并把以下内容复制过去。
10.0.2.15 //自己的服务器ip
1 2 3 4 5 6 7 8
| port ${PORT} cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 10.0.2.15 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes
|
创建自定义network
1
| $ docker network create redis-net
|
在/root/redis-cluster下生成conf和data目标,并生成配置信息
1 2 3 4 5
| for port in `seq 6379 6384`; do \ mkdir -p ./${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; \ done
|
创建6个redis容器
1 2 3 4 5 6 7
| for port in `seq 6379 6384`; do \ docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /root/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /root/redis-cluster/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \ done
|
通过启动ruby来实现集群
1 2 3 4 5 6 7
| echo yes | docker run -i --rm --net redis-net ruby sh -c ' \ gem install redis \ && wget http: && ruby redis-trib.rb create --replicas 1 \ '"$(for port in `seq 6379 6384`; do \ echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \ done)"
|