上海骏域网站建设专家从化企业网站建设
news/
2025/9/27 0:47:05/
文章来源:
上海骏域网站建设专家,从化企业网站建设,wordpress目录列表,网络优化的基本方法俗话说“好记性不如烂笔头”#xff0c;编程的海洋如此的浩大#xff0c;养成做笔记的习惯是成功的一步#xff01;
此笔记主要是antlr4.13版本的笔记#xff0c;并且笔记都是博主自己一字一字编写和记录#xff0c;有错误的地方欢迎大家指正。 一、基础概念#xff1a;…俗话说“好记性不如烂笔头”编程的海洋如此的浩大养成做笔记的习惯是成功的一步
此笔记主要是antlr4.13版本的笔记并且笔记都是博主自己一字一字编写和记录有错误的地方欢迎大家指正。 一、基础概念
1、docker是基于Go语言实现的开源容器项目。诞生于2013年年初最初发起者是dotCloud公司。docker开源后受到业界广泛的关注与参与目前已有80
多个相关开源组件项目逐渐形成了围绕docker容器的完整生态体系。
官方网站https://www.docker.com/
官方文档https://docs.docker.com/
官方仓库https://hub.docker.com/ 账号密码cat4416/guowenjie 邮箱565335545qq.com
中文学习教程https://www.runoob.com/docker/docker-tutorial.html
源代码https://github.com/docker 2、docker在开发和运维中的优势
1更快速的交付和部署。
2更高效的资源利用。
3更轻松的迁移和扩展。
4更简单的更新管理。 3、docker的三大核心概念
1docker镜像类似于虚拟机镜像是一个只读的模板。类似于java类文件。
2docker容器是基于镜像创建的的应用运行实例。类似于生成的java对象。
3docker仓库类似于代码仓库用于集中存放镜像文件的仓库中心。
4、docker的特点
1环境的标准化。
2隔离性。
3可以快速创建和销户。
5、数据卷是一个可供容器使用的特殊目录它将主机操作系统目录直接映射进容器类似于linux的mount行为。
数据卷可以在容器之间共享和重用并且修改后会立马生效数据卷的更新不会影响镜像。 6、Dockerfile是由一行行指令语句组成指令又分为配置指令和操作指令。
7、容器与应用是同生共死的关系启动容器就是启动主进程当容器中指定的应用终结时容器也会自动停止此时容器处于stopped状态。
故需要注意有使用伪终端交互时不能使用exit命令终止终端交互应使用Ctrlpq快捷键退出方式。
8、禁止在docker环境下使用sudo命令来提升权限因为sudo命令会在当前进程下创建子进程来执行对应的命令。
与docker容器只有一个主进程的要求相背离并且宿主机向改容器发送信号量时变为被sudo进程收了而不是sudo后面对应的命令。
应该为使用gosu工具来代替此工具在提升权限的同时在当前线程下执行对应的命令使得容器继续保持一个主进程。
9、默认情况下创建容器时如果不知道网络则默认为bridge网桥模式容器与宿主机直接可以直接通过网桥进行通信但是如果外网需要
访问容器必须经过宿主机的ip同时还需要创建容器时主动暴露映射端口否则外网无法访问容器。但是宿主机可以直接访问容器没有暴露
的服务和端口不需要容器额外声明暴露。 二、基础功能
1、从Docker Hub网站上获取镜像直接执行命令docker pull Name[:TAG]
例如 docker pull ubuntu:18.04。如果不指定TAG则默认会选择latest标签即下载仓库的最新版本镜像。
如果不用官方的仓库获取也可以指定注册服务器的地址。例如 docker pull index.tenxcloud.com/docker_library/node
2、相同的镜像文件只能会有一个相同的容器也只能有一个但是一个镜像可以有生成多个容器。
镜像是否相同是根据 镜像名称版本号 来判断的。容器是否相同是根据容器ID来判断的。
3、容器与应用是同生共死的关系当容器中指定的应用终结时容器也会自动停止此时容器处于stopped状态。
故需要注意有使用伪终端交互时不能使用exit命令终止终端交互应使用Ctrlpq快捷键进行不停止退出方式。
4、配置镜像源加速使用国内镜像来加快docker的镜像访问
1具体配置可参考https://docs.docker.com/engine/reference/commandline/dockerd/。
2创建并配置docker的守护进程vim /etc/docker/daemon.json
{
registry-mirrors:[http://hub-mirror.c.163.com]
}
3重新加载配置使其生效systemctl daemon-reload
4重启docker systemctl restart docker 5、docker的linux版本安装参考https://docs.docker.com/engine/install/centos/#install-using-the-repository
6、docker的命令参数可以用或者空格来赋值参数比如 --networkhost 或者为 --network host 都是一样的意思。 三、使用笔记
1、docker常用操作命令
1查看当前linux系统下有哪些docker镜像文件docker images 可以加 --filter 过滤。
2查看当前运行的docker镜像docker ps 如果需要查看全部容器包括已经停止的可以加 -a如果需要查看容器大小加上 --size
3进入运行的镜像环境 docker exec -it 《镜像CONTAINER ID》 /bin/bash
4给镜像增加别名和打标签docker tag 《镜像名:版本》 《新别名:版本》
5查看镜像详细信息docker inspect 《镜像名:版本》 或者查看容器或则数据卷 《容器名》、《数据卷名》
6在镜像仓库中搜索镜像 docker search 《keyword》
7删除本地镜像docker rmi 《镜像名:版本》 如果镜像有运行中的容器删除会报错可以加 -f 强行删除
8删除容器docker rm 《容器ID》
9清除镜像遗留文件或未使用的镜像 docker image prune
10根据镜像生成容器实例并运行 docker run 《镜像ID》
11启动已存在的容器 docker start 《容器ID》如果容器本身是运行状态则忽略。
12镜像创建用commit、import和build三种形式的子命令。
13存出和载入docker save -o 和 docker load -i
14上传镜像到仓库中心docker push 《镜像名:版本》 相对应的拉取镜像用 docker pull 《镜像名:版本》
15查看docker信息docker info
16查看docker的镜像层docker history 《镜像名:版本》
2、创建镜像
1基于已有容器创建对于在容器环境定制化后进行多机部署非常实用
命令docker commit [options] 《container》 《repository:tag》
示例docker commit -m me added a new file -a Cat 9ca1fdd53ac0 mytestubuntun:1.0
说明-m 表示提交信息 -a表示作者 9ca1fdd53ac0是容器idmytestubuntun:1.0 是新镜像的名称和标签。 2基于本地模板导入
命令docker import [options] 《repository:tag》
说明导入一个镜像可以使用OpenVZ提供的模板来导入或者用其他已导出的镜像模板来创建。 3基于Dockerfile创建
命令docker build
说明创建镜像最常见的方式。Dockerfile是一个文本文件利用给定的指令扫描基于某个父镜像来创建新镜像。 3、存出和载入镜像
1存出镜像
命令docker save -o 《镜像文件名称》 《repository:tag》
示例docker save -o ubuntu_latest.tar ubuntu:latest
说明导出的ubuntu_latest.tar镜像文件默认保存到当前目录下可以将此文件分享和传输到其他机器使用。 2载入镜像
命令docker load -i 《镜像文件》
示例docker load -i ubuntu_latest.tar 或者 ocker load ubuntu_latest.tar
说明导入成功后可以使用docker images命令镜像查看和原镜像一致。如果重复导入不会生效相同镜像只会有一个。
4、容器操作
1创建容器
命令docker create 《repository:tag》
示例docker create -it ubuntu:latest
说明根据ubuntu:lates镜像创建容器并且容器是处于停止状态需要通过start命令启动。
常用options选项
-d, --detachtrue|false 是否后台运行容器默认为false
--expose[] 指定容器会暴露出来的端口或端口范围
-i, --interactivetrue|false 保持标准输入打开默认为false
-t, --ttytrue|false 是否分配一个伪终端默认为false
-p, --public[] 指定如何映射到本地主机端口。小字母p用法为 宿主机端口号:容器端口号。 大字母P用法为 宿主机端口号随机容器里应用使用的端口
--rmtrue|false 容器退出后是否自动删除不能跟-d同时使用
--name 指定容器的别名
-m, --memory 限制容器内应用使用的内存单位可以是b、k、m或g
--ulimit[] 限制最大文件数、最大进程数等
-e 设置容器内的环境变量
--link name:alias 链接到其他容器
2启动容器
命令docker start 《容器ID》
3创建并启动容器
命令docker run 《repository:tag》
示例 docker run -it ubuntu:latest /bin/bash
示例 docker run -d ubuntu:latest
说明根据 ubuntu:latest镜像创建容器并用交互模式守护态启动容器可以使容器一直在后台运行不停止。
如果退出后容器也停止可以使用start重新进行启动。具体的可选参数可参考create命令。
常用示例 docker run -d -p 8081:8080 --privilegedtrue --name mytomcat tomcat:8.0.52
说明根据 ubuntu:latest镜像创建容器并用交互模式守护态启动容器可以使容器一直在后台运行不停止。
端口号映射小字母p用法为 宿主机端口号:容器端口号。 大字母P用法为 宿主机端口号随机容器里应用使用的端口。
--privileged表示容器拥有特权比如操作内核模块修改网卡MAC地址等。
常用示例 docker run --name mysqldb -e MYSQL_ROOT_PASSWORDadmin -d mysql:5.7
docker run -d -p 8081:8080 --name web --link mysqldb:datadb tomcat:8.0.52
说明根据 ubuntu:latest镜像创建容器并用交互模式守护态启动容器可以使容器一直在后台运行不停止。
-e是设置容器内的环境变量此处是设置mysql的root用户的密码。在创建并启动好mysql的容器后然后再
创建web应用容器并直接与mysql容器相连接相当于容器之间建立了虚拟通道使其不再需要经过宿主机来通信。
可以进入web容器内部查看/etc/hosts文件来确认容器链接关系。
4查看容器输出
命令docker logs 《容器ID》
示例docker logs 9ca1fdd53ac0
常用options选项
--details 打印详细信息
-f 持续保持输出
5重启容器
命令docker restart 《容器ID》
6暂停容器
命令docker pause 《容器ID》
7取消暂停容器
命令docker unpause 《容器ID》
8清除已停止的容器
命令docker container prune
说明会清除所有的已停止容器
9进入容器
命令docker exec 《容器ID》 或者用 docker attach 《容器ID》
示例docker exec -it 9ca1fdd53ac0
说明当使用-d守护态运行容器后无法查看容器中的信息也无法进行操作此时就可以使用exec进入容器内部操作。加上参数 -u root 可以获得容器root权限。
使用attach比较简单方便但是会导致多个窗口的显示都是一样的都是同一个窗口视图同时还依赖于容器创建指定时的执行命令。
常用options选项
-d, --detach在容器中后台执行命令
-i, --interactivetrue|false 保持标准输入打开默认为false
-t, --ttytrue|false 是否分配一个伪终端默认为false
10删除容器
命令docker rm 《容器ID》
说明删除容器。默认情况下只能删除已停止运行的容器。
常用options选项
-f, --force是否强行终止并删除一个运行中的容器
11导出容器
命令docker export 《容器ID》
示例 docker export -o test_container_ubuntu.tar
说明导出容器不管容器是否运行均可导出。导出文件保存到当前目录下并命名为test_container_ubuntu.tar
常用options选项
-e, --output指定导出的容器文件名称
12导入容器变成镜像
命令docker import 《容器文件》 《repository:tag》
示例docker import test_container_ubuntu.tar myubuntu:V1.0
说明容器文件导入后只能变为镜像文件不能直接是变为容器。和docker load载入镜像命令非常相似。
但是容器文件导入后会丢失历史记录和元数据载入镜像记录更完整体积更大。 13查看容器内的进程
命令docker top 《容器ID》
说明会打印出容器内的进程信息包括PID、用户、时间、命令等。 14查看容器的统计信息
命令docker stats 《容器ID》
说明会打印出容器的CPU、内存、存储、网络使用等统计信息。
15复制文件到容器
命令docker cp 《宿主机文件》 《容器ID》:《容器路径》
示例docker cp main_content.txt f850abc5c7e7:/home
说明将宿主机的main_content.txt拷贝到容器的home目录下。
16查看端口映射
命令docker port 《容器ID》
说明查看容器端口与宿主机的映射关系。
17退出容器
说明exit 命令 实际是终止终端同时因为应用已停止导致容器也停止。
如果是想退出容器但是不停止可以用 Ctrlpq 快捷键。
18停止容器
命令 stop 停止命令先发送终止信号10秒后发送kill信号给容器用于保存临时资源的时间推荐此方式来停止容器。
命令 kill 杀死命令直接发送kill信号
19容器CPU限制
命令 docker run --cpu-period100000 --cpu-quota 20000 《repository:tag》
说明在创建并启动容器的时候控制cpu在100000微秒时间内设定CPU的占用上限为20%。
可以在容器里执行 dd if/dev/zero of/dev/null 执行空文件复制测试CPU的使用吞吐量。
另外可以使用--cpu-shares 选项来设定容器的CPU占用权重。
20容器内存限制
命令docker run --memory 200M --memory-swap200M 《repository:tag》
说明在创建并启动容器的时候控制内存使用的最大为200M交换分区的容量也为200M。
21容器磁盘限制
命令docker run --blkio-weight 600 《repository:tag》
说明在创建并启动容器的时候磁盘的读写权重为600注意默认容器磁盘权重为500。
如果需要限制磁盘使用的空间大小可为每个容器创建一个单独的用户然后设置每个用户的磁盘使用空间量。
5、数据卷操作
1创建数据卷
命令docker volume create 《options》 《数据卷名称》
示例docker volume create -d local test
说明在docker的默认目录/var/lib/docker/volumes 路径下创建test目录。 2列出已有数据卷
命令docker volume ls
说明查看已存在的数据卷
3清理无用数据卷
命令docker volume prune
说明清理无用的数据卷
4删除指定数据卷
命令docker volume rm 《数据卷名称》
说明删除指定的数据卷
5使用现有数据卷
命令docker run --mount type《数据卷类型》, source《源目录》, destination《容器目录》 myubuntu:V1.0
示例docker run --mount typevolume, source/test, destination/mytest myubuntu:V1.0
5创建容器并指定数据卷
命令docker run -v 《宿主机目录》:《容器目录》
示例docker run -it -v /home/docker_demo:/home:rw --name testmount myubuntu:V1.0 /bin/bash
说明根据myubuntu:V1.0镜像创建容器并将宿主机的/home/docker_demo目录挂载到容器的/home目录下注意源文件是共用的容器会自动创建目录
拥有rw读写权限默认也为rwro则为只读同时用虚拟终端模式交互。
6查看数据卷信息
命令docker inspect 《数据卷id》
示例docker inspect vuetclfddcon
说明查看vuetclfddcon数据卷的信息可以看到厂家时间挂载宿主机的路径等信息。 四、Dockerfile的使用
1、Dockerfile文件是由一行行的指令构成指令基础知识如下
1每条保留字指令都必须为大写字母且跟随至少一个参数。
2指令安装上到下顺序执行。
3指令的注释采用#符号。
4每条指令的执行都会创建一个新的镜像层。
2、通常使用自定义的Dockerfile创建镜像的过程如下
1新建一个目录/root/dockertest作为上下文目录一般情况下Dockerfile都放到此目录或者通过-f选项来执行路径。
2新建和编写Dockerfile文件。通常都是在一个基础镜像上面加工改进而来的。
3用docker build命令创建新镜像放到本地镜像仓库命令示例 docker build -t test:6 .。
4使用run命令将新镜像运行起来。
3、简单的Dockerfile文件编写参考
ARG VERSION7
FROM centos:${VERSION}
LABEL descgwj_df date2022-11-16
ENV APP_VERSION1.1.0
ENV PATH $PATH:/usr/local/bin11
VOLUME [/votest1,votest2]
WORKDIR /home/abc/
ONBUILD RUN mkdir mydir
RUN echo hellow word readme.txt
EXPOST 8080
CMD [/bin/bash]
4、Dockerfile文件常用指令
1ARG定义创建镜像过程中的临时变量。 ARG name [default value] 定义并指定默认值。使用${}来读取变量值。
当镜像编译成功后变量将不再存在。可以使用 docker build --build-arg 参数名值来覆盖文件配置。
2FROM指定所创建镜像的基础镜像即在某基础镜像上进行增加自定义的指令。
如nginx、redis、mysql、centos等基础服务或系统的基础镜像基础上构建。
3LABEL指令可以为生成的镜像添加元数据标签信息。LABEL keyvalue keyvalue 的格式号左右两边不要有空格。
每个LABEL标签都会生成一个镜像层建议将多个标签合并在一个指令。创建镜像后可以通过docker inspect 查看标签信息。
另外可以用docker image --filter labelkeyvalue来方便查询镜像。
4EXPOST暴露容器运行时的监听端口给外部的宿主机。EXPOSE 端口号
该指令只是起到声明作用通过宿主机暴露出去时还是需要通过-p参数来映射。
5ENV指定环境变量。在镜像生成过程中或启动的容器中都会存在此环境变量。注意与ARG的区别是ARG是临时的变量后续容器中不会存在。
注意如果同一行里面进行更改变量和赋值是优先做了赋值操作后再更改变量。可以使用 docker run --env 参数名值来覆盖文件配置。
6CMD容器启动后执行的命令。如果在使用run命令的时候有指定命令则会覆盖Dockerfiile文件里面CMD定义的命令。
多个CMD则最后一个命令生效。shell格式为 CMD echo docker so easy, exce格式为 CMD[echo,docker so easy]。
如果当前Dockerfile里面没定义CMD命令则会默认使用父镜像文件的CMD命令。可以使用 docker run 执行命令 来覆盖文件配置。
7ENTRYPOINT命令与CMD命令相似都是指定容器启动后执行的命令。通常和CMD结合起来使用ENTRYPOINT命令指定命令
CMD则变为指定执行命令的参数。多个ENTRYPOINT则最后一个命令生效。可以使用 docker run --entrypoint 来覆盖文件配置。
8VOLUME创建一个数据卷挂载点。在容器启动后就自动创建好文件里编写的挂载点。
例如 VOLUME [/vuetclfddcon] 则会在容器里的根目录下创建vuetclfddcon目录挂载在宿主机的默认docker数据卷目录下的一个uuid文件夹下。
9WORKDIR指定工作目录。如果该目录不存在会自动创建。后面的指令工作目录都将会在此目录下包括docker run启动后也是在此目录下。
可以使用docker run -w 参数覆盖文件配置。
10USER切换用户。默认容器的初始用户为root用户通过USER命令进行切换并影响后面的镜像层比如RUN、ENTRYPOINT、CMD等命令的执行身份。
注意切换的用户必须已经存在的否则无法切换。通常切换用户不建议使用USER命令而是借助第三方工具gosu来执行。
11ONBUILD是一个特殊指令他后面跟的是其他指令而这些指令在当前镜像构建时并不会执行而是在以当前镜像为基础镜像去构建下一级镜像时
才被执行。唯有此指令是为帮助别人定制镜像而准备的。格式为 ONBUILD 其他指令 。
12HEALTHCHECK健康检查指令用于判断容器主进程的服务状态是否正常后面跟CMD命令。当镜像指定了HEALTHCHECK指令后启动容器时初始状态为starting
检查成功后变为healthy如果连续失败则变为unhealthy。支持的选项为 --interval间隔秒默认30秒 --timeout时长秒默认30秒 --retries次数默认3次。
13RUN执行命令指令默认使用的是终端的/bin/sh -C 来执行shell脚本。当指令较长时可以使用\来换行。例如表示前面命令执行成功后执行||表示执行失败时执行
RUN apt-get install -y libsnappy-dev zliblg-dev libbz2-dev \ rm -rf /var/cache/apt
14COPY复制文件命令将本地宿主机上的目录复制到新的一层的镜像内的位置构建后的镜像和启动的容器都会存在此文件可以使用通配符同时拷贝多个文件。
格式为 COPY 源宿主机路径 容器目标路径。容器目标路径的目录不需要先创建在构建的时候如果不存在会自动创建另外源文件的元数据信息都会保留
比如读、写、文件变更等时间。
注意源宿主机路径 是在当前编译Dockerfile文件目录的上下文目录下的相对路径。如果无法找到则会去/var/lib/docker/tmp/临时目录下读取文件。
故建议是将需要拷贝的文件放到与Dockerfile文件同级目录里使用相对路径拷贝。
15ADD复制文件命令与COPY命令性质基本一致在COPY基础上增加了一些功能比如ADD 源路径 可以是一个URL地址docker引擎会视图去下载链接文件到目标路径。
另外使用ADD命令的源路径是一个tar压缩文件的话会自动解压文件到目标路径去。 5、特殊的虚拟镜像scratch表示空白的镜像。接下来所写的指令作为镜像层的第一层不以任何操作系统为基础直接将可执行文件复制到镜像。
类似contosubuntu等镜像都是使用空白镜像。 五、Docker网络
1、操作docker的网络均通过命令 docker network 《选项》 来执行。 2、通过执行命令来查看docker的网络
1查看docker的网络docker network ls
2如果要查看完整的网络iddocker network ls --no-trunc
3过滤驱动docker network ls --filter driverbridge
3、创建网络 docker network create 《网络名》 默认创建的网络为bridge模式。
4、查看网络信息 docker network inspect 《网络名》
5、删除网络 docker network rm 《网络名》
6、将正在运行的容器连接到网络docker network connect 《网络名》 《容器名》
7、断开容器的网络连接docker network disconnect 《网络名》 《容器名》
8、将正在运行的容器连接到网络指定容器ipdocker network connect --ip 《容器ip》《网络名》 《容器名》
9、启动时将容器连接到网络docker run -itd --network《网络名》 《即将启动的容器》
10、删除所有无用的网络docker network prune
11、网络模式
1bridge为每一个容器分配、设置IP等并将容器连接到docker0的虚拟网桥。
2host容器不会虚拟出自己的网卡、IP等而是使用宿主机的IP和端口。
3none容器有自己独立的Network namespace但是没有进行任何的相关配置网络也只有一个回环地址。
4container和一个指定的容器共享IP端口范围等。
5用户自定义网络通过定义自己的网络同一个网络的容器彼此可见。docker run -network mynet 《repository:tag》
12、概念说明在安装docker后会自动创建bridge桥接网络并且在网卡上创建的虚拟网卡名称为docker0此docker0相当于交换机用于宿主机与容器进行通信。
默认情况下容器之间可以通过ip进行ping通但是如果通过容器名称则不通此时可以通过创建自定义网络然后将需要通信的容器都加入到此网络中
就可以通过容器名称来通信用于代替官方即将过期的--link 联通方式。 六、实战操作
1、部署redis服务单节点
步骤一查询redis镜像docker search redis 推荐使用官方镜像即OFFICIAL为OK的则为redis官方提供的镜像。
步骤二下载redis镜像docker pull redis:7.0.5 具体有哪些版本可以通过浏览 https://hub.docker.com/_/redis 网页查看Supported tags and respective Dockerfile links。
步骤三编写定制化的redis.conf文件放在/home/docker_demo/redis目录下。
步骤四创建容器并启动。docker run --name myredis -d -p 7000:7000 -v /home/docker_demo/redis:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
步骤五查看启动日志 docker logs 《容器id》。
步骤六使用redis的客户端连接查看 docker run -it redis:7.0.5 redis-cli -h 《宿主机ip》 -p 7000
附加redis容器使用的系统为debian操作系统如果想要在线安装软件首先需要更新apt安装工具执行命令 apt-get update等待更新成功后就可以进行安装软件。
例如安装ps进程查看工具可以使用 apt-get install -y procps
例如安装ifconfig网络查看工具可以使用 apt-get install -y net-tools
例如安装ip查看工具可以使用 apt-get install -y iproute2
例如安装vim查看工具可以使用 apt-get install -y vim
例如安装文件上传工具可以使用 apt-get install -y lrzsz
例如安装keepalived高可用性工具可以使用如果加-y需要--force-yes apt-get install keepalived
如果想安装加速可以配置国内镜像163安装源在/etc/apt/sources.list.d/目录下增加163.list配置配置后需要执行apt-get update。 2、部署redis服务使用cluster官方集群
步骤一下载redis镜像docker pull redis:7.0.5
步骤二创建自定义网络 docker network create --subnet172.18.0.0/16 myredisnet
步骤三创建容器并启动(集群要求至少3个主节点如果要从节点则共需要6个节点)
docker run --name myredis01 -d -p 7010:6379 --netmyredisnet --ip172.18.0.3 -v /home/docker_demo/redis/cluster:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
docker run --name myredis02 -d -p 7011:6379 --netmyredisnet --ip172.18.0.4 -v /home/docker_demo/redis/cluster:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
docker run --name myredis03 -d -p 7012:6379 --netmyredisnet --ip172.18.0.5 -v /home/docker_demo/redis/cluster:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
docker run --name myredis04 -d -p 7013:6379 --netmyredisnet --ip172.18.0.6 -v /home/docker_demo/redis/cluster:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
docker run --name myredis05 -d -p 7014:6379 --netmyredisnet --ip172.18.0.7 -v /home/docker_demo/redis/cluster:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
docker run --name myredis06 -d -p 7015:6379 --netmyredisnet --ip172.18.0.8 -v /home/docker_demo/redis/cluster:/usr/local/etc/redis/conf/ redis:7.0.5 redis-server /usr/local/etc/redis/conf/redis.conf
步骤四进入其中一台redis的容器内部 docker exec -it myredis01 bash
然后再容器内部执行命令创建集群组合 redis-cli --cluster create 172.18.0.3:6379 172.18.0.4:6379 172.18.0.5:6379 172.18.0.6:6379 172.18.0.7:6379 172.18.0.8:6379 --cluster-replicas 1
然后会列出master和slave节点分别是哪几个并且要求输入 yes进行确认。
步骤五执行 redis-cli -c 以集群方式进入redis的客户端后执行 cluster info 可以查看到集群的节点信息。
附加
1执行keys * 时查看的只是当前指定重定向后的某台服务器的key集合如果想看全部集群的key可以执行命令172.18.0.5:6379是其中一个集群节点即可
redis-cli -c --cluster call 172.18.0.5:6379 keys \*
2在cluster集群搭建好后后期想扩容redis节点可以执行命令
增加master节点redis-cli --cluster add-node ${要添加的节点地址} ${集群中任意地址}
示例redis-cli --cluster add-node 172.18.0.9:6379 172.18.0.3:6379
增加slave节点redis-cli --cluster add-node ${要添加的节点信息} ${集群中任意地址} --cluster-slave --cluster-master-id ${对应master节点的ID}
示例redis-cli --cluster add-node 172.18.0.10:6379 172.18.0.3:6379 --cluster-slave --cluster-master-id a8d04103c8679311267e40de3152b091e56a0148
给新增节点分配槽位redis-cli --cluster reshard ${集群中任意地址} --cluster-from {原节点ID} --cluster-to {目标节点ID} --cluster-slots {槽位数} --cluster-yes
示例redis-cli --cluster reshard 172.18.0.3:6379 --cluster-from 89b0db9c15cd453e1c6f48040691bad405154229 --cluster-to a8d04103c8679311267e40de3152b091e56a0148 --cluster-slots 2500 --cluster-yes 3、部署percona数据库服务使用keepalivedhaproxypxc集群
附加percona数据库是基于mysql的基础上做了增强型的二次开发的开源数据库pxc集群模式是官方提供的所有节点的数据节点是通过同步复制的方式进行。 4、部署java应用
方式一拉取java镜像docker pull java:8 然后运行此容器然后将java应用传输到此目录下并运行从而提供web服务。
方式二基于java镜像文件自己编写Dockerfile文件主要是将自己的java应用通过数组卷方式挂载容器里生成镜像文件然后启动运行。
5、部署web前端项目使用nginx
步骤一查询nginx镜像docker search nginx 推荐使用官方镜像即OFFICIAL为OK的则为redis官方提供的镜像。
步骤二下载nginx镜像docker pull nginx:1.11.8 具体有哪些版本可以通过浏览https://hub.docker.com/_/nginx/tags 网页查看。
步骤三创建/home/docker_demo/vue_tclfdd文件夹编写定制化的nginx.conf文件放在/home/docker_demo/vue_tclfdd/conf目录下。
步骤四在/home/docker_demo/vue_tclfdd目录下将h5前端项目tclfdd拷贝到此目录下。
步骤五创建Dockerfile文件继承nginx镜像进行编写也可以不需要Dockerfile文件直接用nginx镜像。
步骤六编译生成镜像文件 docker build -t ng_tclfdd:7.0 .
步骤七创建容器并启动。docker run --name mynginx -d -p 9523:9523 --privilegedtrue ng_tclfdd:7.0
6、web前端高可用部署使用keepalived冗余nginx
步骤一进入已经部署了nginx的容器容器必须是有privileged权限 docker exec -it mynginx bash
步骤二nginx镜像默认使用的是debian系统更新安装工具进行在线安装软件。执行apt-get update
步骤三在线安装keepalived。执行 apt-get install keepalived
步骤四进入/etc/keepalived目录创建keepalived.conf文件并写入相关配置信息官网配置说明地址https://www.keepalived.org/manpage.html。
步骤五启动keepalived服务。执行 service keepalived start 输出 [....] Starting keepalived: keepalived. ok 则表示启动成功。
启动成功后注意需要关注容器占用的磁盘大小如果磁盘占用不断增大说明keepalived存在兼容问题需要先停止此服务
将容器内的/var/log权限放开 执行 chmod -R 777 /var/log或者将宿主机的keepalived给安装上去再启动容器的此服务。
步骤六在宿主机上安装keepalived服务将容器的虚拟vip与宿主机的vip做映射使得外网可通过宿主机vip来转发到容器vip访问实现容器nginx的高可用。
执行在线安装 yum install keepalived 安装成功后进入/etc/keepalived目录创建keepalived.conf文件并写入相关配置信息。
步骤七启动宿主机的keepalived服务执行 service keepalived start可在 /var/log/messages 日志下查看服务输出。启动成功后就可以通过
宿主机的vip来访问。
附加
1keepalived是基于lvs来通过虚拟ip访问的。其原理就是通过虚拟ip转移到可用服务器保持高可用。
手工给网卡创建虚拟ip地址ifconfig ens192:1 10.0.17.247 netmask 255.255.255.0 up
手工删除网卡的虚拟ip地址ip addr del 10.0.17.247 dev ens192:1
2由于keepalived的启动没写入到docker的CMD命令内如果容器被重启需要进入容器再执行启动keepalived服务。
3上面的搭建keepalived高可用没有额外写检测nginx服务是否可用的脚本由于nginx启动后是容器主进程命令故如果nginx宕机 容器也基本会死掉keepalived也会停掉被其他容器keepalived检测到将vip转移。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916768.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!