@@ -40,6 +40,7 @@ limitations under the License.
40
40
- 3.11.1 [ Copying node-oracledb Binaries on Windows] ( #winbins )
41
41
- 3.12 [ Installing Node.js and Node-oracledb RPMs from yum.oracle.com] ( #instnoderpms )
42
42
- 3.13 [ Building and Hosting your own node-oracledb Packages] ( #selfhost )
43
+ - 3.14 [ Using node-oracledb in Docker] ( #docker )
43
44
4 . [ Installing Older Versions of Node-oracledb] ( #installingoldvers )
44
45
- 4.1 [ Installing node-oracledb 2.x and 3.x] ( #installingv2 )
45
46
- 4.2 [ Installing node-oracledb 1.x] ( #installingv1 )
@@ -1425,6 +1426,255 @@ or your `package.json` would contain:
1425
1426
. . .
1426
1427
```
1427
1428
1429
+ ### <a name =" docker " ></a > 3.14 Using node-oracledb in Docker
1430
+
1431
+ [ Docker] [ 59 ] allows applications to be containerized. Each application will
1432
+ have a ` Dockerfile ` with steps to create a Docker image. Once created, the
1433
+ image can be shared and run.
1434
+
1435
+ #### Installing Node.js in Docker
1436
+
1437
+ If your ` Dockerfile ` uses Oracle Linux:
1438
+
1439
+ ```
1440
+ FROM oraclelinux:7-slim
1441
+ ```
1442
+
1443
+ Then you can install Node.js from [ yum.oracle.com] [ 46 ] using:
1444
+
1445
+ ```
1446
+ RUN yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \
1447
+ yum-config-manager --disable ol7_developer_EPEL && \
1448
+ yum -y install nodejs && \
1449
+ rm -rf /var/cache/yum
1450
+ ```
1451
+
1452
+ Alternatively you may prefer to use a [ Node.js image from
1453
+ Docker Hub] [ 56 ] , for
1454
+ example using:
1455
+
1456
+ ```
1457
+ FROM node:12-buster-slim
1458
+ ```
1459
+
1460
+ #### Installing Instant Client in Docker
1461
+
1462
+ Review the [ Oracle Technology Network] [ 12 ] or the [ Oracle Linux 7] [ 51 ] channel
1463
+ for the latest Instant Client package available.
1464
+
1465
+ 1 . Using Oracle Linux Instant Client RPMs
1466
+
1467
+ If you have an Oracle Linux image:
1468
+
1469
+ ```
1470
+ FROM oraclelinux:7-slim
1471
+ ```
1472
+
1473
+ Then you can install Instant Client RPMs:
1474
+
1475
+ ```
1476
+ RUN yum -y install oracle-release-el7 && \
1477
+ yum-config-manager --enable ol7_oracle_instantclient && \
1478
+ yum -y install oracle-instantclient19.3-basiclite && \
1479
+ rm -rf /var/cache/yum
1480
+ ```
1481
+
1482
+ 2 . Automatically downloading the Instant Client zip File
1483
+
1484
+ Use an Instant Client zip file on Debian-based operating systems.
1485
+
1486
+ You can script the download of the Instant Client package during image
1487
+ creation. To use the latest available Instant Client:
1488
+
1489
+ ```
1490
+ RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \
1491
+ unzip instantclient-basiclite-linuxx64.zip && rm -f instantclient-basiclite-linuxx64.zip && \
1492
+ cd /opt/oracle/instantclient* && rm -f *jdbc* *occi* *mysql* *jar uidrvci genezi adrci && \
1493
+ echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig
1494
+ ```
1495
+
1496
+ The `libaio` or `libaio1` package will need to be added manually.
1497
+
1498
+ On Oracle Linux
1499
+
1500
+ ```
1501
+ RUN yum install -y libaio
1502
+ ```
1503
+
1504
+ On a Debian-based Linux:
1505
+ ```
1506
+ RUN apt-get update && apt-get install -y libaio1
1507
+ ```
1508
+
1509
+ 3. Copying Instant Client zip files from the host
1510
+
1511
+ Download the Instant Client Basic Light Zip file, extract it, and remove
1512
+ unnecessary files. The resulting directory can be added during image
1513
+ creation. For example, with Instant Client Basic Light 19.3, the host
1514
+ computer (where you run Docker) could have a directory `instantclient_19_3`
1515
+ with these files:
1516
+
1517
+ ```
1518
+ libclntshcore.so.19.1
1519
+ libclntsh.so.19.1
1520
+ libipc1.so
1521
+ libmql1.so
1522
+ libnnz19.so
1523
+ libociicus.so
1524
+ ```
1525
+
1526
+ With this, your Dockerfile could contain:
1527
+
1528
+ ```
1529
+ ADD instantclient_19_3/* /opt/oracle/instantclient_19_3
1530
+ RUN echo /opt/oracle/instantclient_19_3 > /etc/ld.so.conf.d/oracle-instantclient.conf && \
1531
+ ldconfig
1532
+ ```
1533
+
1534
+ The `libaio` or `libaio1` package will be needed, as shown in the previous option.
1535
+
1536
+ #### Installing node-oracledb and your application
1537
+
1538
+ Include node-oracledb as a normal dependency in your application `package.json` file:
1539
+
1540
+ ```
1541
+ . . .
1542
+ "scripts": {
1543
+ "start": "node server.js"
1544
+ },
1545
+ "dependencies": {
1546
+ "oracledb" : "^4"
1547
+ },
1548
+ . . .
1549
+ ```
1550
+
1551
+ The `packge.json` and application file can be added to the image, and
1552
+ dependencies installed when the image is built:
1553
+
1554
+ ```
1555
+ WORKDIR /myapp
1556
+ ADD package.json /myapp/
1557
+ ADD server.js /myapp/
1558
+ RUN npm install
1559
+
1560
+ CMD exec node server.js
1561
+ ```
1562
+
1563
+ #### Using Oracle Net configuration files and Oracle Wallets
1564
+
1565
+ [Optional Oracle Net Configuration][58] files (like `tnsnames.ora` and
1566
+ `sqlnet.net`) and files that need to be secured such as [Oracle wallets][57] can
1567
+ be mounted at runtime using a Docker volume. Map the volume to the
1568
+ `network/admin` subdirectory of Instant Client so the `TNS_ADMIN` environment
1569
+ variable does not need to be set. For example, when the Wallet or configuration
1570
+ files are in `/OracleCloud/wallet/` on the host computer, and the image uses
1571
+ Instant Client 19.3 RPMs, then you can mount the files using:
1572
+
1573
+ ```
1574
+ docker run -v /OracleCloud/wallet:/usr/lib/oracle/19.3/client64/lib/network/admin: Z ,ro . . .
1575
+ ```
1576
+
1577
+ The `Z` option is needed when SELinux is enabled.
1578
+
1579
+ #### <a name="dockerexample"></a> Example Application in Docker
1580
+
1581
+ This example consists of a `Dockerfile`, a `package.json` file with the
1582
+ application dependencies, a `server.js` file that is the application, and an
1583
+ `envfile.list` containing the database credentials as environment variables. It
1584
+ is based on Oracle Linux.
1585
+
1586
+ The example `Dockerfile` is:
1587
+
1588
+ ```
1589
+ FROM oraclelinux:7-slim
1590
+
1591
+ RUN yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \
1592
+ yum-config-manager --disable ol7_developer_EPEL --enable ol7_oracle_instantclient && \
1593
+ yum -y install nodejs oracle-instantclient19.3-basiclite && \
1594
+ rm -rf /var/cache/yum
1595
+
1596
+ WORKDIR /myapp
1597
+ ADD package.json /myapp/
1598
+ ADD server.js /myapp/
1599
+ RUN npm install
1600
+
1601
+ CMD exec node server.js
1602
+ ```
1603
+
1604
+ The `package.json` is:
1605
+
1606
+ ```
1607
+ {
1608
+ "name": "test",
1609
+ "version": "1.0.0",
1610
+ "private": true,
1611
+ "description": "Docker Node.js application",
1612
+ "scripts": {
1613
+ "start": "node server.js"
1614
+ },
1615
+ "keywords": [
1616
+ "myapp"
1617
+ ] ,
1618
+ "dependencies": {
1619
+ "oracledb" : "^4"
1620
+ },
1621
+ "author": "Me",
1622
+ "license": "UPL"
1623
+ }
1624
+ ```
1625
+
1626
+ The application `server.js` contains:
1627
+
1628
+ ```javascript
1629
+ . . .
1630
+ connection = await oracledb.getConnection({
1631
+ user: process.env.NODE_ORACLEDB_USER,
1632
+ password: process.env.NODE_ORACLEDB_PASSWORD,
1633
+ connectString: process.env.NODE_ORACLEDB_CONNECTIONSTRING
1634
+ });
1635
+ const result = await connection.execute(
1636
+ `SELECT TO_CHAR(CURRENT_DATE, 'DD-Mon-YYYY HH24:MI') AS D FROM DUAL`,
1637
+ [],
1638
+ { outFormat: oracledb.OUT_FORMAT_OBJECT }
1639
+ );
1640
+ console.log(result);
1641
+ . . .
1642
+ ```
1643
+
1644
+ The environment variables in ` envfile.list ` are used at runtime. The file
1645
+ contains:
1646
+
1647
+ ```
1648
+ NODE_ORACLEDB_USER=hr
1649
+ NODE_ORACLEDB_PASSWORD=<hr password>
1650
+ NODE_ORACLEDB_CONNECTIONSTRING=server.example.com/orclpdb1
1651
+ ```
1652
+
1653
+ The image can be built:
1654
+
1655
+ ```
1656
+ docker build -t nodedoc .
1657
+
1658
+ ```
1659
+
1660
+ Alternatively, if you are behind a firewall, you can pass proxies when building:
1661
+
1662
+ ```
1663
+ docker build --build-arg https_proxy=http://myproxy.example.com:80 --build-arg http_proxy=http://www-myproxy.example.com:80 -t nodedoc .
1664
+ ```
1665
+
1666
+ Finaly, a container can be run from the image:
1667
+
1668
+ ```
1669
+ docker run -ti --name nodedoc --env-file envfile.list nodedoc
1670
+ ```
1671
+
1672
+ The output is like:
1673
+
1674
+ ```
1675
+ { metaData: [ { name: 'D' } ],
1676
+ rows: [ { D: '24-Nov-2019 23:39' } ] }
1677
+ ```
1428
1678
1429
1679
## <a name =" installingoldvers " ></a > 4. Installing Older Versions of Node-oracledb
1430
1680
@@ -1546,7 +1796,7 @@ Issues and questions about node-oracledb can be posted on [GitHub][10] or
1546
1796
1547
1797
[ 1 ] : http://oracle.github.io/node-oracledb/
1548
1798
[ 2 ] : https://www.python.org/downloads/
1549
- [ 3 ] : http ://www.oracle.com/technetwork/ database/database- technologies/instant-client/overview/index .html
1799
+ [ 3 ] : https ://www.oracle.com/database/technologies/instant-client.html
1550
1800
[ 4 ] : https://www.npmjs.com/package/oracledb
1551
1801
[ 5 ] : https://blogs.oracle.com/opal/getting-a-c11-compiler-for-node-4,-5-and-6-on-oracle-linux-6
1552
1802
[ 6 ] : https://support.oracle.com/epmos/faces/DocumentDisplay?id=207303.1
@@ -1555,8 +1805,8 @@ Issues and questions about node-oracledb can be posted on [GitHub][10] or
1555
1805
[ 9 ] : https://www.github.com/oracle/odpi
1556
1806
[ 10 ] : https://github.com/oracle/node-oracledb/issues
1557
1807
[ 11 ] : http://nodejs.org
1558
- [ 12 ] : http ://www.oracle.com/technetwork/topics/linuxx86-64soft-092277 .html
1559
- [ 13 ] : http ://www.oracle.com/technetwork/topics/linuxx86-64soft-092277 .html#ic_x64_inst
1808
+ [ 12 ] : https ://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads .html
1809
+ [ 13 ] : https ://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads .html#ic_x64_inst
1560
1810
[ 14 ] : https://linux.oracle.com
1561
1811
[ 15 ] : https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-7F967CE5-5498-427C-9390-4A5C6767ADAA
1562
1812
[ 16 ] : https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-2041545B-58D4-48DC-986F-DCC9D0DEC642
@@ -1565,15 +1815,15 @@ Issues and questions about node-oracledb can be posted on [GitHub][10] or
1565
1815
[ 19 ] : https://github.com/oracle/node-oracledb/tree/master/examples
1566
1816
[ 20 ] : https://www.oracle.com/database/technologies/appdev/xe.html
1567
1817
[ 21 ] : https://blogs.oracle.com/opal/the-easiest-way-to-install-oracle-database-on-apple-mac-os-x
1568
- [ 22 ] : http ://www.oracle.com/technetwork/topics/ intel-macsoft-096467 .html
1818
+ [ 22 ] : https ://www.oracle.com/database/technologies/instant-client/macos- intel-x86-downloads .html
1569
1819
[ 23 ] : https://docs.oracle.com/database/
1570
1820
[ 24 ] : https://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=NTCLI
1571
- [ 25 ] : http ://www.oracle.com/technetwork/topics/winx64soft-089540 .html
1572
- [ 26 ] : http ://www.oracle.com/technetwork/topics/winsoft-085727 .html
1821
+ [ 25 ] : https ://www.oracle.com/database/technologies/instant-client/winx64-64-downloads .html
1822
+ [ 26 ] : https ://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads .html
1573
1823
[ 27 ] : https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
1574
1824
[ 29 ] : https://www.microsoft.com/en-us/download/details.aspx?id=3387
1575
- [ 30 ] : http ://www.oracle.com/technetwork/topics/aix5lsoft-098883 .html
1576
- [ 31 ] : http ://www.oracle.com/technetwork/topics/solx8664soft-097204 .html
1825
+ [ 30 ] : https ://www.oracle.com/database/technologies/instant-client/aix-ppc64-downloads .html
1826
+ [ 31 ] : https ://www.oracle.com/database/technologies/instant-client/solx8664-downloads .html
1577
1827
[ 32 ] : https://github.com/oracle/node-oracledb/blob/v1.13.1/INSTALL.md
1578
1828
[ 40 ] : https://github.com/oracle/node-oracledb/tags
1579
1829
[ 41 ] : https://github.com/oracle/node-oracledb/releases
@@ -1591,3 +1841,7 @@ Issues and questions about node-oracledb can be posted on [GitHub][10] or
1591
1841
[ 53 ] : https://nodejs.org/api/n-api.html
1592
1842
[ 54 ] : https://github.com/oracle/node-oracledb/blob/v3.0.1/INSTALL.md
1593
1843
[ 55 ] : https://github.com/oracle/node-oracledb/blob/v3.1.2/INSTALL.md
1844
+ [ 56 ] : https://hub.docker.com/_/node/
1845
+ [ 57 ] : https://oracle.github.io/node-oracledb/doc/api.html#connectionadb
1846
+ [ 58 ] : https://oracle.github.io/node-oracledb/doc/api.html##tnsadmin
1847
+ [ 59 ] : https://www.docker.com/
0 commit comments