环境:
- centos 7.6
安装
yum -y update
yum install -y docker
启动:
systemctl start docker
重启:
systemctl restart docker
关闭:
systemctl stop docker
安装镜像:
搜索 : docker search 镜像名字
例如 : docker search mysql ;*mysql后面还可以指定版本信息: mysql:5.7*
拉取镜像:
docker pull mysql *默认是最新版*
拉取镜像速递太慢的话可以配置docker加速器 ;
导入,导出,删除,镜像
docker save mysql > /home/java.tar.gz 导出
docker load < /home/java.tar.gz 导入
docker rmi mysql 删除
查看镜像
docker images
启动容器:
docker run -it --name myjava -p 9000:8080 -v /home/myjava:/soft --privileged java /bin/bash
-
启动镜像就会创建出一个运行状态的容器;
-
交互式容器 :创建出上面这个容器, 默认会直接进入到容器中;可以使用exit 退出容器, 但是容器也就停止运行了;
-
守护式容器 : 如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止 加 -d 参数
启动容器常用可选参数说明:
-i 表示以“交互模式”运行容器
-t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
--name 为创建的容器命名
-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上, 一般不要将数据放在容器当中。
-d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
-e 为容器设置环境变量
--network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
--privileged 将宿主机器的目录映射到容器里面, 需要权限 加权限
查看 ,暂停, 停止 , 删除 容器
docker ps -a 查看所有容器
docker pause myjava 暂停
docker unpause myjava 启动
docker stop myjava 停止
docker start -i myjava 启动
docker rm myjava 删除
- 可以根据容器的名字来停止容器, 也可以根据名字的编号来停止容器;
镜像重命名
docker tag 镜像名字 修改成什么
使用docker搭建pxc 集群
docker pull percona/percona-xtradb-cluster 拉取pxc镜像
搭建一个五个节点的pxc集群
需要先创建五个pxc容器, 创建出来的pxc容器不要直接连接docker以外的网络, 那样不安全
处于安全考虑我们要给pxc集群在docker 内部搭建docker网络, 这个网络是外部无法直接访问的;
创建内部网络
docker network create --subnet=172.18.0.0/24 net1 创建
docker network inspect net1 查看网络IP地址
docker network rm net1 删除
docker卷
- 容器中的pxc节点无法直接映射到宿主机器的目录, 会闪退;
- 使用docker卷的方式来解决;
docker卷 创建:
docker volume create --name v1 创建 docker inspect va 查看 v1 的具体目录 docker volume rm v1 删除 docker volume list 查看所有数据卷
通过pcx 镜像创建pxc 容器
创建5个docker卷
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5
- 切记一定要先创建docker卷再创建容器,不能一起来或者会报权限异常,不能创建容器
创建5个pxc 容器
1. docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=T123456 -e CLUSTER_NAME=CPXC -e XTRABACKUP_PASSWORD=T123456 --privileged --name=node1 --net=net1 --ip=172.18.0.2 pxc
!>>> Ps: 创建完第一个容器之后我们使用连接工具依次测试数据库是都能连接成功,成功之后再创建下一个容器;
2. docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=T123456 -e CLUSTER_NAME=CPXC -e XTRABACKUP_PASSWORD=T123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip=172.18.0.3 pxc
3. docker run -d -p 3308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=T123456 -e CLUSTER_NAME=CPXC -e XTRABACKUP_PASSWORD=T123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip=172.18.0.4 pxc
4. docker run -d -p 3309:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=T123456 -e CLUSTER_NAME=CPXC -e XTRABACKUP_PASSWORD=T123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip=172.18.0.5 pxc
5. docker run -d -p 3310:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=T123456 -e CLUSTER_NAME=CPXC -e XTRABACKUP_PASSWORD=T123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip=172.18.0.6 pxc
创建第一个容器与之后容器的需要修改的地方
-e CLUSTER_JOIN=node1 同步node1 除了第一次不需要
-p 3307:3306 宿主机器端口需要修改, 不能一样
-v v2:/var/lib/mysql 宿主映射的目录;
--name=node2 名字不能一样
--ip=172.18.0.3 ip不能一样
测试集群是否搭建成功
- 使用navicat 连接数据库 , 端口使用我们指定的 3306-3310
- 在第一个数据库当中我们创建数据库并插入数据, 如果其他四个数据库都能显示出来, 测试成功;