官网:https://docs.docker.com/engine/install/ubuntu/
帮助文档:
1.卸载旧的
apt-get remove docker docker-engine docker.io containerd runc2.设置存储库
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release3.添加 Docker 的官方 GPG 密钥:
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg4.用以下命令设置存储库:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null4.安装docker相关
ce是社区,ee是企业
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin5启动docker 验证 Docker 引擎是否已正确安装。
docker run hello-world6查看版本
docker version显示
Client: Docker Engine - Community Version: 20.10.17 API version: 1.41 Go version: go1.17.11 Git commit: 100c701 Built: Mon Jun 6 23:02:57 2022 OS/Arch: linux/amd64 Context: default Experimental: trueServer: Docker Engine - Community Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:01:03 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.6 GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1 runc: Version: 1.1.2 GitCommit: v1.1.2-0-ga916309 docker-init: Version: 0.19.0 GitCommit: de40ad08.查看image
docker images9.修改默认的拉取镜像地址
/etc/docker/daemon.json9.卸载docker的时候用
apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷:
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd10.启动docker
11。停止docker
1.登录阿里云
2.直接搜索:镜像容器服务,点击进入控制台->镜像工具->镜像加速器
使用加速器可以提升获取Docker官方镜像的速度
| 加速器地址 |
|---|
| https://cgys1rlc.mirror.aliyuncs.com |
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://cgys1rlc.mirror.aliyuncs.com"]} sudo systemctl daemon-reloadsudo systemctl restart docker开始,在本机找镜像,有就用,没有就在dockerhub下载,如果dockerhub找到,下载本地运行,找不到报错。
docker version #显示版本信息docker info #显示更详细信息docker --help #帮助信息帮助文档地址:
docker images --help REPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest feb5d9fea6a5 8 months ago 13.3kB#解释REPOSITORY 镜像的仓库源TAG 镜像的标签IMAGE ID 镜像的idCREATED 镜像的创建时间SIZE 镜像的大小docker search mysql #搜索mysqldocker search mysql --filter=STARS=3000 #搜索出来的大于等于3000docker pull mysql #下载mysqldocker pull 镜像名[:tag]如果不写是默认latest 采用分层下载,联合文件系统,还有签名 ,docker.io是真实地址docker pull mysql==docker pull docker.io/library/mysql:latestdocker rmi-f 删除制定的镜像docker rmi -f id id 删除多个镜像docker rmi-f $(docker images -aq) 递归删除全部镜像docker run -it centos /bin/bash--name 给容器的别名-P 随机外部端口映射容器内部端口-p 指定端口 比如: -p 5000:5000 -d 容器后台运行 exit #容器停止退出ctrl+p+q#不停止退出docker psdocker -ps -a容器状态有7种:created(已创建)restarting(重启中)running(运行中)removing(迁移中)paused(暂停)exited(停止)dead(死亡)docker rm 容器id #删除制定的容器 ,如果删除正在运行的容器 -fdocker rm -f $(docker ps -aq) #删除所有容器docker ps -a -q|xargs docker rm #删除所有容器docker start 容器id #启动容器docker restart 容器id #重启容器docker stop 容器id #停止当前容器docker kill 容器id #强制停止容器docker run -d -it 镜像名docker logs -f -t 容器iddocker logs -t -f --tail 20 容器id查看20条 写一段脚本
while true;do echo kuangshen;sleep 1;donedocker top 容器id UID PID PPID C STIME TTY TIME CMDroot 18275 18256 0 15:17 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;doneroot 20274 18275 0 15:31 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1docker inspect 容器id返回的数据
[ { "Id": "345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d", "Created": "2022-06-17T07:17:00.304042239Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo kuangshen;sleep 1;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 18275, "ExitCode": 0, "Error": "", "StartedAt": "2022-06-17T07:17:00.902769488Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6", "ResolvConfPath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/resolv.conf", "HostnamePath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/hostname", "HostsPath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/hosts", "LogPath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d-json.log", "Name": "/vigilant_panini", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "CgroupnsMode": "host", "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DeviceRequests": null, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": null, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473-init/diff:/var/lib/docker/overlay2/fcb5c270854d34709d71337480437be0e69003ebca9daf39fd1796c293b88d2d/diff", "MergedDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473/merged", "UpperDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473/diff", "WorkDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473/work" }, "Name": "overlay2" }, "Mounts": [], "Config": { "Hostname": "345af6e6f41f", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "while true;do echo kuangshen;sleep 1;done" ], "Image": "centos", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "org.label-schema.build-date": "20210915", "org.label-schema.license": "GPLv2", "org.label-schema.name": "CentOS Base Image", "org.label-schema.schema-version": "1.0", "org.label-schema.vendor": "CentOS" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "dae4f55d59e869c39417f01d08885567f026c3682c52ef279a2d544fb30e5b63", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/dae4f55d59e8", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "90bf5aedb85730b19d7cfd87f940180253850909f80bd464ca857179becad8ef", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "1e8be48fc967fe40643b0e7ab45fd195182b044fc7e654375cb49dba6af35861", "EndpointID": "90bf5aedb85730b19d7cfd87f940180253850909f80bd464ca857179becad8ef", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } } } }]docker exec -it 容器id/bin/bash ##进入容器打开新终端docker attach 容器id #进入容器在原来的终端,可以看到之前的代码docker cp 容器id:容器内路径 目的主机路径attach 当前shell下attach连接制定运行镜像build 通过dockerfile定制镜像commit 提交当前容器为新的镜像cp 从容器拷贝制定文件或者目录到宿主机create 创建一个新的容器,不启动diff 查看容器变化events 从服务获取容器实时时间exec 在已存在的容器上运行命令export 导出容器的内容流作为一个tar归档文件对应importhistory 展示一个镜像形成历史images 列出系统当前镜像import 从tar包中的内容创建一个新的文件系统镜像info 显示系统的相关信息inspect 查看容器详细信息kill kill掉制定容器load 从一个tar包加载一个镜像[对应一个save]login 注册或登录一个docker服务器源logout 从当前原服务器退出logs 输出当前服务器日志port 查看映射端口对应的容器源端pause 暂停容器ps 列出容器列表pull 从docker源拉取镜像push 推送到制定镜像或者docker源restart 重启运行中的镜像rm一处一个或多个容器rmi 移除镜像run 创建一个容器并运行save 保存一个镜像为tar包[对应load]search 在dockerhub搜镜像start 启动镜像stop 停止镜像tag 给源镜像打标签top 看容器运行进程unpause 取消暂停容器version 查看docker版本wait 截取容器停止时的退出状态值status 查看docker 状态1.搜索镜像2.下载镜像3.启动镜像4。运行测试:docker run -d --name nginx01 -p 3344:80 nginxes需要挂载es需要内存es需要暴露多端口portainer(先用这个)docker图形化管理工具Rancher(ci/cd再用)docker commit 提交容器成为一个新副本docker commit -m "内容" -a "作者" 容器id 目标镜像名:[tag]防止容器删除后数据丢失,有了数据卷可以保存到电脑,将容器目录挂载到linux上面
-v 挂载docker run -it -v 主机目录:容器内目录 挂载完成之后:
Mounts里就会绑定两者的关系source 主机内地址destination docker容器内的地址容器内添加可以添加到外部,属于双向绑定了是
1.查找mysql2.下载镜像3.启动,需要数据挂载 不指定主机名 直接是容器内的目录: docker run -d -P --name nginx01 -v /ect/nginx nginx所有不指定宁docker容器内的卷,在没有指定 /var/lib/docker/volumes/xxx/_data区分具名匿名-v 容器内路径 是匿名挂载-v 卷名:容器内路径 具名挂载-v /宿主机器路径::容器内路径 指定路径挂载通过 -v 容器内路径:ro rw 改变读写权限ro 只读rw 可读可写一旦设置了这个容器权限 只能通过宿主机来操作,容器内部无法操作的 ,ro说明只能通过宿主机来操作,容器内部无法操作docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx:rw nginxdocker run -d -p --name nginx01 -v juming-nginx:/etc/nginx:ro nginx1编写镜像文件dockerfile1
FROM centosVOLUME ["volume01","volume02"]CMD echo "--------end------------"CMD /bin/bash执行docker命令执行文件注意上全路径,结尾有个空格点
docker build -f /home/player3/文档/dockerfile1.Dockerfile -t player3/centos .3.启动容器
docker run -it player3/centos /bin/bash4.查看文件
[root@d6bb2b70632d /]# lsbin etc lib lost+found mnt proc run srv tmp var volume02dev home lib64 media opt root sbin sys usr volume01我们生成的目录自动挂载的 5.在容器内创建一个目录,查看容器里是否有,查看匿名挂载路径
docker inspect d6bb2b70632d
"Mounts": [ { "Type": "volume", "Name": "d451a845fdd349e203b65f76080c57e070d7fcfecb9744363780ccc13db286b0", "Source": "/var/lib/docker/volumes/d451a845fdd349e203b65f76080c57e070d7fcfecb9744363780ccc13db286b0/_data", "Destination": "volume01", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "438fcc6181fde2565c4e8c995a3a1aa7973cc91fa345c2b396415f4453e3f8a9", "Source": "/var/lib/docker/volumes/438fcc6181fde2565c4e8c995a3a1aa7973cc91fa345c2b396415f4453e3f8a9/_data", "Destination": "volume02", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],6进入本地目录看是否出现,本地电脑添加一个都有
root@player3-TM1613:/var/lib/docker/volumes/d451a845fdd349e203b65f76080c57e070d7fcfecb9744363780ccc13db286b0/_data# lsdemo01.txt7.测试删除容器,发现这个本地挂载的数据还在
可以实现什么,比如多个mysql同步数据?
volumes-form 容器名,将容器数据卷挂载到其他的数据卷上,属于继承了上一层的数据卷,多个数据卷的数据相互复制,删除掉源头docker并不会对现有文件造成影响
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7docker run -d -p 3311:3307 -v /etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7 --volumes-form mysql01结论:容器之间的生命周期,一直到所有容器都没有使用为止,本地数据卷的数据是不会删除的。
1.编写dockerfile文件,文件首字母大写
2.dockerbuild 构件成一个镜像
3.docker run 运行镜像
4.docker push 发布镜像 (ducherhub,阿里云镜像仓库)
dockerFile:构建文件,定义了一切的步骤,源代码
dockerimages:通过dockerfile构建生成的镜像,最终发布和运行的产品,原来是jar,war。
docker容器:容器就是镜像运行起来提供服务器
基础知识:
1.每个保留关键字(指令)都是必须大写的
2.执行从上到下顺序执行
3。#表示注释
4.每个指令都会创建提交一个新的镜像层
FROM 指定基本镜像,一切镜像从这里开始MAINTAINER 负责人,一般姓名+邮箱RUN 构建镜像的时候需要运行的命令ADD 步骤,tomcat镜像的化tomcat的压缩包,添加内容WORKDIR 镜像的工作目录VOLUME 挂载的目录EXPOSE 对外暴露的端口CMD 命令行操作ENTRYPOINT 指定容器启动的时候要运行的命令,可以追加命令ONBUILD 当构建一个被继承dockerfile 这个时候就会运行ONBUILD的指令,触发指令COPY 类似add,将文件拷贝到镜像中ENV 设置构建的环境变量1.构建一个自己的centos镜像
mycentos.Dockerfile
FROM centosMAINTAINER kuangshen<24736743@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo A$MYPATHCMD /bin/bash2.build
docker build -f /home/player3/文档/mycentos.Dockerfile -t player3/mycentos .
3.运行 docker run -it dsoadihaso /bin/bash
查看镜像的构建过程 docker history odsakdlkasjdl
cmd 指定这个容器启动要运行的命令,之后最后一个会生效,可以被替代entrypoint 指定这个容器启动要运行的命令,可以追加命令cmd的file
FROM centosCMD ['ls',"-a"]docker build -f xxx -t cmdtest .docker run aa1111 会自动将最后的cmd命令执行,如果想追加命令不能在后面直接加应该这样写docker run aa1111 ls-alentrypoint的file
FROM centosENTRYPOINT ['ls',"-a"]docker build -f xxx -t entrypointtest .docker run aa1111 会自动将最后的cmd命令执行,如果想追加命令可以直接填上后面docker run aa1111 lducokerhub
1.地址:https://hub.docker.com 注册自己的账号
2.确定账号可以正常登录
3.在服务器上提交我们的镜像
dockerlogin --help-u -p用户名,密码4登录之后可以提交镜像,docker push
本地提交到远程尽量带上版本信息和tag
docker tag 5d0da3dc9764 player3/centos:0.0.1docker push player3/centos:0.0.1发布到阿里云
1.登录到阿里云2.找到容器镜像服务3.找到镜像仓库4.创建命名空间5。创建镜像仓库6其他参考官方文档ip addr
第一个是回环地址,第二个是内网地址,第三个是docker地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether a0:c5:89:32:9c:d1 brd ff:ff:ff:ff:ff:ff inet 192.168.10.109/24 brd 192.168.10.255 scope global dynamic noprefixroute wlp2s0 valid_lft 6054sec preferred_lft 6054sec inet6 fe80::8d0a:e31a:72d0:f111/64 scope link noprefixroute valid_lft forever preferred_lft forever3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:83:6a:8a:86 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft foreverdocker是如何处理网络问题
docker 可以ping通容器内部
正常电脑本机192.168.0.1 路由器地址,手机连接WiFi了,192.168.0.2,可以相互ping 可以相互ping通。
原理
1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只需要安装docker就会有一个网卡docker0
使用桥接模式,使用的技术是evth-pair 技术(虚拟设备接口)。
启动容器后出现的网卡是成对出现的,一端连着协议,一端彼此相连。
2.不同容器之间可以ping通的
docker exec -it tomcat2 ping xxx3.结论,tomcat1和tomcat是公用一个路由,docker0,所有容器不指定网络的情况下,都是使用docker0路由的,docker会给我们的容器分配一个默认的可用ip
4.docker中所有的网络接口都是虚拟的,虚拟转发效率高(内网传递文件)
只要容器删除,对应的网桥一对就没了
场景:编写了一个微服务,database.rul=ip;; 项目不重启,ip换掉了,希望处理这个问题,可以名字来访问容器.
想通过服务去ping tomcat02能ping通吗?
docker exec -it tomcat02 ping tomcat01ping不通
启动tomcat03
docker run -d -P --name tomcat3 --link tomcat02 tomcat01通过—link就解决了这个问题,反向是不可以ping通的
当我们配置容器的时候不配置ip会给容器配置默认ip,我们可以通过docker inspect去看
docker exec -it tomcat03 cat /etc/hosts通过查看tomcat03的docker host ,增加了tomcat02,tomcat01的本地映射
现在玩docker的时候已经不建议使用–link了,自定义网络,不适用docker0,docker0的问题,不支持容器名连接访问
docker network ls 查看所有的温昂罗 docker network rm id 删除某个网络 docker create 网络模式
bridge:桥接,默认
none:不配置网络
host:和宿主机共享网络
container:容器网络连接(用的少,局限很大)
测试
docker run -d -p --name tomcat01 tomcatdocker run -d -p --name tomcat01 tomcat --net bridge tomcat 上面的默认执行了这个docker0特点;默认,域名不能访问,--link可以打通连接我们可以自定一个网络
--driver bridge 模式
--subnet 192.168.0.0/16 多少个子网
--gateway 192.168.0.1 +网关路由
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynetroot@player3-TM1613:/home/player3# docker network lsNETWORK ID NAME DRIVER SCOPE430c633bd795 bridge bridge locala288f78f519b host host local74783c519ad2 mynet bridge local7d3b1deefd46 none null localdocker run -d -P --name tomcat01 --net mynet tomcat当你不适用–link也可以ping通名字 了
好处:不同的集群使用不同的网络,集群是安全和健康的
我们都知道网段不同是无法ping通的,如何打通docker0和自定义网络呢?
docker network connect 可以打通网络
docker network connect mynet tomcat01联通之后就是将tomcat01放到了mynet网络下,一个容器两个ip
1.创建网卡
docker network create redis --subnet 192.168.0.0/16 2.查看服务
docker network lsdocker network inspect redis3.创建6个redis服务
for port in $(seq 1 6); \do \mkdir -p /mydata/redis/node-${port}/conftouch /mydata/redis/node-${port}/conf/redis.confcat << EOF > /mydata/redis/node-${port}/conf/redis.confport 6379bind 0.0.0.0Cluster-enabled yesCluster-config-file nodes.confCluster-node-timeout 5000Cluster-announce-ip 192.168.0.1${port}Cluster-announce-port 6379Cluster-announce-bus-port 16379appendonly yesEOFdone4.启动redis(6个)
node-1
docker run -p 6379:6379 -p 16379: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 192.168.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.confnode-2
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \-v /mydata/redis/node-2/data:/data \-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \-d --net redis --ip 192.168.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.confnode-3
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \-v /mydata/redis/node-3/data:/data \-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \-d --net redis --ip 192.168.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.confnode-4
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \-v /mydata/redis/node-4/data:/data \-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \-d --net redis --ip 192.168.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.confnode-5
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \-v /mydata/redis/node-5/data:/data \-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \-d --net redis --ip 192.168.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.confnode-6
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \-v /mydata/redis/node-6/data:/data \-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \-d --net redis --ip 192.168.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.confredis中没有bash只有 sh
5.进入其中一个容器
docker exec -it redis-1 /bin/sh6执行集群命令
redis-cli --cluster create 192.168.0.11:6379 192.168.0.12:6379 192.168.0.13:6379 192.168.0.14:6379 192.168.0.15:6379 192.168.0.16:6379 --cluster-replicas 1输入yes
7.连接集群
redis-cli -c127.0.0.1:6379> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:209cluster_stats_messages_pong_sent:229cluster_stats_messages_sent:438cluster_stats_messages_ping_received:224cluster_stats_messages_pong_received:209cluster_stats_messages_meet_received:5cluster_stats_messages_received:4388.设置值
set a bget a可以正常获取9.查看主从节点,13的从是14
192.168.0.13:6379> cluster nodesdda9df6e38727c5ad0667278cb77f96d91973f65 192.168.0.15:6379@16379 slave f6dc83295bb2d7e9a0436fff935dbd6e441ef8cf 0 1655738988807 5 connectedcf8b3f0cc101c2bce9f57d10349676a37ed0538c 192.168.0.14:6379@16379 slave 2c1949dcb59bff7a4cb49b0af04d15978987daaa 0 1655738988507 4 connected2c1949dcb59bff7a4cb49b0af04d15978987daaa 192.168.0.13:6379@16379 myself,master - 0 1655738986000 3 connected 10923-1638386ad41983210bdd6fd8c723851820852e57f2c0d 192.168.0.12:6379@16379 master - 0 1655738988306 2 connected 5461-109221e1386760e3421384022567658601b9dcae3ef02 192.168.0.16:6379@16379 slave 86ad41983210bdd6fd8c723851820852e57f2c0d 0 1655738988000 6 connectedf6dc83295bb2d7e9a0436fff935dbd6e441ef8cf 192.168.0.11:6379@16379 master - 0 1655738987000 1 connected 0-546010.停止docker的node-3节点
docker stop node-311.重新获取,发现卡顿,ctrl+c结束后,重新登录,发现从节点已经切换成功
-> Redirected to slot [15495] located at 192.168.0.14:6379"b"192.1.构建springboot项目
正常编写web项目并且测试1.1下载dockerfile插件
2.打包应用
3.编写dockerfile
FROM java:8COPY *.jar /app.jarCMD ["--server.port=8080"]EXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]4.构建镜像
将dockerfile+jar包上传到服务器
docker build -t kuangshen666 .5发布运行
docker run -d -p 8080:8080 --name kunagshen-springboot-web kuangshen666本文来自博客园,作者:三号小玩家,转载请注明原文链接:https://www.cnblogs.com/q1359720840/p/16395260.html