Docker学习笔记
1. 安装与基本命令
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
docker version
systemctl start docker
docker info
docker container run // 创建容器 docker container run nginx
docker container run -d -p 80:80 nginx //后台进程
docker container run -it ubuntu sh //直接进入命令行模式
docker container ls
docker container ps -a
docker container rm 1a docker rm ..(简写)
docker container ps -aq //列出所有的container id
docker container stop $(docker container ps -qa) //停止所有容器
docker attach a0941c66dab00 //查看后台container日志
docker container logs d02 //查看容器 log
docker container logs -f d02 //查看当前容器 log
docker container rm -f $(docker container ls -aq) //清除所有容器
docker exec -it eeb sh //进入某个container命令行
docker container run -it busybox sh //运行一个容器并进入sh窗口
docker container top eeb //查看进程
docker container run -d --name nginx -p 80:80 -v /www/conf:/etc/nginx/conf.d -v /www/html:/usr/share/nginx --privileged nginx //启动nginx
2. 防火墙
firewall-cmd --state
service firewall start|stop|restart 防火墙操作
firewall-cmd --permanent --add-port=8080-8085/tcp //开启端口
firewall-cmd --reload //加载配置
firewall-cmd --permanent --remove-port=8080-8085/tcp //取消开启端口
firewall-cmd --permanent --list-ports //端口列表
firewall-cmd --permanent --list-service //哪些服务使用接口
3. Docker虚拟机
yum -y update //更新yum
yum install -y docker //安装docker
service docker start | stop |restart //启动 重启 停止服务

docker search java
docker pull java
daocloud配置加速
curl -sSL get.daocloud.io/daotools/se… | sh -s f1361db2.m.daocloud.io
配置完成要去修改docker配置文件,去掉}前面的 , /etc/docker/daemon.json
docker search java //查找镜像
docker images //查看已安装的镜像
docker save java > /home/java.tar.gz //保存镜像
docker load < /home/java.tar.gz //加载镜像
docker images
docker rmi java //删除镜像
docker run -it --name myjava java bash //启动容器
docker run -it --name myjava -p 9000:8080 -p 9001:8085 java bash
docker run -it --name myjva -v /home/project:/soft --privileged java bash
docker run -it -p 9000:8080 -p 9001:8085 -v /home/project:/soft --privileged --name myjava docker.io/java bash
docker pause myjava //暂停容器
docker unpause myjava //恢复容器
docker stop myjava //停止容器
docker start -i myjava //启动容器
docker rm myjava //移除myjava
docker ps -a //查看所有容器
MySQL 集群
- 防火墙端口配置【因为初次配置遇到问题比较多 直接把防火墙卸载了】
- 拉取镜像 注意镜像版本 为 5.6 5.6之上的版本在启动第二个的时候会失败
- 给镜像重命名
- 创建网段
- 创建卷 如果存在卷数据 创建容器会失败。因为之前数据的影响
- 启动容器
docker container run -d --name nginx -p 80:80 -v /www/conf:/etc/nginx/conf.d -v /www/html:/usr/share/nginx --privileged nginx
PXC集群 hub.docker.com/r/percona/p…
docker pull percona/percona-xtradb-cluster //拉取镜像 默认 5.7会出现异常
docker pull percona/percona-xtradb-cluster:5.6
docker load < /home/soft/pxc.tar.gz //加载镜像
docker tag docker.io/percona/percona-xtradb-cluster pxc //重命名
docker rmi docker.io/percona/percona-xtradb-cluster //移除之前的镜像
出于安全考虑,需要给PXC集群实例创建Docker内部网络
docker network create net1 //创建网段
docker network create --subnet=172.18.0.0/24 net1
docker network inspect net1 //查看网段
docker network rm net1 //移除网段
docker volume create --name v1 //创建docker卷
docker volume create v1 v2 v3 v4 v5
#创建volume
docker volume create volume-test1
#查看参数
docker inspect volume-test1
#使用volume
docker run -dit --name busybox3 -v volume-test1:/volume busybox
#查看
docker inspect -f {{.Mounts}} busybox3
#查看docker数据卷
docker volume ls
#删除没使用的数据卷(谨慎使用)
docker volume prune
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin123 -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
注意:卸载了防火墙 出现错误
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint node1 (f94c7c578ec8f632889061369d7ef931af0d62f0f9eb9d731227e4bc0bf45205): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.18.0.2:3306 ! -i br-a2ff2dff3221: iptables: No chain/target/match by that name. (exit status 1)).
解决: 重启docker服务后再启动容器 systemctl restart docker docker start foo
注意:出现错误 WARNING: IPv4 forwarding is disabled. Networking will not work.
vim /etc/sysctl.conf
#配置转发
net.ipv4.ip_forward=1
#重启服务,让配置生效
systemctl restart network
#查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功
sysctl net.ipv4.ip_forward
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin123 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=admin123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin123 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=admin123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin123 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=admin123 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=admin123 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
MySQL负载均衡

docker pull haproxy //拉取镜像
touch /home/soft/haproxy.cfg //搞一搞配置文件 zhangge.net/5125.html
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy
docker exec -it h1 bash //进入命令行
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
CREATE USER 'haproxy'@'%' IDENTIFIED BY ''; //创建账号发心跳检测
双机热备

- 安装keepalived
docker exec -u 0 -it h1 bash //以root进入docker
apt-get update
apt-get install keepalived
service keepalived start //启动
数据库备份
RedisCluster

docker network create --subnet=172.19.0.0/16 net2 //创建net2网段
docker pull yyyyttttwwww/redis //拉取redis镜像
docker run -it -d --name r1 -p 5001:6379 --net=net2 --ip 172.19.0.2 redis bash //启动容器
docker exec -it r1 bash //进入命令行修改配置文件

./redis-server ../redis.conf //在 /usr/redis/src 目录下启动redis
重复5遍
docker exec -it r2 bash cd /usr/redis/src/ ./redis-server ../redis.conf exit
[root@localhost ~]# docker exec -it r1 bash
root@c4735e00a555:/# cd /usr/redis/
root@c4735e00a555:/usr/redis# mkdir cluster
root@c4735e00a555:/usr/redis# cd src/
root@c4735e00a555:/usr/redis/src# cp redis-trib.rb ../cluster/
root@c4735e00a555:/usr/redis/src# cd ..
root@c4735e00a555:/usr/redis# cd cluster/
root@c4735e00a555:/usr/redis/cluster#
./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379