- 安装docker
- 首先通过上面的步骤安装linux系统;
- 更新yum -y update ;
- 安装yum install docker -y;
- 配置镜像加速器vi /etc/docker/daemon.json
- {
- "registry-mirrors": ["https://hub-mirror.c.163.com"]
- };
- docker -v 测试安装成功;
- https://hub.docker.com注册账号;创建仓库;
- docker login ;
- 搭建docker基础镜像
- 首先拉取基础镜像:如centos镜像,docker pull centos:7;
- 拉取之后:docker images 查看本地所有镜像;
- 启动该容器:docker run -d -it --privileged centos:7 /usr/sbin/init
- 启动后:docker ps -a 查看所有启动的容器;
- 进入该容器:docker exec -it 容器id /bin/bash;
- 进入之后:就相当于进入到一个新的centos系统,然后就可以在里面安装所需要的环境jdk,redis等;
- 把宿主机的文件如:jdk,redis,复制到容器内的方法如下:
在宿主机: docker cp /home/ftptest/xxx.tar.gz 镜像id:/usr/local/java/xxx.tar.gz,
/home/ftptest/xxx.tar.gz宿主机的文件路径 ,/usr/local/java/xxx.tar.gz容器里的存储路径;
例如:docker cp /home/ftptest/linux.x64_11gR2_database_1of2.zip 0b55d25d3c5c:/usr/local/java/linux.x64_11gR2_database_1of2.zip
- 容器环境配置好后,exit退到宿主机,然后:docker commit 容器id mycentos:7(自己的镜像名称),相当于把环境加到centos基础镜像上面,这样一个拥有项目运行环境的镜像就搭好了;
- yum install -y unzip zip;提示没有unzip命令。
- 安装redis(jdk和这类似)
- 进入容器的目录:tar xzf redis-5.0.5.tar.gz
- cd redis-5.0.5
- make
- 进入到解压后的 src 目录,通过如下命令启动Redis:
- ./redis-server
- centos7安装oracle数据库
可参考:https://www.cnblogs.com/zydev/p/5827207.html,大部分相同,注意标红部分就可以,可以把这个和博客结合起来看。
查看主机名:hostname
hostnamectl 如果没有这个那就是没有用—privilege进入容器,查看主机名相关配置
安装前准备:
- 修改主机名(我修改了没用,可不管这个)
#sed -i "s/HOSTNAME=localhost.localdomain/HOSTNAME=oracledb.01/" /etc/sysconfig/network
- 添加主机名与IP对应记录
# vim /etc/hosts (重启可能失效,可不管这个)
192.168.0.71 oracledb.01
- 关闭Selinux(没这个可以不管)
#sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
# setenforce 0
安装软件包:
yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*i686 compat-libstdc++-33*.devel compat-libstdc++-33 compat-libstdc++-33*.devel gcc gcc-c++ glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.devel libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.devel libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686
创建相关文件:(均在root用户的/根路径 执行cd 即可)
创建oinstall和dba组
/usr/sbin/groupadd oinstall /usr/sbin/groupadd dba
创建oracle用户
/usr/sbin/useradd -g oinstall -G dba oracle
设置oracle用户密码
passwd oracle
验证创建是否正确
[root@docker ~]# id oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
修改用户限制(均在root用户的/根路径 执行cd 即可)
vi /etc/security/limits.conf
#在末尾添加
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 10240
vi /etc/pam.d/login
#在末尾添加
session required /lib64/security/pam_limits.so
session required pam_limits.so
vi /etc/profile
#添加
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export ORACLE_SID=dbsrv2
export PATH=$PATH:$ORACLE_HOME/bin
退出执行:source /etc/profile
ln -s /u01/app/oracle/product/11.2.0/db_1/bin/sqlplus /usr/bin
创建安装目录:(均在root用户的/根路径 执行cd 即可)
mkdir -p /u01/app/
chown -R oracle:oinstall /u01/app/
chmod -R 775 /u01/app/
创建解压目录:(均在root用户的/根路径 执行cd 即可)(博客没有这一步,加这个是因为可能会报错说空间不够)
mkdir -p /u02
chown -R oracle:oinstall /u02
chmod -R 775 /u02
配置环境变量:(在Oracle用户的/根路径 执行cd 即可)
切换用户 su oracle
vi ~/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=dbsrv2
source ~/.bash_profile
解压软件:
cd 到zib所在目录
unzip linux.x64_11gR2_database_1of2.zip -d /u02
unzip linux.x64_11gR2_database_2of2.zip -d /u02
yum install -y unzip zip;若提示没有unzip命令
复制响应文件模板:(在Oracle用户的/根路径 执行cd 即可)
su oracle
mkdir etc
cp /usr/local/src/database/response/* /home/oracle/etc/
ls etc
dbca.rsp db_install.rsp netca.rsp
设置响应文件权限(在Oracle用户的/根路径 执行cd 即可)
su oracle
chmod 700 /home/oracle/etc/*.rsp
修改安装Oracle软件的响应文件(在Oracle用户的/根路径 执行cd 即可)
su oracle
vi /home/oracle/etc/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY // 安装类型
ORACLE_HOSTNAME=xxx // 主机名称(hostname查询)
UNIX_GROUP_NAME=oinstall // 安装组
INVENTORY_LOCATION=/u01/app/oraInventory //INVENTORY目录(不填就是默认值)
SELECTED_LANGUAGES=en,zh_CN // 选择语言
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 //oracle_home
ORACLE_BASE=/u01/app/oracle //oracle_base
oracle.install.db.InstallEdition=EE // oracle版本
oracle.install.db.isCustomInstall=false //自定义安装,否,使用默认组件
oracle.install.db.DBA_GROUP=dba / / dba用户组
oracle.install.db.OPER_GROUP=oinstall // oper用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //数据库类型
oracle.install.db.config.starterdb.globalDBName=orcl //globalDBName
oracle.install.db.config.starterdb.SID=dbsrv2 //SID
oracle.install.db.config.starterdb.memoryLimit=81920 //自动管理内存的内存(M)
oracle.install.db.config.starterdb.password.ALL=oracle //设定所有数据库用户使用同一个密码
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false //(手动写了false)
DECLINE_SECURITY_UPDATES=true //设置安全更新(貌似是有bug,这个一定要选true,否则会无限提醒邮件地址有问题,终止安装。PS:不管地址对不对)
开始安装:
cd /u02/databases
./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp
然后等待一段时间,大概十分钟左右,这时候就等着就可以,红色部分一定加上,否则报错
出现类似如下提示表示安装完成:
------------------------------------------------------------------------
The following configuration scripts need to be executed as the "root" user.
#!/bin/sh
#Root scripts to run
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/db_1/root.sh
To execute the configuration scripts:
1. Open a terminal window
2. Log in as "root"
3. Run the scripts
4. Return to this window and hit "Enter" key to continue
Successfully Setup Software.
-----------------------------------------------------------------------------
按enter继续;
执行脚本:(均在root用户的/根路径 执行cd 即可)
su root
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/db_1/root.sh
修改oracle的环境变量(均在oracle用户的/根路径 执行cd 即可)
su oracle
vi ~/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=dbsrv2
export ROACLE_PID=ora11g
#export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export LANG="zh_CN.UTF-8"
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
source ~/.bash_profile(很重要,否则下面无法执行:lsnrctl: command not found 或者netca: command not found)
配置监听程序(均在oracle用户的/根路径 执行cd 即可)
netca /silent /responsefile /home/oracle/etc/netca.rsp
然后等待会出现如下:

启动监控程序(均在oracle用户的/根路径 执行cd 即可)
lsnrctl start

编辑应答文件(均在oracle用户的/根路径 执行cd 即可)
vi etc/dbca.rsp

建库(均在oracle用户的/根路径 执行cd 即可)(一定要在虚拟机执行 不可用putty或者其他连接工具 否则 执行出错)
dbca -silent -responseFile etc/dbca.rsp

到这里就安装成功了。
导入数据(通过navicat导入,当然可以通过命令导入,这里介绍的是怎么连接navicat)
sqlplus / as sysdba 登录
startup 启动数据库
创建表空间(如果有可跳过)
cd /u01/app/oracle/oradata
mkdir table_space
create tablespace WBPPS datafile '/u01/app/oracle/oradata/table_space/WBPPS.dbf' size 300M autoextend on next 100M maxsize unlimited;
退出保存提交镜像:然后编写dockerfile 和start_orcl.sh
- start_orcl.sh文件
#!/bin/bash
echo '172.17.0.2 15d5a6f3221d' >>/etc/hosts //15d5a6f3221d 这是安装oracle时的主机名,但是你删除容器,然后重新打开再进入容器,这个主机名会变化,所以你要修改这个,不然无法启动。
source /etc/profile
lsnrctl start
su - oracle -c "/u01/app/oracle/product/11.2.0/db_1/bin/sqlplus -S / as sysdba << EOF
startup
EOF
"
- Dockerfile文件
FROM mycentos:7.1
COPY springboot.jar app.jar //加一个测试项目,因为只启动oracle服务,容器会自动关闭因为没有守护进程,加入这个就可以
COPY start_orcl.sh /usr/bin/start_orcl.sh
RUN chmod 777 /usr/bin/start_orcl.sh
RUN su oracle
CMD sh -c "start_orcl.sh && java -jar app.jar "
启动容器,暴露1521端口,然后navicat连接就可以了。连接之后就可以导数据了。导入数据之后记得保存镜像。
可参考:http://blog.itpub.net/29485627/viewspace-1277018/
- 创建docker镜像
- 将java jar包上传到linux /user/local/路径下,然后在该路径下创建Dockerfile文件;
- 启动jar包:vi Dockerfile:
FROM mycentos:7 #(就是刚才配置的centos基础镜像名称);
ADD springboot.jar app.jar
EXPOSE 8080
CMD ["java","-jar","app.jar"]
- 启动nginx: vi Dockerfile:
FROM mycentos:7
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx","-g","daemon off;"]
- 执行:docker build -t springboot:1.0 .(注意后面的点),创建后docker images查看刚创建的镜像;
- 启动无误后即可访问:docker run -it -d -p 8080:8080 springboot:1.0;
- docker logs -f -t --tail 200 容器ID ,可查看启动日志
- docker里面的oracle启动:(进入容器里面的操作)
echo '172.17.0.2 15d5a6f3221d' >>/etc/hosts
su oracle
source ~/.bash_profile
lsnrctl start
sqlplus / as sysdba
startup
- start_orcl.sh文件(通过dockerfile在宿主机操作)
#!/bin/bash
echo '172.17.0.2 15d5a6f3221d' >>/etc/hosts
source /etc/profile
lsnrctl start
su - oracle -c "/u01/app/oracle/product/11.2.0/db_1/bin/sqlplus -S / as sysdba << EOF
startup
EOF
"
- Dockerfile文件
FROM mycentos:7.1
COPY springboot.jar app.jar
COPY start_orcl.sh /usr/bin/start_orcl.sh
RUN chmod 777 /usr/bin/start_orcl.sh
RUN su oracle
CMD sh -c "start_orcl.sh && java -jar app.jar "
- docker 部署多个jar包,或者开启多个服务
可参考:https://blog.youkuaiyun.com/lwy572039941/article/details/101272017
- 同上,将jar包、shell脚本、Dockerfile三个放在同一目录下;
- 编写shell脚本start.sh:如下启动nginx
#!/bin/sh
java -jar app1.jar &
java -jar app2.jar &
java -jar app2.jar &
cd /usr/local/nginx
./sbin/nginx
- 编写Dockerfile:
FROM mycentos:7
ADD springboot1.jar app1.jar
ADD springboot2.jar app2.jar
ADD springboot3.jar app3.jar
COPY start.sh /usr/bin/start.sh #放在这个目录下,是因为/usr/bin下面的文件是可以直接执行的
RUN chmod 777 /usr/bin/start.sh
CMD sh -c "start.sh && java -jar app1.jar "
- 其他步骤同上。
- 镜像管理及容器管理
- 生成镜像:docker build +参数
- 运行该镜像:docker run +参数
- 查找镜像:docker search +name
- 查看所有镜像:docker image (-a)
- 删除镜像:docker rmi -f tomcat:8.0
- 删除所有镜像:docker rmi $(docker images -q)
- 修改镜像:docker tag tomcat:8.0 mytomcat:8.0
- 进入容器:docker exec -it 加容器id /bin/bash
- 修改容器:docker commit,对容器做了修改后,把改动后的容器,再次转换为镜像
- 容器生命周期:start stop pause unpause,启动容器:docker start 容器id
- 查看所有容器:docker ps (-a)
- 删除容器:docker -rm -f 容器id
- 删除所有容器:docker rm `docker ps -a -q` -f
- df -h查看磁盘容量
- 运行参数解释:docker run -dit --privileged -p21:21 -p80:80 -p8080:8080 --name mytomcat tomcat:8.0 /usr/sbin/init
-dit 是 -d -i -t 的缩写。 -d ,表示 detach,即在后台运行。 -i 表示提供交互接口,这样才可以通过 docker 和 跑起来的操作系统交互。 -t 表示提供一个 tty (伪终端),与 -i 配合就可以通过 ssh 工具连接到 这个容器里面去了;
--privileged 启动容器的时候,把权限带进去, 这样才可以在容器里进行完整的操作;
-p21:21 第一个21,表示在CentOS 上开放21端口。 第二个21 表示在容器里开放21端口。 这样当访问CentOS 的21端口的时候,就会间接地访问到容器里了
--name 给容器取了个名字,叫做 mytomcat。
- 删除docker(可不看)
yum list installed | grep docker
yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y
rm -rf /var/lib/docker
- docker中的报错
docker run之后状态是退出的原因:可能需要守护进程 ,可以和jar包一起启动测试
尽量将sh文件先执行,
No chain/target/match by that name:打开宿主机防火墙
- 搭建私库
- docker pull registry
- docker run -d -p 5000:5000 -v /date/volume/registry:/var/lib/registry registry
- curl -X GET http://127.0.0.1:5000/v2/_catalog
- 浏览器 http://192.168.141.133:5000/v2/_catalog
- docker tag orcltest:1.2 192.168.141.133:5000/centos:7
- vi /etc/docker/daemon.json ,"insecure-registries": ["192.168.141.133:5000"]
- systemctl restart docker.service
- docker start 私库id
- setenforce 0
- getenforce Permissive
- docker push 192.168.141.133:5000/centos:7
- curl -X GET http://127.0.0.1:5000/v2/centos/tags/list {"name":"centos","tags":["7"]}
- docker pull <私有库ip>:<端口>/ < 镜像repository> :<镜像tag>
本文详细介绍了如何在Docker中安装Oracle数据库,并提供了从安装基础镜像到配置环境变量、安装Oracle软件、创建数据库的完整步骤。此外还涉及了如何通过Navicat连接数据库以及如何打包整个过程为Docker镜像。
1602

被折叠的 条评论
为什么被折叠?



