一、什么是docker
Docker的客户端通过命令行或者客户端向Docker的服务端发起创建容器的请求;服务端接收请求之后,到镜像文件仓库管理器中拉取相应的镜像文件,并运用该镜像文件,运行过程中的镜像文件就是容器。容器是由镜像实例化而来,这和面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。
二、docker的优点
1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
三、docker安装
查看当前系统版本,内核版本高于3.1才能安装docker。
#uname -r
下载安装docker
#yum -y install docker
如果报错需要检查系统时间,因为自己通常环境都为虚拟机,时间和网络时间容易出现不同步的问题。
1)检查虚机是否能够ping通网络
2)使用ntpdate命令同步网络时间 -u 参数可以穿越防火墙和主机同步
# ntpdate -u ntp.api.bz
安装完成后检查docker的版本
#docker version
启动docker服务
#systemctl start docker
设置docker开机启动
#systemctl enable docker
查看docker运行状态
#systemctl status docker
四、创建容器,端口映射
1、创建容器
因为是安装在容器里的,可以从官网拉下来一个系统镜像可以选择不同的系统镜像。
#docker pull centos:7.8.2003
这里一般会出现两个问题
1)现在新版的docker需要去官网注册一个账户。docker pull 其他系统镜像时会有报错同时会有官网网址提示登陆,复制到浏览器注册,并返回命令行执行
# docker login
2)从官网拉下来镜像会非常的慢,经常会连接超时,还会出现HTTP证书错误,无法提供服务。
首先docker login 登录
镜像仓库证书错误
在 /etc/docker/daemon.json 文件中,增加:
{
"insecure-registries": ["core.harbor.chenshaowen.com:5000"]
}
修改镜像源,加速镜像拉取
在 /etc/docker/daemon.json 文件中,增加镜像源
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
在 /usr/lib/systemd/system/docker.service ,在 ExecStart 所在行,增加 registry-mirror 参数。
ExecStart=.............. --registry-mirror=https://docker.mirrors.ustc.edu.cn
重启docker生效
#systemctl restart docker
检查安装情况
#docker images
安装完镜像后新建容器
新建容器dm_container,并附带端口映射(主机的55236端口映射到容器的5236端口),并赋予容器systemctl权限(避免无法设置防火墙)
#docker run -tid -p 55236:5236 -p 55237:5237 --privileged --name dm_container afb6 /usr/sbin/init
通过日志查看
# docker logs -f dm_container
进入容器(后边打通端口和安装库时需要)
#docker exec -it dm_container bash
如果报错:#没有运行
Error response from daemon: Container 681bf28df5710977e415d0adb46d7328b8391e43c1aa690ff8e8a76e98b8de66 is not running
需要检查docker运行状态
# docker ps -a
注意CONTAINER ID
运行docker
#docker star 4a41c2b1b638
2、打通端口
1)关闭防火墙后可以不需要打通端口
2)如果需要运行防火墙的情况下需要打通端口
如果要外部能直接访问容器中的数据库,必须先打通端口
达梦的数据库默认端口为5236,主机中设置55236,映射到容器中的5236端口
首先开通主机的55236端口
#firewall-cmd --permanent --zone=public --add-port=55236/tcp
重启防火墙,使开启的端口生效
#firewall-cmd --reload
查看55236端口是否已开通
#firewall-cmd --zone=public --query-port=55236/tcp
进入容器
#docker exec -it dm_container bash
给容器安装防火墙
#yum install firewalld
启动防火墙
#systemctl start firewalld
开通容器的5236端口
#firewall-cmd --permanent --zone=public --add-port=5236/tcp
重启防火墙
#firewall-cmd --reload
查看5236端口是否已开通
#firewall-cmd --zone=public --query-port=5236/tcp
设置防火墙开机自启动
#systemctl enable firewalld
查看防火墙状态
#systemctl status firewalld
防火墙重启或者相关之后,docker需要重新启动,才可以正常使用!!!
#systemctl restart docker
如果出现连接问题首先确定端口问题,是否开通以及是否被占用等问题。
五、容器安装DM数据库
这里用的是DM8的iso文件
首先ip a查看容器的ip
开头为docker0这个为容器的IP
然后ping一下看一下是否通。
挂载数据库iso文件
# mount -o loop dm8_20210625_x86_rh6_64_ent_8.1.2.18_pack4.iso /mnt
拷出bin文件
# cd /mnt
# cp DMInstall.bin /opt
# cd /opt
赋予权限
# chmod 755 DMInstall.bin
拷到docker下
# docker cp DMInstall.bin dm_container:/root/
进入docker
# docker exec -it dm_container bash
修改最大文件打开数(临时)
#ulimit -n 65536
先查看扩充之前的容量(虚机情况下可能不够)
#df -h /tmp
进行扩充
#umount /tmp
#mount -t tmpfs -o size=2147483648,mode=1777 overflow /tmp
再次查看/tmp的容量,已变为2G
#df -h /tmp
安装libnsl库(可能会缺少)
#yum install libnsl*
安装数据库
# cd /root/
# ./DMInstall.bin -i
这里注意时区选择21
root测试安装位置默认opt即可
进入安装位置的bin目录下初始化数据库(这里为了凸显问题初始化只指定了实例位置)
# ./dminit path=/opt/dmdata
一般情况下会报错
这里要注意安装目录、日志目录都建议写成跟达梦数据库安装目录一致(如/opt/dmdbms)
注册服务
# /opt/dmdbms/script/root
#./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /opt/dmdbms/DAMENG/dm.ini
回到bin目录下启动服务
# ./DmServiceDMSERVER start
检查是否能进入数据库
#./disql
安装完毕
六、测试连接
在win打开cmd
执行telnet 192.168.1.60 55236
虚机的ip和映射的端口
如果弹出一个空白窗口说明没有问题
一般Telnet默认没有打开
需要打开win的控制面板
在win下启动管理工具
这里需要注意IP为虚机的地址,端口为刚才配置的虚机主机端口,这样就可以连接到容器的数据库。