部署目录:sheng的学习笔记-部署-目录-CSDN博客

docker基础知识可参考   sheng的学习笔记-docker部署,原理图,命令,用idea设置docker

目录

装完ORACLE之后的统一操作:

修改密码期限

修改数据空间

docker安装数据库

mac版本

安装oracle

下载oracle镜像

创建容器,运行Oracle 

来查看容器的运行情况

调试Oralce 

默认的管理员用户名 sys  密码 oracle 作为dba登录

创建一个用户,并授权

测试数据库

创建表测试 

安装oracle 19c

安装mysql

下载mysql镜像

创建容器,运行mysql

来查看容器的运行情况

调试mysql

创建一个用户,并授权

测试数据库

创建表测试

windows 

前置设置改造(可选,数据库的数据量很大必看,我踩坑了)

 安装oracle

下载oracle镜像

创建容器,运行Oracle 

来查看容器的运行情况

调试Oralce 

创建一个用户,并授权

测试数据库

创建表测试 

安装oracle19c

下载镜像

创建个数据卷

安装容器

连接进去

碰到的问题

设置一下密码

登录

创建用户

修改表空间

安装mysql

下载mysql镜像

创建容器,运行mysql

来查看容器的运行情况

调试mysql

创建一个用户,并授权

测试数据库

 创建表测试

参考


引导顺序:

1)先看docker安装数据库系列(支持win的oracle和mysql,macbook的oracle和mysql)

2)如果是win的oracle,看下 装完ORACLE之后的统一操作 这部分,如果只是玩玩,无所谓,但我的数据超过20G,C盘顶不住了,并且出现了密码过期,数据超过默认数据库限制,下面都有解决方案

装完ORACLE之后的统一操作:

以下操作都要用dba权限做,docker安装后的dba的用户名密码在下面有

修改密码期限

装完后提示密码7天过期,就算新创建了用户名和密码,密码也是180天过期

修改一下密码(原先密码就是这个,没改,这里可以改也可以不该):

alter user system identified by oracle;

断开连接,重新连接,就不报错了

将密码设置为永远不过期

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

做完以后用命令检查一下

select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';

修改数据空间

增加数据文件,空间改为10G

以下命令找一下文件路径

SELECT * FROM dba_data_files

运行这个命令 ,路径要跟上面的一样,这是一次性加10G的空间

ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/XE/system1.dbf' SIZE 10G AUTOEXTEND ON;

这是每次加一点,最多加10G的空间(这是xe版本的,如果是标准版的可以更大一些)

ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/XE/system1.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

完整的命令,供参考

docker run -d -p 1523:1521 --name oracle11g_wh_01 deepdiver/docker-oracle-xe-11g

docker exec -it c0f22826d5d2 /bin/bash 
sqlplus system/oracle
create user lzs identified by lzs;
grant connect,resource to lzs;

alter user system  identified by  oracle;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/XE/system1.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

docker安装数据库

  • mac版本

  • 安装oracle

  • 下载oracle镜像

打开终端,输入

docker search oracle

我这里下载的是 oracle-xe-11g,在终端中输入

 sudo docker pull deepdiver/docker-oracle-xe-11g

来拉取镜像,等下载好了以后,输入

docker images

来查看镜像,可以看到刚下载的镜像

  • 创建容器,运行Oracle 

sudo docker run -d -p 1521:1521 --name oracle11g deepdiver/docker-oracle-xe-11g

来创建容器并运行,其中1521:1521中前面的1521表示本机的端口号,后面的1521表示Docker中映射的端口号(!!!注意:后面那个1521端口号一定不能更改,只能根据自己的需求更改前面的端口号,作者建议不要更改,因为Oracle没有Mac版本所以一般不会出现端口冲突)

  • 来查看容器的运行情况

输入

docker ps

然后复制id,我这里的ID是640f1e53bb05,然后在终端中输入

sudo docker exec -it 640f1e53bb05 /bin/bash 

进入shell容器,这里-it后面的就是我们刚刚复制的id

  • 调试Oralce 

进入shell容器以后输入

sqlplus system/oracle

出现如下图所示表示成功

  • 默认的管理员用户名 sys  密码 oracle 作为dba登录
  • 创建一个用户,并授权
create user JYL identified by a;
我的是 create user lzs1 identified by lzs;
grant connect,resource to lzs1;

 
这里JYL可以替换成自己的用户名,a可以替换成自己的密码;这两个东西之后链接数据库的时候需要用到。
提示User created.说明用户创建成功。
使用select * from all_users;就可以看到刚刚创建好的用户。
然后我们为这个用户授权grant connect,resource to JACK;,注意这里的用户名必须全部大写。
提示Grant succeeded.之后说明授权成功。

  • 测试数据库

