Docker部署JavaWeb项⽬实战
林炳⽂Evankaka原创作品。转载请注明出处
摘要:本⽂主要讲了怎样在Ubuntu14.04 64位系统下来创建⼀个执⾏Java web应⽤程序的Docker容器。
1、下载镜像
先查看镜像
docker images
记住这个Image ID,下⾯我们启动容器须要⽤到它。
假设看到以上输出,说明您能够使⽤“oursuer/ubuntu”这个镜像了,或将其称为仓库(Repository)。该镜像有⼀个名为“14.04”的标签(Tag),此外另⼀个名为
1f879014f4d2 的镜像 ID(可能您所⽰镜像 ID 与此处的不⼀致,那是正常现象,由于这个数字是随机⽣成的)。此外,我们能够看到该镜像仅仅有188.4 MB,很⼩巧,⽽不像虚拟机的镜像⽂件那样庞⼤。
如今镜像已经有了,我们下⾯就须要使⽤该镜像,来启动容器。
2、启动容器
容器是在镜像的基础上来执⾏的,⼀旦容器启动了,我们就能够登录到容器中,安装⾃⼰所需的软件或应⽤程序。既然镜像已经下载到本地。那么怎样才⼲启动容器呢?
仅仅需使⽤下⾯命令就可以启动容器:
docker run -i -t -v /download/:/mnt/software/ 1f879014f4d2 /bin/bash
这条命令⽐較长。我们略微分解⼀下,事实上包括下⾯三个部分:
docker run <;相关參数> <;镜像 ID> <;初始命令>
假设看到以上输出。说明您能够使⽤“docker/docker/centos”这个镜像了,或将其称为仓库(Repository),该镜像有⼀个名为“centos6”的标签(Tag),此外另⼀个名为“25c5298b1a36 ”的镜像 ID(可能您所⽰镜像 ID 与此处的不⼀致,那是正常现象。由于这个数字是随机⽣成的)。此外,我们能够看到该镜像仅仅有 215.8 MB,很⼩巧,⽽不像虚拟机的镜像⽂件那样庞⼤。
如今镜像已经有了。我们下⾯就须要使⽤该镜像,来启动容器。
当中。相关參数包括:
repository文件夹可以删除吗
-i:表⽰以“交互模式”执⾏容器
-t:表⽰容器启动后会进⼊其命令⾏
-v:表⽰须要将本地哪个⽂件夹挂载到容器中,格式:-v <;宿主机⽂件夹>:<;容器⽂件夹>
假设我们的全部安装程序都放在了宿主机的/download/⽂件夹下,如今须要将其挂载到容器的/mnt/software/⽂件夹下。
须要说明的是,不⼀定要使⽤“镜像 ID”。也能够使⽤“仓库名:标签名”。⽐如:oursuer/ubuntu:14.04。
初始命令表⽰⼀旦容器启动。须要执⾏的命令,此时使⽤“/bin/bash”,表⽰什么也不做,仅仅需进⼊命令⾏就可以。
退出容器使⽤Ctrl+d或输⼊exit
假设退出容器后,能够再次使⽤命令(注意,得先执⾏docker run之后然后被stop掉的容器才⼲够使⽤例如以下命令)
docker start 容器ID
当中容器ID。
使⽤命令docker ps -a来看。例如以下:
然后再次启动已启动过但如今是关闭的容器
docker start sick_mestorf
这个命令仅仅会启动容器,不会进⼊容器。要进⼊容器得⽤命令
docker attach 容器ID或容器名
例如以下:
⾸先先将JDK和tomcat的安装包.gz⽂件放在外⾯的/download⽂件夹下
然后再次启动容器。
进⼊容器
然后看看是否有安装包。发现两个都在了,下⾯能够安装了
1、安装JDK
直接使⽤
cd /usr
mkdir java
cd java
mkdir jdk
cd /mnt/software/
tar -C /usr/java/jdk
这⾥直接接⽂件解压到/usr/java/jdk⽂件夹。例如以下
配置环境变量
输⼊:
vi /etc/profile
加⼊例如以下内容:
#set java environment
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_65
export JRE_HOME=/usr/java/jdk/jdk1.8.0_65/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
注意此处改成相应的jdk的⽂件夹,⽽且要以root⽤户来做改动,否则⽆法保存保存后执⾏:
source /etc/profile
验证安装:
输⼊:
java -version
假设出现例如以下内容,说明成功安装
2、tomcat安装
直接解压
cd /usr/java
mkdir tomcat
tar zxvf  -C /usr/java/tomcat
配置环境
进⼊到上⾯的tomcat的bin⽂件夹下:
打开
vi setclasspath.sh
gedit setclasspath.sh
加⼊例如以下内容:
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_65
export JRE_HOME=/usr/java/jdk/jdk1.8.0_65/jre
保存就可以。
然后退回到bin⽂件夹下:
执⾏:
./startup.sh
说明tomcat启动成功
或者使⽤例如以下命令查看:
(上⾯的JDK配置环境变量能够不要,可是这⾥的⼀定要写
!。
由于这⾥是设置容器启动时载⼊的环境变量)
1、环境变量设置
⾸先,编辑.bashrc⽂件
vi ~/.bashrc
然后,在该⽂件末尾加⼊例如以下配置:
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_65
export JRE_HOME=/usr/java/jdk/jdk1.8.0_65/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
最后。须要使⽤source命令。让环境变量⽣效:
source ~/.bashrc
2、编写执⾏脚本
我们须要编写⼀个执⾏脚本,当启动容器时,执⾏该脚本,启动 Tomcat,详细步骤例如以下:
⾸先,创建执⾏脚本:
vi /root/run.sh
然后,编辑脚本内容例如以下:
#!/bin/bash
source ~/.bashrc
sh /usr/java/tomcat/apache-tomcat-7.0.68/bin/catalina.sh run
注意:这⾥必须先载⼊环境变量,然后使⽤ Tomcat 的执⾏脚本来启动 Tomcat 服务。
最后,为执⾏脚本加⼊执⾏权限:
chmod u+x /root/run.sh
3、退出容器
当以上步骤全部完毕后,可使⽤exit或ctrl+d命令,退出容器。
随后,可使⽤例如以下命令查看正在执⾏的容器:
docker ps
此时,您应该看不到不论什么正在执⾏的程序。由于刚才已经使⽤exit命令退出的容器,此时容器处于停⽌状态,可使⽤例如以下命令查看全部容器:docker ps -a
输出例如以下内容:
记住以上CONTAINER ID(容器 ID),随后我们将通过该容器,创建⼀个可执⾏ Java Web 的镜像。
使⽤下⾯命令,依据某个“容器 ID”来创建⼀个新的“镜像”:
docker commit 89a47b5b749e  lin_javaweb:0.1
该容器的 ID 是“89a47b5b749e”,所创建的镜像名是“lin_javaweb:0.1”。随后可使⽤镜像来启动 Java Web 容器。
这是创建成功后
相同能够查看下镜像
有必要⾸先使⽤docker images命令,查看当前全部的镜像:
可见。此时已经看到了最新创建的镜像“lin_javaweb:0.1”,其镜像 ID 是“4487bd38df06”。正如上⾯所描写叙述的那样,我们能够通过“镜像名”或“镜像ID”来启动容器,与上次启动容器不同的是,我们如今不再进⼊容器的命令⾏。⽽是直接启动容器内部的 Tomcat 服务。此时,须要使⽤下⾯命令:docker run -d -p 58080:8080 --name javaweb lin_javaweb:0.1 /root/run.sh
稍作解释:
-d:表⽰以“守护模式”执⾏/root/run.sh脚本,此时 Tomcat 控制台不会出如今输出终端上。
-p:表⽰宿主机与容器的端⼝映射。此时将容器内部的 8080 端⼝映射为宿主机的 58080 端⼝。这样就向外界暴露了 58080 端⼝。可通过 Docker ⽹桥来訪问容器内部的 8080 端⼝了。--name:表⽰容器名称。⽤⼀个有意义的名称命名就可以。
关于 Docker ⽹桥的内容。须要补充说明⼀下。实际上 Docker 在宿主机与容器之间。搭建了⼀座⽹络通信的桥梁,我们可通过宿主机 IP 地址与端⼝号来映射容器内部的 IP 地址与端⼝号,
在⼀系列參数后⾯的是“镜像名”或“镜像 ID”,怎么⽅便就怎么来。
最后是“初始命令”,它是上⾯编写的执⾏脚本,⾥⾯封装了载⼊环境变量并启动 Tomcat 服务的命令。
当执⾏以上命令后,会马上输出⼀长串“容器 ID”,我们可通过docker ps命令来查看当前正在执⾏的容器。
在浏览器中,输⼊下⾯地址,就可以訪问 Tomcat ⾸页:
127.0.0.1:58080/
或者
localhost:58080/
注意:这⾥使⽤的是宿主机的 IP 地址,与对外暴露的端⼝号 58080,它映射容器内部的端⼝号 8080。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。