安裝docker(目標機為centos7)
卸載舊版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安裝Docker Engine-Community
在新主機上首次安裝Docker Engine-Community之前需要設置Docker 倉庫,之后可以從倉庫安裝和更新Docker
安裝所需的軟件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存儲驅動程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用以下命令來設置穩定的倉庫
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安裝Docker Engine-Community 最新版本 或者 按照下一步安裝特定版本
sudo yum install docker-ce docker-ce-cli containerd.io
列出存儲庫中可用版本。按照版本號從高到底排列
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
指定軟件包名稱 安裝docker-ce 和docker-ce-cli
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
啟動docker
sudo systemctl start docker
docker 基本命令
# 查看下載的鏡像
docker images
# 查看運行中的容器
docker ps
# 查看所有容器包含沒有運行
docker ps -a
# 移除鏡像
docker rm <容器id/容器名稱>
# 啟動停止容器
docker start/stop <容器id/容器名稱>
利用docker搭建mysql主從服務器(例子中采用一主一從)
首先拉取MySQL鏡像
docker pull mysql:5.7
利用此鏡像啟動主從容器
# master 主庫
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# slave 從庫
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
說明:-p port1:port2
其中port1 為容器對外映射的端口號(宿主機端口),因為docker容器是相互獨立的,每個容器有自己的獨立ip,所以不同容器使用相同的端口不會沖突,這里的port2 我們盡量使用MySQL默認的3306,否則可能會出現無法通過IP連接docker容器的mysql。
使用 docker -ps 查看容器運行情況
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce752c99a010 mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 5 hours 33060/tcp, 0.0.0.0:3341->3306/tcp slave2
701ccedc1e95 mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 5 hours 33060/tcp, 0.0.0.0:3340->3306/tcp slave1
此時還不能用客戶端連接,需要MySQL進行遠程連接授權
進入容器
docker exec -it <容器id/名稱> bash
登錄mysql
mysql -uroot -p
進入MySQL后執行授權操作
-- 對遠程連接進行授權
GRANT ALL ON *.* TO 'root'@'%';
-- 更改密碼的加密規則
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
-- 更改root的密碼
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
-- 刷新權限
flush privileges;
配置master
通過 docker exec -it <容器id/名稱> bash進入容器內部。使用vim /etc/mysql/my.cnf 修改MySQL配置
會出現如下問題。
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
需要首先執行 apt-get update 然后執行 apt-get install vim 即可
在my.cnf 中添加如下配置
[mysqld]
## 同一局域網內注意要唯一
server-id=100
## 開啟二進制日志功能,可以隨便取(關鍵)
log-bin=mysql-bin
配置完成后重啟即可生效 ,在容器內部 使用命令 service mysql restart,此時容器會停止,我們還需要 docker start <容器id/容器名稱>
啟動容器。
配置slave
my.cnf中添加配置
[mysqld]
## 設置server_id,注意要唯一
server-id=101
## 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
連接master 和 slave
首先進入master mysql 執行 show master status
;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.25 sec)
記錄File 和 position 值。
然后,從slave進入MySQL執行
change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 154, master_connect_retry=30;
master_host 說明 :Master的地址,指的是容器的獨立ip,可以通過docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名稱|容器id查詢容器的ip>
[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mymysql
172.17.0.2
執行命令 start slave
啟動slave。
查看slave狀態 show slave status \G
;