docker search xxx
#例如搜索mysql
docker search mysql
docker pull xxx[:version]
#如下载mysql最新版镜像
docker pull mysql
#下载mysql 5.6版镜像
docker pull mysql:5.6
官方镜像站hub.docker.com在国内下载速度太慢,使用国内镜像能大大提高下载速度。下面只介绍常用的三种:
- daocloud
注册账户后会得到形如“http://xxxxxx.m.daocloud.io”的个人地址,按照提示将地址配置到docker中即可
163
163不需要注册,可以直接使用,具体用法如下
docker pull hub.c.163.com/library/xxx
#如下载tomcat
docker pull hub.c.163.com/library/tomcat
docker images
这里需要区分容器与镜像,打个不恰当的比方,镜像可以看成是操作系统的安装包,容器可以看成是安装后的系统,一个镜像可以被用来创建多个容器,多个容器可以同时运行。
#常用命令,-d表示后台运行模式,-p表示端口映射,hostPort为宿主机的端口,containerPort为容器中端口号
#-v表示路径映射,将宿主机的路径映射到容器中,可以配置多个-v来指定多个映射
#--name指定容器名称,后续可以通过名称来操作容器,-e用于设定环境变量,用于给容器传递参数
#image为镜像名,version为版本号
docker run -d -p hostPort:containerPort -v hostDir:containerDir --name containerName -e paramName=paramValue image[:verion]
#例如创建mysql5.7
docker run -d -p 3306:3306 -v xxx/conf/mysql:/etc/mysql -v xxx/data/mysql:/var/lib/mysql --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#可以通过--net=host来指定容器共享宿主机的网络(不再需要配置端口映射,宿主机的ip就是容器的ip,共用网络)
#更多参数可通过help查看
#查看运行的容器
docker ps
docker ps -s
#查看已创建容器,包括停止的容器
docker ps -a
#容器ID和容器名称可以通过docker ps查看, 容器名称为创建容器是指定
docker start 容器ID或者容器名称
docker stop 容器ID或者容器名称
docker restart 容器ID或者容器名称
docker rm 容器ID或者容器名称
docker rmi 镜像名[:版本号]
#-it参数,i表示交互式模式,t表示终端,/bin/bash是需要运行的命令
docker exec -it 容器ID或容器名称 /bin/bash
#查看容器详细信息,打印内容特别多,不方便查看
docker inspect 容器ID或容器名称
#仅打印容器IP
#docker inspect --format '{{.NetworkSettings.IPAddress}}' 容器ID或容器名称
由于刚开始我们没有mysql的配置文件,所以我们需要先创建一个mysql容器,然后将配置文件复制出来再进行修改,具体如下:
#先创建一个mysql容器
docker run -d --net=host xxxx/data/mysql:/var/lib/mysql --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#登陆容器
docker exec -it mysql5.7 /bin/bash
#新建目录
mkdir /var/lib/mysql/config
#拷贝配置文件
ps -r /etc/mysql/* /var/lib/mysql/config/
#退出容器
exit
#停止容器
docker stop mysql5.7
#删除容器
docker rm mysql5.7
#xxxx/data/mysql/config下就是mysql的配置文件了
现在有了基础的mysql配置文件,接下来需要修改配置文件内容,下面对mysql主库配置添加以下内容
#设置mysql端口
port = 3307
#开启binlog
log-bin = /var/lib/mysql/mysql-bin
#不同步的数据库
#binlog-ignore-db = mysql
#设置binglog只对数据库test有效,这里可以不设
binlog-do-db = test
#设置server id
server-id = 1000
再给mysql从库添加以下内容
#设置mysql端口
port = 3308
#设置server id
server-id = 1000
再将主库配置文件复制到xxxx/conf/mysql-1000目录,将从库配置文件复制到xxxx/conf/mysql-1001目录
#创建mysql主库
docker run -d --net=host -v xxxx/conf/mysql-1000:/etc/mysql -v xxxx/data/mysql-1000:/var/lib/mysql --name mysql5.7-1000 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#创建mysql从库
docker run -d --net=host -v xxxx/conf/mysql-1001:/etc/mysql -v xxxx/data/mysql-1001:/var/lib/mysql --name mysql5.7-1001 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
--添加用户
CREATE USER 'repl' IDENTIFIED BY 'repl';
--添加对所有数据库同步的权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'
--修改生效
flush privileges;
--查看主库信息,显示结果如下所示
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73 | test | manual,mysql |
+------------------+----------+--------------+------------------+
--配置主库信息
mysql>CHANGE MASTER TO
-> MASTER_HOST='localhost',
-> MASTER_PORT=3307,
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='repl',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=73;
--启动复制
mysql>start slave;
--查看复制状态
mysql>show slave status\G;
--显示形如下图则表示复制状态正常
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
--停止同步
mysql>stop slave;
在主库的test库中新建表、插入、修改、删除数据,查看从库是否与主库保持一致