Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching, Zero-Downtime Upgrade, GoldenGate

Oracle Exadata ,Oracle ODA, Oracle ZDLRA


当前位置: 首页 » 技术文章 » Cloud

Docker--Link a Web Server Container to a MySQL Container

在使用Docker的时候我们会遇到这种情况,需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务。比如一个web应用,一个DB数据库,我们需要将两个容器连接起来。在创建容器时,可以使用--link选项来实现。


查看docker image信息

[ohsdba@ovm ~]$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
ohsdba/httpd         v2                  ff2c7c83451e        4 hours ago         273.4 MB
mysql/mysql-server   latest              43d4a6c26521        24 hours ago        369.1 MB
oraclelinux          6                   175adfa05e40        10 weeks ago        223.1 MB
[ohsdba@ovm ~]$

查看容器信息
[ohsdba@ovm ~]$ docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                  NAMES
db29569e3d7c        mysql/mysql-server   "/entrypoint.sh mysql"   About an hour ago   Up About an hour    3306/tcp, 33060/tcp    mysqldb
c307c7132420        ohsdba/httpd:v2      "/bin/sh -c '/usr/sbi"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp   ohs

创建一新容器ohs-web1,用于连接MySQL数据库

--link mysqldb:db,其中mysqldb是容器面,后面的db是对应的别名,这样在这两个容器里就可以使用db来作为提供mysql数据库服务的机器名

[ohsdba@ovm ~]$ docker run -d --name ohs-web1 -v /home/webdir -p 80:80 --link mysqldb:db ohsdba/httpd:v2
b097e74f87ea5d5ee5aa8ebaf9fcb140219923e3e9da4834998531beae77303a
[ohsdba@ovm ~]$ 

查看容器信息
[ohsdba@ovm ~]$ docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                  NAMES
b097e74f87ea        ohsdba/httpd:v2      "/bin/sh -c '/usr/sbi"   7 seconds ago       Up 6 seconds        0.0.0.0:80->80/tcp     ohs-web1
db29569e3d7c        mysql/mysql-server   "/entrypoint.sh mysql"   About an hour ago   Up About an hour    3306/tcp, 33060/tcp    mysqldb
c307c7132420        ohsdba/httpd:v2      "/bin/sh -c '/usr/sbi"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp   ohs
[ohsdba@ovm ~]$

获取容器ohs-web1的Ip地址
[ohsdba@ovm ~]$ docker inspect ohs-web1|grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",
[ohsdba@ovm ~]$

