Docker学习笔记

220 阅读2分钟

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 集群

  1. 防火墙端口配置【因为初次配置遇到问题比较多 直接把防火墙卸载了】
  2. 拉取镜像 注意镜像版本 为 5.6 5.6之上的版本在启动第二个的时候会失败
  3. 给镜像重命名
  4. 创建网段
  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 ''; //创建账号发心跳检测

双机热备

  1. 安装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