在使用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/