配置容器ohs-web1
修改httpd.conf,支持cgi
[root@b097e74f87ea ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.con.bak
vi /etc/httpd/conf/httpd.conf
修改#AddHandler cgi-script .cgi
   为AddHandler cgi-script .cgi .pl
编写ohsdba.pl脚本
[root@b097e74f87ea ~]# cd /var/www/cgi-bin/
[root@b097e74f87ea cgi-bin]# cat ohsdba.pl
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
use DBI;
my $dbh = DBI->connect("DBI:mysql:database=sys;host=db", "root", "ohsdba", {'RaiseError' => 1});

my $sth = $dbh->prepare("select * from version");

$sth->execute();

while(@ary = $sth->fetchrow_array())
{
print join("\t",@ary),"\n";
}

$sth->finish;

$dbh->disconnect();
[root@b097e74f87ea cgi-bin]#
安装perl-DBD-MySQL包
[root@b097e74f87ea cgi-bin]# perl ohsdba.pl
Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at doquery.pl line 2.
BEGIN failed--compilation aborted at doquery.pl line 2.
[root@b097e74f87ea cgi-bin]# yum -y install perl-DBD-MySQL
Installed:
  perl-DBD-MySQL.x86_64 0:4.013-3.el6
Dependency Installed:
  mysql-libs.x86_64 0:5.1.73-7.el6                                                               
  perl-DBI.x86_64 0:1.609-4.el6
Complete!
[root@b097e74f87ea cgi-bin]#
修改ohsdba.pl脚本权限
[ohsdba@ovm ~]$ docker exec -i -t ohs-web1 bash
[root@b097e74f87ea /]# cd /var/www/cgi-bin/
[root@b097e74f87ea cgi-bin]#
[root@b097e74f87ea cgi-bin]# ls -l
total 4
-rw-r--r--. 1 root root 302 Oct  5 11:59 ohsdba.pl
[root@b097e74f87ea cgi-bin]#
[root@b097e74f87ea ~]#
[root@b097e74f87ea cgi-bin]# chmod 755 ohsdba.pl
[root@b097e74f87ea cgi-bin]# ls -l ohsdba.pl
-rwxr-xr-x. 1 root root 344 Oct  5 12:11 ohsdba.pl
[root@b097e74f87ea cgi-bin]#
注意:权限不对,可能会碰到下面的错误信息
[root@b097e74f87ea cgi-bin]# cd /var/log/httpd/
[root@b097e74f87ea httpd]# ls -ltr
total 8
-rw-r--r--. 1 root root 2404 Oct  5 12:07 error_log
-rw-r--r--. 1 root root 1787 Oct  5 12:07 access_log
[root@b097e74f87ea httpd]# less error_log
WARNING: terminal is not fully functional
[Wed Oct 05 10:19:51 2016] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4 for ServerName
[Wed Oct 05 10:19:51 2016] [notice] Digest: generating secret for digest authentication ...
[Wed Oct 05 10:19:51 2016] [notice] Digest: done
[Wed Oct 05 10:19:51 2016] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- resuming normal operations
[Wed Oct 05 10:22:25 2016] [error] [client 172.17.0.1] File does not exist: /var/www/html/cgi
[Wed Oct 05 10:45:10 2016] [error] [client 172.17.0.1] (13)Permission denied: exec of '/var/www/cgi-bin/ohsdba.pl' failed
[Wed Oct 05 10:45:10 2016] [error] [client 172.17.0.1] Premature end of script headers: ohsdba.pl
[Wed Oct 05 10:45:42 2016] [error] [client 172.17.0.1] attempt to invoke directory as script: /var/www/cgi-bin/
[Wed Oct 05 10:45:59 2016] [error] [client 172.17.0.1] (13)Permission denied: exec of '/var/www/cgi-bin/ohsdba.pl' failed
[Wed Oct 05 10:45:59 2016] [error] [client 172.17.0.1] Premature end of script headers: ohsdba.pl
[Wed Oct 05 12:06:00 2016] [notice] caught SIGTERM, shutting down
[Wed Oct 05 12:06:05 2016] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4 for ServerName
[Wed Oct 05 12:06:05 2016] [notice] Digest: generating secret for digest authentication ...
[Wed Oct 05 12:06:05 2016] [notice] Digest: done
[Wed Oct 05 12:06:05 2016] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- resuming normal operations
[Wed Oct 05 12:06:18 2016] [error] [client 172.17.0.1] malformed header from script. Bad header=1.5.1\t5.7.15: ohsdba.pl
[Wed Oct 05 12:06:55 2016] [error] [client 172.17.0.1] attempt to invoke directory as script: /var/www/cgi-bin/
[Wed Oct 05 12:07:06 2016] [error] [client 172.17.0.1] malformed header from script. Bad header=1.5.1\t5.7.15: ohsdba.pl
[root@b097e74f87ea httpd]#

测试web应用

[ohsdba@ovm ~]$ curl http://172.17.0.4/cgi-bin/ohsdba.pl
1.5.1   5.7.15
[ohsdba@ovm ~]$ 


Reference

https://docs.oracle.com/cd/E52668_01/E75728/html/section_krw_nfv_dq.html

https://community.oracle.com/docs/DOC-914969

https://encodable.com/internal_server_error/



关键词:docker cloud 

相关文章

Oracle Cloud Native Solutions
Oracle Kubernetes Engine
Terraform,docker,wercker,k8s
Vagrant with oracle
Install oracle products on docker
Oracle自治数据仓库云
OMC - How to Install Gateway Agent
Oracle大数据之交互式快速参考
Oracle数据库云服务
Oracle数据库备份云服务
Oracle RAC and Third Party Cloud
Oracle Database Multilingual Engine(MLE)
Top