Docker技术入门与实战【2.1】
4.配置Weblogic
首先,修改Weblogic的一些环境变量:
root@185546d00925:/opt/Middleware/user_projects/domains/base_domain# vi bin/setDomainEnv.sh
使用用户名和密码启动一次Webogic之后,会在/opt/Middleware/user_projects/domains/base_domain下面生成一个server的文件夹的AdminServer文件夹。
创建security/boot.properties文件,内容如下:
username=weblogic password=password
这样,再次启动Weblogic时,就不需要输入密码了。通过console的输出可以看到Weblogic在容器内启动成功,并监听到7001端口:
root@185546d00925:/opt/Middleware/user_projects/domains/base_domain# ./startWebLogic.sh ..JAVA Memory arguments: -Xms256m -Xmx512m -XX:MaxPermSize=256m .W LS Start Mode=Production #此处省去了一些启动过程 http://www.hzcourse.com/resource/readBook?path=/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/..http://www.hzcourse.com/resource/readBook?path=/openresources/teach_ebook/uncomp <Oct 28, 2014 8:13:52 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 172.17.0.13:7001 for protocols iiop, t3, ldap, snmp, http.> <Oct 28, 2014 8:13:52 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default[2]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.> <Oct 28, 2014 8:13:52 AM UTC> <Warning> <Server> <BEA-002611> <The hostname "localhost", maps to multiple IP addresses: 127.0.0.1, 0:0:0:0:0:0:0:1.> <Oct 28, 2014 8:13:52 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default[3]" is now listening on 0:0:0:0:0:0:0:1:7001 for protocols iiop, t3, ldap, snmp, http.> <Oct 28, 2014 8:13:52 AM UTC> <Notice> <WebLogicServer> <BEA-000329> <Started the WebLogic Server Administration Server "AdminServer" for domain "base_domain" running in production mode <Oct 28, 2014 8:13:52 AM UTC> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.> <Oct 28, 2014 8:13:52 AM UTC> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.> 5.Dockerfile 编写Dockerfile,内容为: FROM weblogic_1 #设置继承自我们创建的weblogic_1镜像 MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com) #下面是一些创建者的基本信息 #设置环境变量, 所有操作都是非交互式的 ENV DEBIAN_FRONTEND noninteractive RUN echo "Asia/Shanghai" > /etc/timezone && \ dpkg-reconfigure -f noninteractive tzdata #注意这里要更改系统的时区设置, 因为在Web应用中经常会用到时区这个系统变量, 默认的ubuntu会让你的应用程序发生不可思议的效果哦 COPY jdk /jdk COPY run.sh /run.sh RUN chmod +x /run.sh EXPOSE 7001 CMD ["/run.sh"] 6.run.sh 编写run.sh脚本,内容为: #!/bin/bash /user/sbin/sshd -D & /opt/Middleware/user_projects/domains/base_domain/startWebLogic.sh 7.创建镜像及测试 使用docker build命令创建镜像,命名为weblogic:jdk1.6: $ sudo docker build -t weblogic:jdk1.6 . Sending build context to Docker daemon 1.256 GB Sending build context to Docker daemon Step 0 : FROM weblogic_1 ---> 6b73c466305f Step 1 : MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com) ---> Using cache ---> c93c4f458baa Step 2 : ENV DEBIAN_FRONTEND noninteractive ---> Using cache ---> 18fef76dc41b Step 3 : RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata ---> Using cache ---> d307ba8bd052 Step 4 : COPY jdk /jdk ---> Using cache ---> a54ffaa93184Step 5 : COPY run.sh /run.sh ---> a21b0ccb0b07 Removing intermediate container eabf04e467dd Step 6 : RUN chmod +x /run.sh ---> Running in 4231d8062f5b ---> f46358aac2e3 Removing intermediate container 4231d8062f5b Step 7 : EXPOSE 7001 ---> Running in d17c80a9ea5b ---> 8bc8dd5c8caa Removing intermediate container d17c80a9ea5b Step 8 : CMD /run.sh ---> Running in 45de5ac8883a ---> d904fe4f91f9 Removing intermediate container 45de5ac8883a Successfully built d904fe4f91f9 启动一个容器,并查看它的映射端口: $ sudo docker run -d -P weblogic:jdk1.6 6c08f5b110affaec256e48b925a1914991c931a8c581f4817fbc5d538e7af2e6 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c08f5b110af weblogic:jdk1.6 "/run.sh" 15 seconds ago Up 14 seconds 0.0.0.0:49163->22/tcp, 0.0.0.0:49164->7001/tcp 使用浏览器登录Weblogic控制台,如图11-5所示。架构师在控制台设置完启动程序、数据源等参数(如图11-6所示)之后,可以重复使用以上步骤创建适合项目运行的Weblogic镜像。
图11-6 Weblogic控制台配置界面
Tomcat/weblogic集群部署
使用本章推荐的方式部署Tomcat和Weblogic的典型拓扑如图11-7所示(图中,Weblogic的位置也可用Tomcat容器替换)。
11.5 LAMP
LAMP指的Linux(操作系统)、ApacheHTTP服务器、MySQL(有时也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的组合方案,一般很适合用来建立Web服务器环境。
下面介绍如何使用Docker来搭建一个包含LAMP组件的容器。
11.5.1 下载LAMP镜像
搜索Docker Hub上被收藏或使用较多的LAMP镜像,笔者推荐选择tutum/lamp镜像:
$ sudo docker search -s 10 lamp
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tutum/lamp LAMP image - Apache listens in port 80, anhttp://www.hzcourse.com/resource/readBook?path=/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 31 [OK]
执行docker pull命令,下载镜像:
$ sudo docker pull tutum/lamp
Pulling repository tutum/lamp
4b32789c7d66: Download complete
http://www.hzcourse.com/resource/readBook?path=/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...
11.5.2 使用默认方式启动LAMP容器
利用下载的镜像启动一个容器,并映射容器的8080端口和3306端口:
$ sudo docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
0ee00c97a5cdefb985baf826c16723f333aa5edddee4072a5107c724ad09f10d
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ee00c97a5cd tutum/lamp:latest "/run.sh" 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, 0.0.0.0:8080->80/tcp lonely_davinci
使用curl命令测试,可以查看到默认的应用已经启动:
$ curl http://127.0.0.1:8080
返回的内容如下:
<html> <head> <title>Hello world!</title> <style> body { background-color: white; text-align: center; padding: 50px; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; }# logo { margin-bottom: 40px; }< /style> </head> <body> <img id="logo" src="logo.png" /> <h1>Hello world!</h1> <h2>MySQL Server version: 5.5.38-0ubuntu0.14.04.1</h2> </body> </html>11.5.3 部署自己的PHP应用
默认的容器启动了一个helloword应用。读者可以基于此镜像,编辑Dockerfile来创建自定义LAMP应用镜像。
在宿主主机上创建新的工作目录lamp:
$ mkdir lamp
$ cd lamp
$ touch Dockerfile
在php目录下里面创建Dockerfile文件,内容为:
FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
#这里将https://github.com/username/customapp.git 地址替换为你自己的项目地址
EXPOSE 80 3306
CMD ["/run.sh"]
创建镜像,命名为dockerpool/my-lamp-app:
$ docker build -t dockerpool/my-lamp-app .
利用新创建镜像启动容器,注意启动时候指定-d参数,让容器后台运行:
$ docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app
在本地主机上使用curl看一下自己的应用程序是不是已经正确启动:
$ curl http://127.0.0.1:8080/
11.5.4 在PHP程序中连接数据库
1.在容器中访问MySQL数据库
下载的tutum/lamp镜像中的MySQL数据库已带有默认的root用户,本地连接可以不使用密码,所以在代码中访问数据库的实现非常简单:
<?php
$mysql = new mysqli("localhost", "root");
echo "MySQL Server info: ".$mysql->host_info;
?>
2.在容器外访问MySQL数据库
默认的MySQL数据库不支持root用户远程登录,因此在容器外无法直接通过root用户访问MySQL数据库。
当第一次使用tutum/lamp镜像启动容器的时候,它会自动创建一个叫admin的MySQL用户,并生成一个随机密码,使用docker logs命令可以获取到这个密码:
$ sudo docker logs 9cb => An empty or uninitialized MySQL volume is detected in /var/lib/mysql => Installing MySQL http://www.hzcourse.com/resource/readBook?path=/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... => Done! => Waiting for confirmation of MySQL service startup => Creating MySQL admin user with random password => Done! ======================================================================== You can now connect to this MySQL Server using: mysql -uadmin -p2Ijg6gvmM0N3 -h<host> -P<port> Please remember to change the above password as soon as possible! MySQL user 'root' has no password but only allows local connections ======================================================================== 注意 admin用户具有root相同的权限。