前提:系统 centos7
在系统安装 docker(最好是最新版本)
安装 对应 JAVA 环境
安装 Oracle ,直接从 docker 镜像拉不下来,所以需要换个镜像源
docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle_12cr2_ee_lhr_12.2.0.1:2.0
启动docker,这里就是基本参数,设置网络、开机启动啥的多余的都删掉了,自己根据需求来
docker run -itd --name oracle12c -p 1521:1521 -p 2222:22 -p 5500:5500 -p 5501:5501 registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle_12cr2_ee_lhr_12.2.0.1:2.0 init
# 进入容器
docker exec -it oracle12c bash
3.2 修改环境变量
# 修改环境变量(i 插入 :w 保存 :q 离开)
vi /etc/profile
# 在文件最下面增加以下三行
export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/dbhome_1/
export ORACLE_SID=lhrcdb1
export PATH=$ORACLE_HOME/bin:$PATH
source /etc/profile
3.3 切换用户
su oracle
sqlplus /nolog
conn /as sysdba
conn system/system@lhrcdb1 as sysdba
#启动数据库
startup
3.4 启动监听
在上面步骤完成后,键入 exit 然后输入启动监听命令
lsnrctl start
附上centos 内 sh启动脚本
#!/bin/bash
# ========================================
# Oracle Docker 自动化启动脚本
# 作者:wangjinnan
# 用途:一键启动 Oracle 容器并初始化数据库
# ========================================
CONTAINER_NAME="oracle12c"
IMAGE="registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle_12cr2_ee_lhr_12.2.0.1:2.0"
ORACLE_HOME="/u01/app/oracle/product/12.2.0.1/dbhome_1"
ORACLE_SID="lhrcdb1"
# 颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
log() {
echo -e "${GREEN}[INFO] $1${NC}"
}
warn() {
echo -e "${YELLOW}[WARN] $1${NC}"
}
error() {
echo -e "${RED}[ERROR] $1${NC}"
}
# 1. 启动 Docker 容器
log "正在启动 Docker 容器..."
docker run -d \
--name $CONTAINER_NAME \
-p 1521:1521 \
-p 2222:22 \
-p 5500:5500 \
-p 5501:5501 \
--restart=unless-stopped \
$IMAGE init > /dev/null 2>&1
if [ $? -ne 0 ]; then
warn "容器可能已存在,尝试启动已有容器..."
docker start $CONTAINER_NAME > /dev/null 2>&1
fi
sleep 5
# 2. 检查容器是否运行
if ! docker ps | grep -q $CONTAINER_NAME; then
error "容器启动失败,请检查镜像是否正确或端口是否被占用"
exit 1
fi
log "容器已运行"
# 3. 配置环境变量(仅添加一次)
log "配置环境变量到 /etc/profile"
docker exec $CONTAINER_NAME bash -c "
if ! grep -q 'ORACLE_HOME' /etc/profile; then
echo '
# Oracle Environment
export ORACLE_HOME=$ORACLE_HOME
export ORACLE_SID=$ORACLE_SID
export PATH=\$ORACLE_HOME/bin:\$PATH
' >> /etc/profile
echo 'export ORACLE_HOME='$ORACLE_HOME > /etc/profile.d/oracle.sh
echo 'export ORACLE_SID='$ORACLE_SID >> /etc/profile.d/oracle.sh
echo 'export PATH=\$ORACLE_HOME/bin:\$PATH' >> /etc/profile.d/oracle.sh
chmod +x /etc/profile.d/oracle.sh
log '环境变量已添加'
else
warn '环境变量已存在,跳过写入'
fi
"
# 4. 重新进入容器,执行数据库启动命令
log "切换到 oracle 用户并启动数据库"
docker exec -u oracle -it $CONTAINER_NAME bash -c "
source /etc/profile
echo '当前环境变量:'
echo 'ORACLE_HOME: '\$ORACLE_HOME
echo 'ORACLE_SID: '\$ORACLE_SID
echo 'PATH: '\$PATH
# 进入 sqlplus
echo '
正在启动数据库...'
sqlplus /nolog << EOF
conn / as sysdba
startup
exit;
EOF
"
# 5. 启动监听器
log "启动 Oracle 监听器"
docker exec -u oracle -it $CONTAINER_NAME bash -c "
source /etc/profile
lsnrctl start
"
log "数据库和监听器已启动完成!"
log "连接信息:"
echo " 主机: localhost"
echo " 端口: 1521"
echo " SID: $ORACLE_SID"
echo " 示例连接: sqlplus system/system@$ORACLE_SID as sysdba"