CentOS使用Docker搭建常用数据库【Mysql、SQLServer、Oracle、DB2、Postgres】
CentOS系统安装Docker服务
A、在线安装
1、安装相关组件
yum install -y yum-utils device-mapper-persistent-data lvm2
2、docker源安装配置
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test
yum-config-manager --disable docker-ce-nightly
3、安装docker服务
yum -y install docker-ce docker-ce-cli containerd.io
4、验证docker安装是否成功
启动docker服务
systemctl start docker
开机启动docker服务
systemctl enable docker
B、离线安装
说明:当服务器无法联网时,需要进行离线安装docker服务
1、 配置本地yum源
mkdir -p /mnt/cdrom
mount -t iso9660 /opt/CentOS-7-x86_64-Everything-2003.iso /mnt/cdrom
2、 修改fstab文件,服务器重启后自动挂载iso镜像
vim /etc/fstab
#将下面这句话追加至文件最后一行,根据iso文件名和挂载路径修改具体位置
/opt/CentOS-7-x86_64-Everything-2003.iso /mnt/cdrom iso9660 defaults 0 0
3、 备份原yum源配置文件
[root@zabbix-server opt]# cd /etc/yum.repos.d/
[root@zabbix-server yum.repos.d]# lsCentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@zabbix-server yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak
[root@zabbix-server yum.repos.d]# vi CentOS-Base.repo
4、 将下面的代码替换至CentOS-Base.repo文件中
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
5、 执行以下命令,重新刷新yum源缓存
[root@zabbix-server yum.repos.d]# yum clean all
[root@zabbix-server yum.repos.d]# yum makecache
6、 安装docker依赖的相关组件
yum install -y yum-utils device-mapper-persistent-data lvm2
7、 编辑docker服务启动文件
[root@zabbix-server yum.repos.d]# vi /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
编辑完成后,给该文件添加可执行权限
[root@zabbix-server yum.repos.d]# chmod +x /etc/systemd/system/docker.service
7、下载docker离线安装包
docker离线包下载地址,这里下载docker-ce版本【社区版】即可
8、 下载完成后,将tgz包上传至服务器上,并解压至/usr/bin目录下
tar -zxvf docker-18.03.0-ce.tgz
mv docker/* /usr/bin
9、 验证docker服务是否安装成功
service docker start
docker info
Docker配置官方镜像加速
镜像加速配置可以参考 配置阿里云加速器的参考教程
Docker搭建Postgres
1、 拉取pg镜像
docker pull postgres:12.5
2、 查看拉取下来的镜像文件
docker image list
3、 创建数据目录
mkdir -p /opt/sdc/docker/postgresql12.5/data
4、 启动postgresql12.5容器
docker run --name postgresql12.5 -e POSTGRES_PASSWORD=postgres -p 48287:5432 -v /opt/sdc/docker/postgresql12.5/data:/var/lib/postgresql/data -d postgres:12.5
说明:
run 创建并运行一个容器
--name postgresql12.5 指定创建的容器的的名字为postgresql12.5
-e POSTGRES_PASSWORD=postgres 设置环境变量,指定数据库的登录口令为postgres
-p 48287:5432 将容器的5432的默认端口映射到外部机器的48287端口
-d postgresql:12.5 指定使用postgresql:12.5作为镜像
5、 远程连接
使用终端命令进入数据库:
docker exec -it postgresql12.5(数据库) psql -U postgres(用户名称) -d postgres(数据库名称)
注意事项:若第3步的命令有误,如我一开始输错了端口(输的48287:48287),导致远程连接不上。解决方法如下:
1、 查看启动了哪些服务:
docker ps -a
2、 关掉postgresql12.5服务:
docker stop postgresql12.5
3、 删掉postgresql12.5服务:
docker rm postgresql12.5
4、 重新run一个新的postresql12.5容器:
docker run --name postgresql12.5 -e POSTGRES_PASSWORD=postgres -p 48287:5432 -v /opt/sdc/docker/postgresql12.5/data:/var/lib/postgresql/data -d postgres:12.5
Docker搭建Oracle 12c
1、拉取Oracle镜像
由于官方镜像需要登录,我们在服务器上需要先进行docker登录
docker login
命令之后输入用户名,密码登录hub.docker.com,如果没有账号,需要在网站上自己申请
接着输入镜像拉取命令
docker pull store/oracle/database-enterprise:12.2.0.1
等待镜像拉取完成
2、镜像拉取完成后,使用命令run一个新的docker
docker run -itd --name oracle12c -p 1521:1521 -p 5500:5500 store/oracle/database-enterprise:12.2.0.1
3、docker运行起来后,可以使用命令查看日志
docker logs oracle12c
4、待untar db完成后,容器内会自动初始化oracle数据库,此过程大概需要5-10分钟
完成后,日志命令查看输入如下:
[root@mec04 /]# docker logs oracle12c
Setup Oracle Database
Oracle Database 12.2.0.1 Setup
Wed Dec 9 09:17:17 UTC 2020
Check parameters ......
log file is : /home/oracle/setup/log/paramChk.log
paramChk.sh is done at 2 sec
untar DB bits ......
log file is : /home/oracle/setup/log/untarDB.log
untarDB.sh is done at 896 sec
config DB ......
log file is : /home/oracle/setup/log/configDB.log
Wed Dec 9 09:32:11 UTC 2020
Start Docker DB configuration
Call configDBora.sh to configure database
Wed Dec 9 09:32:11 UTC 2020
Configure DB as oracle user
Setup Database directories ...
SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 9 09:32:12 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
File created.
SQL> ORACLE instance started.
Total System Global Area 1342177280 bytes
Fixed Size 8792536 bytes
Variable Size 352323112 bytes
Database Buffers 973078528 bytes
Redo Buffers 7983104 bytes
Database mounted.
Database opened.
SQL>
Database altered.
SQL>
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/12.2.0
/dbhome_1/dbs/spfileORCLCDB.or
a
SQL>
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
encrypt_new_tablespaces string CLOUD_ONLY
SQL>
User altered.
SQL>
User altered.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
update password
Enter password for SYS:
create pdb : ORCLPDB1
SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 9 09:33:19 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> 2 3 4 5
Pluggable database created.
SQL>
Pluggable database altered.
SQL>
Pluggable database altered.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Reset Database parameters
SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 9 09:36:48 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
System altered.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 09-DEC-2020 09:36:48
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting /u01/app/oracle/product/12.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/8a2b2733a5cd/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 09-DEC-2020 09:36:53
Uptime 0 days 0 hr. 0 min. 4 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/8a2b2733a5cd/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
DONE!
Remove password info
Docker DB configuration is complete !
configDB.sh is done at 1181 sec
Done ! The database is ready for use .
# ===========================================================================
# == Add below entries to your tnsnames.ora to access this database server ==
# ====================== from external host =================================
ORCLCDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip-address>)(PORT=<port>))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLCDB.localdomain)))
ORCLPDB1=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip-address>)(PORT=<port>))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCLPDB1.localdomain)))
#
#ip-address : IP address of the host where the container is running.
#port : Host Port that is mapped to the port 1521 of the container.
#
# The mapped port can be obtained from running "docker port <container-id>"
# ===========================================================================
Current log# 2 seq# 5 mem# 0: /u04/app/oracle/redo/redo002.log
2020-12-09T09:36:47.224988+00:00
ORCLPDB1(3):Opening pdb with no Resource Manager plan active
Pluggable database ORCLPDB1 opened read write
Completed: alter pluggable database ORCLPDB1 open
2020-12-09T09:36:48.383073+00:00
alter pluggable database all save state
Completed: alter pluggable database all save state
2020-12-09T09:36:48.717931+00:00
ALTER SYSTEM SET encrypt_new_tablespaces='DDL' SCOPE=BOTH;
5、使用Navicat连接Oracle
安装完成后,系统默认的SID名为:ORCLCDB,用户名:sys,密码:Oradoc_db1
在Navicat连接的【常规】选项卡中输入对应的参数
接着选中【高级】选项卡,将【角色】由【Default】改为【SYSDBA】
Docker搭建MySQL
1、 拉取MySQL镜像
docker pull mysql
当不指定镜像版本时,默认拉取latest最新版
docker pull mysql:5.7.32
docker pull mysql:8.0.22
2、 拉取完成后,使用以下命令来run一个新的容器
docker run -itd --name <container-name> -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<mysql_password> <image:tag>
比如:run一个5.7.32版本的容器
docker run -itd --name mysql_5.7.32 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=cdsf@119 mysql:5.7.32
run一个8.0.22版本的容器
docker run -itd --name mysql_8.0.22 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=cdsf@119 mysql:8.0.22
说明:
-p 3306:3306 代表映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过宿主机ip:3306 访问到 MySQL 的服务。如需改端口号需要更改第一个。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
3、 查看是否run成功
docker ps
4、 当需要进入容器查看相关文件或配置时,使用以下命令
docker exec -it <container-name> bash
docker exec -it mysql_5.7.32 bash
docker exec -it mysql_8.0.22 bash
5、 进入容器后,连接mysql查看
mysql -uroot -pcdsf@119
Docker搭建sqlserver
1、 查找Microsoft SQL Server的镜像,并使用命令拉取镜像
docker pull mcr.microsoft.com/mssql/server:2019-latest
2、 拉取完成后,查看镜像
docker images
3、 run一个新的容器
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=1qaz@WSX" -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2019-latest
4、 查看是否运行成功
docker ps -a
5、 进入已启动的容器
docker exec -it sql1 "bash"
6、 进入sqlserver数据库
/opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U SA -P "1qaz@WSX"
7、 使用Navicat客户端连接sqlserver
Docker搭建db2
1、拉取db2镜像
docker pull ibmcom/db2:11.5.4.0
2、查看拉取下来的镜像文件
docker image
3、创建数据目录
mkdir -p /opt/sdc/docker/db2_11.5.4.0
4、启动db2容器
docker run -itd --name db2_11.5.4.0 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=Cdsf@119 -e DBNAME=testdb -v /opt/sdc/docker/db2_11.5.4.0:/database ibmcom/db2:11.5.4.0
说明:
--privileged:表示使用主机权限
-e LICENSE=accept参数, 表示接受了使用Db2软件的许可证协议
-e DBNAME=testdb,创建数据库
-v /opt/sdc/docker/db2_11.5.4.0:/database:将容器中的/database目录映射到宿主机的/opt/sdc/docker/db2_11.5.4.0目录
ibmcom/db2:11.5.4.0:tag是11.5.4.0
5、进入容器,修改database目录权限
docker exec -it db2_11.5.4.0 bash
chmod 777 database
6、切换到db2inst1启动数据库实例:
su - db2inst1
db2start
查看运行状态
db2pd -
查看已经创建的数据库
db2 list db directory
7、修改日志路径
db2 update db cfg for testdb using newlogpath /database/logs
8、激活数据库
db2 activate db testdb
查看日志生效
9、进入数据库
db2 connect to testdb
10、使用工具连接db2数据库
遇到的问题:
Navicat连接sqlserver报错:未发现数据源名称并且未指定默认驱动程序
解决方法:找到Navicat安装目录, 双击sqlncli_x64.msi安装运行即可(若是32位的位的机器则双击运行sqlncli.msi即可)