我用的是DBeaver连接数据库

如果第一次下载,会要求安装驱动

 注意:这里的服务名是:XE,与Windows有区别,填写完所有信息以后点击左下角的“测试连接”,显示连接成功以后点击右下角的确定即可

  • 创建表测试 
CREATE TABLE student (
    id NUMBER(5) PRIMARY KEY,
    name VARCHAR2(30),
    age NUMBER(3) CHECK (age >= 0 AND age <= 100)
);
INSERT INTO STUDENT s (id,name,age) values(1,'zhangsan',20)

SELECT * FROM student;

   

安装oracle 19c

mac方法跟win一样,看下面文章windows的安装oracle 19c

安装mysql

  • 下载mysql镜像

打开终端,输入

docker search mysql

终端输入

docker pull mysql:latest

来拉取镜像,等下载好了以后,输入

docker images

来查看镜像,可以看到刚下载的镜像

  • 创建容器,运行mysql

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql

–name:容器名,此处命名为mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,此处映射 主机3306端口 到 容器的3306端口
-d:后台运行容器,保证在退出终端后容器继续运行

  • 来查看容器的运行情况

输入docker ps

复制id,我这里是24624966d8c8,

输入

docker exec -it 24624966d8c8 /bin/bash

这将打开 Bash 终端,并把你放在正在运行的 MySQL 容器中。在容器中,您可以执行各种 MySQL 命令,包括创建用户、授权和配置等 

  • 调试mysql

接下来,我们需要登录 MySQL 并进行一些配置。使用以下命令打开 MySQL:

mysql -u root -p

输入密码,密码是创建容器的命令中的密码

  • 创建一个用户,并授权

然后输入您之前设置的密码。登录成功后,我们需要创建一个新用户,并授予该用户适当的权限。使用以下命令创建名为 `remote_user` 的新用户:

CREATE USER 'lzs_mysql'@'%' IDENTIFIED BY 'your_password';

其中,`remote_user` 是您自己设置的用户名,`your_password` 是该用户的密码。`%` 是通配符,表示任何 IP 地址都可以连接到 MySQL 服务器。接下来,使用以下命令为该用户授予适当的权限 

GRANT ALL ON *.* TO 'lzs_mysql'@'%'; 

此命令授予 `remote_user` 用户对 MySQL 服务器上所有数据库和表的完全访问权限。

  • 测试数据库

有报错

 Public Key Retrieval is not allowed:不允许进行公钥检索

解决方案:

在编辑连接中找到allowPublicKeyRetrieval 设置成TRUE

 

点击测试连接,可以看下能否连接成功

  • 创建表测试
CREATE TABLE student (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    age INT UNSIGNED NOT NULL
);
INSERT INTO student(name,age) values('zhangsan',20)
select * from student ;

windows 

前置设置改造(可选,数据库的数据量很大必看,我踩坑了)

注意,最好将DOCKER的Disk image location修改一下位置,默认是C盘,如果新创建数据库的数据很多,C盘会被撑爆

如果还没有安装,用这个命令安装:

start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="D:\docker\app" --wsl-default-data-root="D:\docker\data" --windows-containers-default-data-root="D:\\docker"

win11安装的Docker 坎 - 知乎 参考这个文章

如果已经安装了,用下面的方式改一下位置

用管理员权限打开docker desktop软件,在这里将位置迁移到d盘,browse选的是d:盘,软件默认的自己加上DockerDesktop文件夹,最好是空的docker就迁移,不然各种报错

如果要做数据迁移,一定要做数据备份

这个位置加一下d盘设置

  •  安装oracle

  • 下载oracle镜像

打开终端,输入

docker search oracle

我这里下载的是 oracle-xe-11g,在终端中输入

 docker pull deepdiver/docker-oracle-xe-11g

来拉取镜像,等下载好了以后,输入

docker images

来查看镜像,可以看到刚下载的镜像

  • 创建容器,运行Oracle 

docker run -d -p 1521:1521 --name oracle11g deepdiver/docker-oracle-xe-11g

来创建容器并运行,其中1521:1521中前面的1521表示本机的端口号,后面的1521表示Docker中映射的端口号(!!!注意:后面那个1521端口号一定不能更改,只能根据自己的需求更改前面的端口号,作者建议不要更改,因为Oracle没有Mac版本所以一般不会出现端口冲突)

  • 来查看容器的运行情况

输入

docker ps

然后复制id,我这里的ID是a6a3676c6a12,然后在终端中输入

docker exec -it a6a3676c6a12 /bin/bash 

