本文假设你已经安装好了Docker
与Python
的虚拟环境。
借助于强力的Docker
,让我们安装Oracle
数据库变得更简单,而不是花很久的时间来安装数据库,让我们来体验一下Docker
的强大之处吧。
Repo URL: https://github.com/oracle/docker-images
Oracle Database 12c Release 2
for Linux x86-64Download URL:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
~/Downloads$ ls -l
总用量 3379844
-rw-r--r-- 1 ansheng ansheng 7248413 10月 16 15:55 docker-images-master.zip
-rw-r--r-- 1 ansheng ansheng 3453696911 10月 15 16:22 linuxx64_12201_database.zip
解压docker-images-master.zip
~/Downloads$ unzip docker-images-master.zip
拷贝linuxx64_12201_database.zip
文件到docker-images-master/OracleDatabase/dockerfiles/12.2.0.1
目录下,因为我们下载的是12.2.0.1
版本,所以需要拷贝到12.2.0.1
目录下。
~/Downloads$ cp linuxx64_12201_database.zip docker-images-master/OracleDatabase/dockerfiles/12.2.0.1/
Oracle
为我们提供了快速构建镜像的脚本,我们只需要指定构建的版本即可,但请确保你的网络是流畅的,因为在构建的过程中会更新和安装一些软件包。
~/Downloads$ cd docker-images-master/OracleDatabase/dockerfiles/
~/Downloads/docker-images-master/OracleDatabase/dockerfiles$ sudo ./buildDockerImage.sh -v 12.2.0.1 -e
然后就会开始构建镜像了,这个过程是漫长的,因为我用的是Ubuntu
,所以执行的时候需要加sudo
权限,脚本的参数-v
指定要构建的版本,-e
根据企业版
创建镜像。
更多的参数请访问:https://github.com/oracle/docker-images/tree/master/OracleDatabase#building-oracle-database-docker-install-images
当构建完毕之后我们通过sudo docker images
指令来查看构建好的镜像
~/Downloads/docker-images-master/OracleDatabase/dockerfiles$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 12.2.0.1-ee 7ace5bfa1100 About a minute ago 13.2GB
oraclelinux 7-slim a6e9e9e5ddc1 2 weeks ago 118MB
上面的镜像中,oracle/database
就是根据oraclelinux
来构建的,构建出来的镜像还是挺大的
执行以下指令启动容器
~/Downloads/docker-images-master/OracleDatabase/dockerfiles$ cd
~$ sudo docker run -d --name oracle -p 1521:1521 -p 5500:5500 -e ORACLE_SID=ansheng -e ORACLE_PWD=ansheng.me oracle/database:12.2.0.1-ee
affc07af4da51f03c67db1cb7266bd66aef442c71793a216ce2be4e5349b0cbd
启动参数解释如下:
参数 | 描述 |
---|---|
-d |
后台运行 |
--name |
指定容器运行的名称 |
-p |
制定映射的端口 |
-e ORACLE_SID |
第一次创建容器创建一个默认的SID |
-e ORACLE_PWD |
密码 |
上面的启动参数可以有更多,请参考https://github.com/oracle/docker-images/tree/master/OracleDatabase#building-oracle-database-docker-install-images
你还可以通过docker logs
来查看启动日志,启动过程有点慢…
~$ sudo docker logs -f oracle
容器启动完成之后可以测试连接
$ sudo docker exec oracle sqlplus sys/ansheng.me@//localhost:1521/ansheng as sysdba
你还可以执行以下执行来更改密码
~$ docker exec oracle ./setPassword.sh <Your Password>
容器内的Oracle数据库
还配置了Oracle Enterprise Manager Express
,要访问OEM Express
,请启动浏览器并按照以下URL:
https://localhost:5500/em/
请先切换到虚拟环境在进行以下操作,我使用的是pyenv
~$ pyenv activate venv
(venv) ~$
(venv) ~$ pip install django djangorestframework
(venv) ~$ django-admin startproject ansheng
(venv) ~$ cd ansheng/
(venv) ~/ansheng$ python manage.py startapp july
from django.db import models
# Create your models here.
class Love(models.Model):
name = models.CharField(max_length=12, null=True, blank=True, help_text='名称')
username = models.CharField(max_length=32, help_text='用户名')
email = models.EmailField(help_text='邮箱')
from .models import Account
from rest_framework import serializers, viewsets
# Create your serializers here.
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = '__all__'
# Create your views here.
class AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
from july.views import AccountViewSet
router = DefaultRouter()
router.register('accounts', AccountViewSet, base_name='accounts')
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
INSTALLED_APPS = [
...
'rest_framework',
'july'
]
cx-Oracle
是django
连接oracle
的一个库
(venv) ~/ansheng$ pip3 install cx-Oracle
将ansheng/settings.py
中的DATABASES
替换为
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'ansheng',
'USER': 'system',
'PASSWORD': 'ansheng.me',
'HOST': '127.0.0.1',
'PORT': '1521',
}
}
要在Linux
上面连接Oracle
,你还需要安装客户端的一些lib,可以在http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html中下载,下载后的文件如下:
(venv) ~/ansheng$ cd ~/Downloads/
(venv) ~/Downloads$ ls -l
-rw-r--r-- 1 ansheng ansheng 52826628 10月 16 17:06 oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
-rw-r--r-- 1 ansheng ansheng 606864 10月 16 17:00 oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
-rw-r--r-- 1 ansheng ansheng 708104 10月 16 17:00 oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
因为我用的是Ubuntu
不能直接安装rpm
,所以需要借助alien
来把rpm
包转换为deb
包
# 安装alien
(venv) ~/Downloads$ sudo apt-get install alien
# 借助alien进行安装
(venv) ~/Downloads$ sudo alien -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
(venv) ~/Downloads$ sudo alien -i oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
(venv) ~/Downloads$ sudo alien -i oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
# 安装所需要的库
(venv) ~/Downloads$ sudo apt-get install libaio1
我们使用的Oracle是12.2版本的,所以一定要下载和Oracle一样的版本,不然是不能使用的
环境配置
(venv) ~/Downloads$ vim /etc/ld.so.conf
......
/usr/lib/oracle/12.2/client64/lib/
重新加载库文件
(venv) ~/Downloads$ sudo ldconfig
执行以下执行生成临时变量,这些配置都是针对当前窗口生效的,如果你想永久生效,可以加入用户的~/.bashrc
文件中
(venv) ~/Downloads$ export ORACLE_HOME=/usr/lib/oracle/12.2/client64
(venv) ~/Downloads$ export ORACLE_BASE=/usr/lib/oracle/12.2
(venv) ~/Downloads$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
(venv) ~/Downloads$ export PATH=$PATH:$ORACLE_HOME/bin
进入项目目录,生成数据库表
(venv) ~/Downloads$ cd ~/ansheng/
(venv) ~/ansheng$ python manage.py migrate
生成july
表结构
(venv) ~/ansheng$ python manage.py makemigrations july
(venv) ~/ansheng$ python manage.py migrate
启动项目
(venv) ~/ansheng$ python manage.py runserver
然后浏览器打开http://127.0.0.1:8000/accounts/
,进行增删改查试下呗