共计 13935 个字符,预计需要花费 35 分钟才能阅读完成。
更新 apt 源,安装 CA 证书,命令如下:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
添加 GPG 密钥:
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
打开 /etc/apt/sources.list.d/docker.list 文件(没有就建一个)
添加源 deb https://apt.dockerproject.org/repo ubuntu-xenial main 然后保存
根据系统版本选择不同的源:
On Ubuntu Precise 12.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-precise main
On Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty main
Ubuntu Wily 15.10
deb https://apt.dockerproject.org/repo ubuntu-wily main
Ubuntu Xenial 16.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-xenial main
这里选择 Ubuntu Xenial 16.04 (LTS)
更新 apt,并确定 Docker 的源正确
sudo apt-get update
apt-cache policy docker-engine
安装:
sudo apt-get install docker-engine
支持普通用户使用 docker
ppa 安装 docker 组已经被创建了,不然 sudo groupadd docker 建一下
sudo gpasswd -a ${USER} docker
sudo service docker restart
sudo chmod a+rw /var/run/docker.sock
docker search : 从 Docker Hub 查找 oracle 镜
$ docker search oracle
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
oraclelinux Oracle Linux is an open-source operating s... 398 [OK]
frolvlad/alpine-oraclejdk8 The smallest Docker image with OracleJDK 8... 269 [OK]
alexeiled/docker-oracle-xe-11g This is a working (hopefully) Oracle XE 11... 221 [OK]
sath89/oracle-12c Oracle Standard Edition 12c Release 1 with... 214 [OK]
sath89/oracle-xe-11g Oracle xe 11g with database files mount su... 133 [OK]
isuper/java-oracle This repository contains all java releases... 55 [OK]
jaspeen/oracle-11g Docker image for Oracle 11g database 54 [OK]
oracle/glassfish GlassFish Java EE Application Server on Or... 30 [OK]
oracle/openjdk Docker images containing OpenJDK Oracle Linux 25 [OK]
airdock/oracle-jdk Docker Image for Oracle Java SDK (8 and 7)... 23 [OK]
ingensi/oracle-jdk Official Oracle JDK installed on centos. 21 [OK]
cogniteev/oracle-java Oracle JDK 6, 7, 8, and 9 based on Ubuntu ... 20 [OK]
wnameless/oracle-xe-11g Dockerfile of Oracle Database Express Edit... 16 [OK]
n3ziniuka5/ubuntu-oracle-jdk Ubuntu with Oracle JDK. Check tags for ver... 14 [OK]
oracle/nosql Oracle NoSQL on a Docker Image with Oracle... 13 [OK]
collinestes/docker-node-oracle A container with Node.js/Oracle instant cl... 9 [OK]
andreptb/oracle-java Debian Jessie based image with Oracle JDK ... 7 [OK]
sgrio/java-oracle Docker images of Java 7/8 provided by Orac... 7 [OK]
openweb/oracle-tomcat A fork off of Official tomcat image with O... 7 [OK]
flurdy/oracle-java7 Base image containing Oracle's Java 7 JDK 5 [OK]
davidcaste/debian-oracle-java Oracle Java 8 (and 7) over Debian Jessie 3 [OK]
teradatalabs/centos6-java8-oracle Docker image of CentOS 6 with Oracle JDK 8... 3
spansari/nodejs-oracledb nodejs with oracledb installed globally on... 1
publicisworldwide/oracle-core This is the core image based on Oracle Lin... 1 [OK]
sigma/nimbus-lock-oracle 0 [OK]
docker pull sath89/oracle-xe-11g
pull 后显示:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest f2a91732366c 8 days ago 1.85kB
sath89/oracle-xe-11g latest 04851454491b 3 months ago 792MB
创建并启动 oracle 实例:
docker run -d -p 9090:8080 -p 1521:1521 -v /home/${USER}/oracle/data:/u01/app/oracle sath89/oracle-xe-11g
其中 -p 9090:8080 是 docker 镜像中 Oracle Application Express web management 端口 8080 映射到本地 9090 端口:
http://localhost:9090/apex
workspace: INTERNAL
user: ADMIN
password: oracle
-p 1521:1521 是 oracle 服务端口,如果本地端口不想用 1521 可以修改第一个 1521。
具体参考以前的一个博文打造 ubuntu 下精简版的 oracle 客户端及 pro* c 编译环境
11g 的 instantclient 软件 oracle 官网上找不到了我把它放到天翼云上(访问码:6540)
本地配置 oracle 的 SID:
在 /opt/oracle/product/network/admin/tnsnames.ora(和 instantclient 路径有关)追加:
XE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xe)
)
)
不配置也可以直接:
sqlplus sys/oracle@127.0.0.1:1521/xe as sysdba
sqlplus system/oracle@//localhost:1521/xe
配置好了就可以这样访问
sqlplus sys/oracle@xe as sysdba
sqlplus system/oracle@xe
其中 sys 和 system 是预设的两个用户,一个是 sysdba 权限一个是 system 权限。初始密码都为 oracle
建议安装成功后立刻修改 sys 密码
sqlplus sys/oracle@xe as sysdba
SQL>alter user sys identified by your-passwd
创建表空间
SQL> create tablespace myts datafile '/u01/app/oracle/oradata/XE/myts.dbf' size 100M autoextend on next 5M maxsize 400M;
修改系统默认表空间
SQL> alter database default tablespace MYTS;
SQL> select a.property_name, a.property_value from database_properties a where a.property_name like '%DEFAULT%';
PROPERTY_NAME
--------------------------------------------------------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE
TEMP
DEFAULT_PERMANENT_TABLESPACE
MYTS
DEFAULT_EDITION
ORA$BASE
.......
创建用户、授权并制定表空间
SQL> create user scott identified by tiger;
SQL> grant connect, resource to scott;
SQL> alter user scott default tablespace myts;
建表脚本 myscott.sql:
--------------------------------------------------------
-- File created - 星期六 - 六月 -14-2014
--------------------------------------------------------
--------------------------------------------------------
-- DDL for Table BONUS
--------------------------------------------------------
CREATE TABLE "BONUS"
("ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"SAL" NUMBER,
"COMM" NUMBER
) ;
--------------------------------------------------------
-- DDL for Table DEPT
--------------------------------------------------------
CREATE TABLE "DEPT"
("DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13)
) ;
--------------------------------------------------------
-- DDL for Table EMP
--------------------------------------------------------
CREATE TABLE "EMP"
("EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)
) ;
--------------------------------------------------------
-- DDL for Table SALGRADE
--------------------------------------------------------
CREATE TABLE "SALGRADE"
( "GRADE" NUMBER,
"LOSAL" NUMBER,
"HISAL" NUMBER
) ;
---------------------------------------------------
-- DATA FOR TABLE BONUS
-- FILTER = none used
---------------------------------------------------
REM INSERTING into BONUS
---------------------------------------------------
-- END DATA FOR TABLE BONUS
---------------------------------------------------
---------------------------------------------------
-- DATA FOR TABLE DEPT
-- FILTER = none used
---------------------------------------------------
REM INSERTING into DEPT
Insert into DEPT (DEPTNO,DNAME,LOC) values (10,'ACCOUNTING','NEW YORK');
Insert into DEPT (DEPTNO,DNAME,LOC) values (20,'RESEARCH','DALLAS');
Insert into DEPT (DEPTNO,DNAME,LOC) values (30,'SALES','CHICAGO');
Insert into DEPT (DEPTNO,DNAME,LOC) values (40,'OPERATIONS','BOSTON');
---------------------------------------------------
-- END DATA FOR TABLE DEPT
---------------------------------------------------
---------------------------------------------------
-- DATA FOR TABLE EMP
-- FILTER = none used
---------------------------------------------------
REM INSERTING into EMP
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7369,'SMITH','CLERK',7902,to_timestamp('17-12 月 -80 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),800,null,20);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7499,'ALLEN','SALESMAN',7698,to_timestamp('20- 2 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),1600,300,30);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7521,'WARD','SALESMAN',7698,to_timestamp('22- 2 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),1250,500,30);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7566,'JONES','MANAGER',7839,to_timestamp('02- 4 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),2975,null,20);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7654,'MARTIN','SALESMAN',7698,to_timestamp('28- 9 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),1250,1400,30);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7698,'BLAKE','MANAGER',7839,to_timestamp('01- 5 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),2850,null,30);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7782,'CLARK','MANAGER',7839,to_timestamp('09- 6 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),2450,null,10);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7788,'SCOTT','ANALYST',7566,to_timestamp('19- 4 月 -87 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),3000,null,20);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7839,'KING','PRESIDENT',null,to_timestamp('17-11 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),5000,null,10);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7844,'TURNER','SALESMAN',7698,to_timestamp('08- 9 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),1500,0,30);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7876,'ADAMS','CLERK',7788,to_timestamp('23- 5 月 -87 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),1100,null,20);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7900,'JAMES','CLERK',7698,to_timestamp('03-12 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),950,null,30);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7902,'FORD','ANALYST',7566,to_timestamp('03-12 月 -81 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),3000,null,20);
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7934,'MILLER','CLERK',7782,to_timestamp('23- 1 月 -82 12.00.00.000000000 上午','DD-MON-RR HH.MI.SS.FF AM'),1300,null,10);
---------------------------------------------------
-- END DATA FOR TABLE EMP
---------------------------------------------------
---------------------------------------------------
-- DATA FOR TABLE SALGRADE
-- FILTER = none used
---------------------------------------------------
REM INSERTING into SALGRADE
Insert into SALGRADE (GRADE,LOSAL,HISAL) values (1,700,1200);
Insert into SALGRADE (GRADE,LOSAL,HISAL) values (2,1201,1400);
Insert into SALGRADE (GRADE,LOSAL,HISAL) values (3,1401,2000);
Insert into SALGRADE (GRADE,LOSAL,HISAL) values (4,2001,3000);
Insert into SALGRADE (GRADE,LOSAL,HISAL) values (5,3001,9999);
---------------------------------------------------
-- END DATA FOR TABLE SALGRADE
---------------------------------------------------
--------------------------------------------------------
-- DDL for Index PK_EMP
--------------------------------------------------------
CREATE UNIQUE INDEX "PK_EMP" ON "EMP" ("EMPNO")
;
--------------------------------------------------------
-- DDL for Index PK_DEPT
--------------------------------------------------------
CREATE UNIQUE INDEX "PK_DEPT" ON "DEPT" ("DEPTNO")
;
--------------------------------------------------------
-- Constraints for Table EMP
--------------------------------------------------------
ALTER TABLE "EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ENABLE;
--------------------------------------------------------
-- Constraints for Table DEPT
--------------------------------------------------------
ALTER TABLE "DEPT" ADD CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ENABLE;
--------------------------------------------------------
-- Ref Constraints for Table EMP
--------------------------------------------------------
ALTER TABLE "EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE;
执行脚本、查询:
SQL> @myscott.sql
SQL> select * from EMP;
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c6a2c2761fb sath89/oracle-xe-11g "/entrypoint.sh" 2 minutes ago Up About a minute 0.0.0.0:1521->1521/tcp, 0.0.0.0:9090->8080/tcp dreamy_pasteur
$ docker exec -it 3c6a2c2761fb /bin/bash
root@3c6a2c2761fb:/# su oracle
oracle@3c6a2c2761fb:/$ $ORACLE_HOME/bin/sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Wed Nov 29 13:40:15 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> quit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
oracle@8e1a86793036:/$ $ORACLE_HOME/bin/sqlplus scott/tiger
SQL*Plus: Release 11.2.0.2.0 Production on Wed Nov 29 13:40:24 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
......
$ docker stop 3c6a2c2761fb
$ docker start 3c6a2c2761fb
为方便后续的管理可在.bashrc 中追加 alias
alias orastartdock='docker start 3c6a2c2761fb'
alias orastopdock='docker stop 3c6a2c2761fb'
也可以在
docker run -d --name=oracle1 -p 9090:8080 -p 1521:1521 -v /home/${USER}/oracle/data:/u01/app/oracle sath89/oracle-xe-11g
指定容器名 oracle1,这样用来以下方式来停止和启动实例:
$ docker stop oracle1
$ docker start oracle1
而不必使用前面由 docker 随机生成的 CONTAINER ID
可用~$ docker rename oracle1 ora1 来重命名 docker 容器名,用~$docker rm 容器名 or 容器 ID 来删除,也可用下面的命令全部删除
docker rm $(docker ps -aq)
当然启动状态下是不能删的。
只要改变端口和数据存放路径,一个镜像可以建立多个 oracle 实例,如:
docker run -d --name=oracle2 -p 9092:8080 -p 1522:1521 -v /home/${USER}/oracle/data2:/u01/app/oracle sath89/oracle-xe-11g
docker run -d --name=ora3 -p 9093:8080 -p 1523:1521 -v /home/${USER}/oracle/data3:/u01/app/oracle sath89/oracle-12c
这样你可以很容易建立多个 oracle 环境。
$docker pull mysql:5.7.20
$docker run -p 3307:3306 --name mysql5.7.20 -v /home/${USER}/mysqldata/mysql5.7.20/conf:/etc/mysql/conf.d -v /home/${USER}/mysqldata/mysql5.7.20/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.20
$ docker exec -it mysql5.7.20 bash
# mysql -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
root@657aaa1203f4:/# exit
exit
~$ mysql -h 127.0.0.1 -P3307 -u root -123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement
mysql> quit
这里必须加上 -h 127.0.0.1,不然哪怕指定了端口 -P3307 还是连到宿主机的 mysql 而不是 docker 容器的那个, 这是因为宿主机上在.my.cf 指定了 3306 端口。