进入shell容器,这里-it后面的就是我们刚刚复制的id

  • 调试Oralce 

进入shell容器以后输入

sqlplus system/oracle

出现如下图所示表示成功

  • 创建一个用户,并授权
create user JYL identified by a;
我的是 create user lzs1 identified by lzs;
grant connect,resource to lzs1;

 
这里JYL可以替换成自己的用户名,a可以替换成自己的密码;这两个东西之后链接数据库的时候需要用到。
提示User created.说明用户创建成功。
使用select * from all_users;就可以看到刚刚创建好的用户。
然后我们为这个用户授权grant connect,resource to JACK;,注意这里的用户名必须全部大写。
提示Grant succeeded.之后说明授权成功。

  • 测试数据库

我用的是DBeaver连接数据库

如果第一次下载,会要求安装驱动

 注意:主机的ip,应该是docker虚拟机的ip,而不是本机,填写完所有信息以后点击左下角的“测试连接”,显示连接成功以后点击右下角的确定即可

  • 创建表测试 
CREATE TABLE student (
    id NUMBER(5) PRIMARY KEY,
    name VARCHAR2(30),
    age NUMBER(3) CHECK (age >= 0 AND age <= 100)
);
INSERT INTO STUDENT s (id,name,age) values(1,'zhangsan',20)

SELECT * FROM student;

   

安装oracle19c

上面的是安装Oracle11g的xe,不爽,换个新版本的(但是需要配置比较高,自己选)

下载镜像

# oracle 19c的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c

创建个数据卷

注意,以下命令可能包含中文空格,会导致docker报错,自己把空格都去掉,改成英文空格。虽然我是英文空格,但是上传到csdn后,再拷贝,就有中文空格

docker volume create oracle19c_data_wh 

用root权限赋权,若权限设错,Oracle 容器可能无法写入数据。

docker run --rm --user root -v oracle19c_data_wh:/opt/oracle registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c bash -c "chown -R 54321:54321 /opt/oracle && chmod -R 775 /opt/oracle"

安装容器

docker run -d -p 1525:1521 -p 5500:5500 --name oracle19c_wh -e ORACLE_SID=ORCLCDB -e ORACLE_PDB=ORCLPDB1 -e ORACLE_PWD=Oracle123 -v oracle19c_data_wh:/opt/oracle --shm-size=2g registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c

-p 1525:1521 将宿主机 1525 端口映射到容器内 Oracle 监听端口 1521
-p 5500:5500 Oracle Enterprise Manager Express 的端口
--name oracle19c_wh 容器名称
-e ORACLE_SID=ORCLCDB 设置 CDB 的实例名(默认是 ORCLCDB)
-e ORACLE_PDB=ORCLPDB1 设置 PDB 的名称(默认也是这个)
-e ORACLE_PWD=Oracle123 设置 SYS、SYSTEM、PDBADMIN 的初始密码
-v oracle19c_data_wh:/opt/oracle 持久化 Oracle 数据
--shm-size=2g 共享内存大小,Oracle 建议 >= 1G,2G较安全
镜像 registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c

说明,安装容器的命令,我用的是第一个,后面需要自己设置一下密码,我的映射端口是1525,因为我别的端口被占了,这个自己改一下,数据卷的名字可以自己改

默认安装的 数据库名(CDB)可插拔数据库(PDB),连接 PDB 用 ORCLPDB1,连接 CDB 用 ORCLCDB推荐用ORCLPDB1

安装完以后,看日志:

docker logs -f oracle19c_wh

看到这个日志,代表完成,速度贼慢,注意,安装过程中不可以中断,中断就得重新来

DATABASE IS READY TO USE!
 

最好用终端一直打着日志,因为到最后,其实已经安装完了,但我的docker出现了卡死的情况,在docker中无法查看日志(空的),日志中出现安装完成后,就可以重启容器了,否则不要轻易重启

重启容器之后,日志才会显示

连接进去

sqlplus sys/Oracle123@localhost:1521/ORCLPDB1 as sysdba

碰到的问题

如果连接进去成功,这一小节不用看,如果失败了,这里记载了失败的一些问题和解决方案

从docker进入oracle用户


docker exec -it oracle19c_wh bash

sqlplus / as sysdba

这一步我报错了

 当前 环境变量未正确设置,也就是说 oracle 用户的环境没有加载好

echo 'export ORACLE_SID=ORCLCDB' >> ~/.bashrc
echo 'export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1' >> ~/.bashrc
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> ~/.bashrc

source ~/.bashrc

然后执行sqlplus / as sysdba,这个成功了,但是用

