您的位置:首页 > 运维架构 > Docker

使用Docker搭建Java Web运行环境

2016-08-01 00:00 766 查看

1、启动容器

容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。既然镜像已经下载到本地,那么如何才能启动容器呢?

只需使用以下命令即可启动容器:

docker run -i -t -v /var/ftp/pub/:/mnt/software/ 25c5298b1a36 /bin/bash

这条命令比较长,我们稍微分解一下,其实包含以下三个部分:

docker run <相关参数> <镜像 ID> <初始命令>

其中,相关参数包括:

i:表示以“交互模式”运行容器

t:表示容器启动后会进入其命令行

v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/var/ftp/pub/目录下,现在需要将其挂载到容器的/mnt/software/目录下。

需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:centos:latest。



初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。

2、登陆容器

登陆容器之前,首先看看当前有哪些容器在运行,执行命令sudo docker ps。

[dddd@v069208183.sqa.zmf /home/dddd]
$sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
bed98ed5934a        centos              "/bin/bash"         15 hours ago        Up 14 hours                             ecstatic_noyce

看见当前运行的容器为bed98ed5934a,接下来进入容器,通过执行命令sudo docker exec -it bed98ed5934a /bin/bash。

[dddd@v069208183.sqa.zmf /home/dddd]
$sudo docker exec -it bed98ed5934a /bin/bash
[root@bed98ed5934a /]# ps aux|grep java
root        30  0.0  0.0   9040   672 ?        S+   06:44   0:00 grep --color=auto java
[root@bed98ed5934a /]# ifconfig

这样你就进到这个container 里面了,这个bash退出也不会影响之前 docker run 启动的 bash。

3、安装相关软件

3.1、安装JDK

我习惯直接从其他服务器中直接拷贝文件,所以我用scp拷贝文件,由于是原生的centos没有配置scp服务,所以先安装scp服务。

scp服务的安装包名字并不是scp,完整的名字为openssh-clients-5.3p1-70.1.alios6.x86_64:

[dddd@e011239162048.et15sqa /opt/java]
$which scp
/usr/bin/scp

[dddd@e011239162048.et15sqa /opt/java]
$rpm -qf /usr/bin/scp
openssh-clients-5.3p1-70.1.alios6.x86_64

所以,在当前的容器中执行yum命令安装此服务:

[root@bed98ed5934a java]# yum -y install openssh-clients




scp服务安装结束后,开始拷贝远程服务器jdk-8u45-linux-x64.tar.gz

[root@bed98ed5934a java]# scp dddd@112.239.162.68:/opt/java/jdk-8u45-linux-x64.tar.gz ./




解压安装包

[root@bed98ed5934a java]# tar -zxvf jdk-8u45-linux-x64.tar.gz




配置环节变量,在/etc/profile文件末尾添加下述内容保存,并source /etc/profile使变更生效。

# JAVA
export JAVA_HOME=/opt/java/jdk1.8.0_45/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

验证java配置OK,至此jdk安装完毕。

[root@bed98ed5934a java]# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
[root@bed98ed5934a java]# javac -version
javac 1.8.0_45
[root@bed98ed5934a java]#

3.2、安装tomcat

拷贝tomcat文件到容器中,解压运行。



4、编写服务启动脚本

容器关闭时,里面的服务也会随之停掉,所以为了方便和易操作,我们编写一个服务启动脚本,类似于Linux的启动服务。

以启动 Tomcat为例,具体过程如下:

首先,创建运行脚本:

vi /root/run.sh

然后,编辑脚本内容如下:

#!/bin/bash
source /etc/profile
sh /opt/tomcat/apache-tomcat-7.0.57/bin/ catalina.sh run

注意:这里必须先加载环境变量,然后使用 Tomcat 的运行脚本来启动 Tomcat 服务。

最后,为运行脚本添加执行权限:

chmod u+x /root/run.sh

5、创建 Java Web镜像

使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”:

$sudo docker commit bed98ed5934a loongshawn/javaweb:0.1

指定容器的 ID 是“bed98ed5934a”,所创建的镜像名是“loongshawn/javaweb:0.1”,随后可使用镜像来启动 Java Web 容器。



6、启动Java Web容器

已经知道,需要运行的镜像为loongshawn/javaweb:0.1,通常情况下,可以通过“镜像名”或“镜像 ID”来启动容器,但这次不同,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。此时,需要使用以下命令:

docker run -d -p 58080:8080 --name javaweb loongshawn/javaweb:0.1 /root/run.sh

启动后产生异常,指定端口创建容器启动失败:

Couldn't run auplink before unmount: exec: \"auplink\": executable file not found in $PATH

具体异常:

time="2016-06-26T23:36:32.192176586+08:00" level=info msg="POST /v1.19/containers/create?name=javaweb"
time="2016-06-26T23:36:32.218425441+08:00" level=error msg="Couldn't run auplink before unmount: exec: \"auplink\": executable file not found in $PATH"
time="2016-06-26T23:36:32.232759795+08:00" level=error msg="Couldn't run auplink before unmount: exec: \"auplink\": executable file not found in $PATH"
time="2016-06-26T23:36:32.241180421+08:00" level=info msg="POST /v1.19/containers/56bc4a1a53ef3ef59c1590d7ffeff9dac9d6f48c792ccc635f7ad175653c88d2/start"
time="2016-06-26T23:36:32.458249610+08:00" level=error msg="Couldn't run auplink before unmount: exec: \"auplink\": executable file not found in $PATH"

Github大牛答复:

You have installed a kernel which seems to be AUFS enabled on CentOS 6. CentOS isn't a Linux distribution on which AUFS is in any way supported. The aufs-tools package isn't available there and using AUFS on that Linux distribution isn't recommended, nor supported.

That auplink problem isn't fixable without aufs-tools.

Please upgrade to CentOS 7 if you wish to use a recent kernel in a supported setup.

https://github.com/docker/docker/issues/1300

https://github.com/docker/docker/pull/816
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: