C++学习之游戏服务器开发十一DOCKER的基本使用
目录
1.多实例部署方案
2.容器的概念
3.docker初识
4.docker仓库
5.docker镜像
6.docker容器
7.docker和虚拟机的区别
8.docker命令解释
9.dockerfile构建镜像
10.离线分发镜像
1.多实例部署方案
redis 命令( redis-cli XXXX )
set key value: 存数据( value )
get key :显示数据
del key :删除一对数据
lpush , rpush 存链表节点
lrange 遍历
lrem 删除 n 个节点
2.容器的概念
redis 程序结构
cs 结构,数据放在服务进程的内存中
命令行客户端连接本地或远程地址访问
多种 API 可以访问: hiredis
程序结构简单,内部的数据结构和算法优秀
hiredisAPI 使用
C 函数库,包含头文件 <hiredis/hiredis.h> , 编译时指定链接参数为 -
L/usr/local/lib -lhiredis
redisConnect 跟数据库建立链接( redisFree 释放掉)
redisCommand 发命令并通过返回值取出结果( freeReplyObject 释
放掉)
运行时若提示找不到共享库,则在 .bashrc 最末端添加一句 export
LD_LIBRARY_PATH=/usr/local/lib , 重新打开终端运行
3.docker初识
怎样写框架
面向对象的软件设计 1. 画用例图 ---- 》分析需求(不要考虑太多扩展,不要考虑实现方
式)
回显功能的实现方式
kernel 类:基于 epoll 调度所有通道
通道抽象类:
写出缓冲区函数
将数据追加到缓冲区的函数
虚函数:读,写,获取 fd ,数据处理
标准输入通道子类
重写读和处理的函数
处理数据的函数:将数据交给输出通道
标准输出通道子类
重写写数据的函数
kernel 和通道类的调用
创建通道对象(成员赋值)
添加通道到 kernel
run
4.docker仓库
添加 FIFO 文件通道支持
写 FIFO 类继承 Ichannel
重写虚函数的过程中,重构抽象类 Ichannel
添加构造函数的参数用来表示管道文件和方向
添加转大写功能
写新类(数据处理类)封装转换大写字母的功能
拆掉标准输入通道和标准输出通道的包含关系,在标准输入通道中
包含数据处理类的对象
数据处理类中包含输出通道对象
5.docker镜像
责任链模式
处理者类和消息类
处理者类需要子类重写内部处理函数和获取下一个处理者的函数 处理者类的外部处理函数:当前环节处理 --- 》获取下一个环节 --- 》
下一个环节处理
重构当前代码
抽象通道类继承 handler 类,重写 internel_handle 函数
定义消息类: IO 方向和字节数据
功能处理类继承 handler 类
输入通道类 getnext 返回功能处理对象
功能处理类的 internel_handle 函数内直接调用 zinx_sendout 输出数
据
通道类, internel_handle 函数:
消息方向 IN , readfd
消息方向 OUT ,缓存 bytemsg 对象中的 content
epollin 事件:创建 in 方向消息 -- 》交给 channle 的 handle 函数
epollout 事件:调用通道的 flushout
6.docker容器
7.docker和虚拟机的区别
8.docker命令解释
Sourceinsight 快捷键
ctrl+o 弹出文件选择栏
alt+L 弹出符号栏
ctrl+ 鼠标左键 跳转到函数定义
alt + < 回退 alt+ > 下一个
ctrl+1 显示调用关系
shift+f8 高亮单词 ctrl+shift+f8 取消所有高亮
f7 查找符号
9.dockerfile构建镜像
分发框架
库分发:编译成 libXXXXX.so
编译参数: -fPIC -shared Makfiel 中添加 install 目标,拷贝库文件和头文件到 /usr/lib
和 /usr/include
10.离线分发镜像
sudo dpkg --remove cmake
sudo dpkg --remove libcurl4
容器技术
容器是操作系统和应用程序之间的一个虚拟层
应用程序可以在容器中运行(跟在操作系统中运行相同)。容器以
应用程序的形式运行在操作系统中
docker 程序架构
cs 架构
容器,镜像都是由守护进程管理
docker 的三大核心概念
镜像
静态的一组环境的集合
运行:创建容器,在容器中运行 XXXX
手动创建:
下载原始镜像
在基于该镜像运行 bash ,装所需软件
将装好软件的容器提交为新的镜像
脚本创建:
写 Dockerfile :规定镜像创建的过程
构建镜像
容器
运行时的一组环境,基于某个镜像创建
容器的修改不会影响镜像 运行容器:
守护运行 -d
端口映射 : -p 外端口号 : 内端口号
共享文件系统: -v 外绝对路径 : 内绝对路径
容器开始于要运行的进程,结束于进程退出
删掉所有容器:
仓库( dockerhub )
类似 github ,是一个存储镜像的公共仓库
docker pull 作者 / 镜像名 : 标签名 拉去镜像
docker push 分享镜像到仓库中(分享之前先改名 -- 》 docker tag )
脚本创建 docker 镜像
1. 指定基础镜像( FROM XXXX )
2. 装环境( RUN , WORKDIR , COPY )
3. 指定执行点( ENTRYPOINT )
ENTRYPOINT ["XXX"] :
XXX 是且仅是镜像所运行的程序
CMD 命令指定你的内容会作为 XXX 的参数
run 镜像名 xxxx : xxxx 会作为 XXX 的参数
CMD ["XXX"]
镜像缺省运行 XXX 程序
run 镜像名 xxxx :容器会执行 xxxx 程序
离线分发镜像
导出容器: docker export -o XXX.tar af85: 将容器中固化的内容导
出
导入镜像: docker import XXX.tar my_image:my_tag :导入的镜像
只包含原容器内的文件系统,缺失了镜像执行点,暴露端口,原镜
像的构建历史