sqlplus sys/Oracle123@localhost:1521/ORCLPDB1 as sysdba连接失败。

设置一下密码

sqlplus / as sysdba进去,设置密码

ALTER USER sys IDENTIFIED BY Oracle123;

Oracle 默认不允许通过网络连接以 SYSDBA 身份登录,除非设置了以下参数:

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

然后重启数据库(如果你还没设置过这项):

shutdown immediate;
startup;
 

确认监听器是否配置了 ORCLPDB1 服务

SHOW pdbs;

确认 PDB 名字(应该是 ORCLPDB1)是否已打开:

SELECT name, open_mode FROM v$pdbs;

如果是 MOUNTED 状态,需要打开:

ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;

这两部分我的都是对的,没改

登录

sqlplus sys/Oracle123@localhost:1521/ORCLPDB1 as sysdba

总结一下:

服务名:ORCLPDB1

用户名:sys

密码:Oracle123

创建用户

接下来老一套,创建用户,赋权,修改密码不过期

create user lzs identified by lzs;
grant connect,resource to lzs;


ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

修改表空间

看下创建的用户在哪个表空间下

SELECT username, default_tablespace

FROM dba_users

WHERE username = 'LZS';

这就比较好,xe的默认是在system下,头疼,看下路径

SELECT * FROM dba_data_files

 ALTER TABLESPACE USERS ADD DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users02.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 20G;

OK啦,最大扩展20个G,应该还可以再扩大,比XE好一些,XE最多只能10G,再大就报错了

默认插入lzs用户会报错

cx_Oracle.DatabaseError: ORA-01950: no privileges on tablespace 'USERS'

这是因为没有权限插入users表空间,做一下赋权

ALTER USER LZS QUOTA UNLIMITED ON USERS;

安装mysql

  • 下载mysql镜像

打开终端,终端输入

docker pull mysql:latest

来拉取镜像,等下载好了以后,输入

docker images

来查看镜像,可以看到刚下载的镜像

  • 创建容器,运行mysql

docker run --name mysql -p 3306:3306 -v /d/db/mysql/conf://etc/mysql -v /d/db/mysql/logs://var/log/mysql -v /d/db/mysql/data://var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

–name:容器名,此处命名为mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,此处映射 主机3306端口 到 容器的3306端口
-d:后台运行容器,保证在退出终端后容器继续运行

-v:用于做映射,将mysql的数据映射到准备的文件夹,注意:

  • 虽然是windows,但不可 用D:\这种有冒号的
  • 不可以用\,要用/,
  • /var不行,需要//var,因为/var会找windows的目录,但这里需要挂在的是docker内部目录
  • 来查看容器的运行情况

输入docker ps

复制id,我这里是08e1361b0db8,

输入

docker exec -it 08e1361b0db8 bash

这将打开 Bash 终端,并把你放在正在运行的 MySQL 容器中。在容器中,您可以执行各种 MySQL 命令,包括创建用户、授权和配置等 

  • 调试mysql

接下来,我们需要登录 MySQL 并进行一些配置。使用以下命令打开 MySQL:

mysql -u root -p

输入密码,密码是创建容器的命令中的密码

注意,这里别用git bash写,要用cmd写

  • 创建一个用户,并授权

然后输入您之前设置的密码。登录成功后,我们需要创建一个新用户,并授予该用户适当的权限。使用以下命令创建名为 `remote_user` 的新用户:

CREATE USER 'lzs_mysql'@'%' IDENTIFIED BY 'your_password';

其中,`remote_user` 是您自己设置的用户名,`your_password` 是该用户的密码。`%` 是通配符,表示任何 IP 地址都可以连接到 MySQL 服务器。接下来,使用以下命令为该用户授予适当的权限 

GRANT ALL ON *.* TO 'lzs_mysql'@'%'; 

此命令授予 `remote_user` 用户对 MySQL 服务器上所有数据库和表的完全访问权限。

  • 测试数据库

此部分参考mac的 安装 mysql(在上面),这是配置,注意,在windows(我的是windows 7)中,是使用virtual box虚拟机做的docker,数据库是在这里面,所以服务器地址不能是本机,是虚拟机的ip,否则会连接不上

  •  创建表测试
CREATE TABLE student (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    age INT UNSIGNED NOT NULL
);
INSERT INTO student(name,age) values('zhangsan',20)
select * from student ;

参考

Mac如何安装Oracle?Mac如何配置Docker?手把手教你配置Docker并配置Oracle_oracle mac-CSDN博客

Docker 如何安装 MySQL 并实现远程连接 - 知乎

windows系统使用Docker搭建MySQL服务|江阴雨辰互联

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