docker run
-d 后台运行
-p 端口映射
-v 挂在卷
-e 环境配置
--name 容器名
docker search [name] 搜索镜像
docker inspect [imageId] 容器信息
docker start [imageId] 启动镜像
docker attach [imageId] 进入正在运行的容器
docker exec -it [name] [命令] 容器内执行命令
eg:docker exec -it tomcat01-net-01 ping 192.168.0.3
docker rm -f $(docker ps -aq) 清除所有容器
docker logs -f -t --tail 100 [id] 查看日志
docker volume ls 查看所有劵的情况
docker volume inspect [具名劵名] 查看劵挂载信息
DockerFile
FROM #基础镜像
MAINTAINER #镜像维护者信息 姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载目录
EXPOSE #暴露端口配置
CMD #指定容器启动的时候要运行的命令(只有最后一个会生效,可悲替代)
ENTRYPOINT #可以追加命令
ONBUILD #当构建一个被继承的dockerfile的时候会运行 ONBUILD 指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建的时候设置环境命令
docker build -f dockerfile文件路径 -t 镜像名:[tag]
---- docker 网络 ----
docker network ls 查看所有的odcker网络
创建网络(默认桥接)
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 [network_name]
--driver overlay
查看自己的网络详情
docker network inspect [network_name]
---- 网络连通 ----
docker network connect [network_name] [image_name] 将一个容器和一个网络连通
arp -n #查看本地缓存
宿主机抓包
yum install tcpdump -y
tcpdump -i [网卡编号] #抓包
--- 搭建redis集群---
1. 创建redis网络
docker network create redis --subnet 172.38.0.0/16
2. 通过脚本创建六个redis配置
for port in $(seq 1 6);
do
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-prot 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
3. 启动(单个)
docker run -p 6371:6379 -p 16371:16379 --name redis-1 -v /mydata/redis/node-1/data:/data -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
启动(脚本)
for port in $(seq 1 6);
do
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port}
-v /mydata/redis/node-${port}/data:/data
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done
4. 进入第一个容器
docker exec -it redis-1 /bin/sh
5. 创建集群
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379
--cluster-replicas 1
6. 启动客户端测试
redis-cli -c #打开客户端,连接redis
* -c 集群方式
docker compose
1.下载安装
# 国内镜像地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2. 授权
sudo chmod +x /usr/local/bin/docker-compose
3. 验证
查看一下version,显示有版本号那就说明安装成功了
docker-compose version
docker swarm
docker swarm init --advertise-addr 127.24.82.149
创建一个主节点令牌
docker swarm join-token manager
创建一个工作节点令牌
docker swarm join-token worker
管理节点退出集群
docker swarm leave --force
普通节点退出集群
docker swarm leave
发布服务
docker service create --network [网络名] --replicas [实例数] --name [别名] [镜像]
--replicas 1 # 启动的副本数量
--mode [replicated, global] #服务类型 replicated:副本(默认) global:全局
docker service ls # 查看服务信息
删除一个服务
docker service rm [name]
###### 指定节点运行 #######
添加节点标签
docker node update --label-add role=[标签] [节点id]
查看标签是否添加成功
docker node inspect [节点id]
删除标签
docker node update --label-rm role [节点id]
发布服务
docker service create
--name [name] --constraint 'node.labels.role == [标签]' [镜像]
stack方式发布
version: '3.7'
services:
nginx:
image: nginx
ports:
- target: 80
published: 80
protocol: tcp
mode: host
deploy:
placement:
constraints: [node.labels.role==cluster0001] # 条件约束
networks:
- nginx_network
networks:
nginx_network:
external:
name: nginx_network
扩缩容
docker service update --replicas 3 [容器名]
docker service scale [容器名]=3
查看各节点状态
docker servce ps [服务名]
查看集群节点
docker node ls
集群部署
docker stack deploy -c xxxxx.yml [容器名]
docker stack ls
docker stack ps [容器名]
docker stack rm [名]
############## k8s ############
查看集群节点
kubectl get node
命令扩展节点副本数量
kubectl scale deployment [pod-name] --replicas=10
# 部署应用
kubectl apply -f app.yaml
# 查看 deployment(发布的应用)
kubectl get deployment
查看部署进度状态
kubectl describe pod/[pod-name]
查看pod
kubectl get pod
查看pod详情
kubectl get pod -o wide
# 进入 Pod 容器终端, -c container-name 可以指定进入哪个容器。
kubectl exec -it [pod-name] -- bash
# 把集群内端口映射到节点
kubectl port-forward [pod-name] 8090:8080
查看历史版本
kubectl rollout history deployment [pod-name]
# 回到上个版本
kubectl rollout undo deployment [pod-name]
# 回到指定版本
kubectl rollout undo deployment [pod-name] --to-revision=2
删除节点
kubectl delete deployment [pod-name]
重新部署
kubectl rollout restart deployment [pod-name]
# 命令修改镜像,--record 表示把这个命令记录到操作历史中
kubectl set image deployment [pod-name] [pod-name]=[镜像地址] --record
------- service -------
发布service
kubectl apply -f service.yaml
查看服务列表
kubectl get svc
查看服务详情
kubectl get svc [service-name]



