java应用部署docker_Docker部署JavaWeb项目实战

摘要:本文主要讲了怎样在Ubuntu14.04 64位系统下来创建一个执行Java web应用程序的Docker容器。

一、下载镜像、启动容器

1、下载镜像

先查看镜像

docker images

79ec0fb0a9b4d0eaad6d0a74fb2b7b33.png

记住这个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 假设看到以上输出。说明您能够使用“docker.cn/docker/centos”这个镜像了,或将其称为仓库(Repository),该镜像有一个名为“centos6”的标签(Tag),此外另一个名为“25c5298b1a36 ”的镜像 ID(可能您所示镜像 ID 与此处的不一致,那是正常现象。由于这个数字是随机生成的)。此外,我们能够看到该镜像仅仅有 215.8 MB,很小巧,而不像虚拟机的镜像文件那样庞大。

如今镜像已经有了。我们下面就须要使用该镜像,来启动容器。当中。相关參数包括:

-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来看。例如以下:

5e75f5e5ad91cc72ec359db8fec756b5.png

然后再次启动已启动过但如今是关闭的容器

docker start sick_mestorf这个命令仅仅会启动容器,不会进入容器。要进入容器得用命令

docker attach 容器ID或容器名

例如以下:

eb2fe9e16f83ff5f4934eca1f986ce50.png

二、安装相关软件

首先先将JDK和tomcat的安装包.gz文件放在外面的/download文件夹下

8ddc5ad38a2bea3c65a0affdbca78deb.png

然后再次启动容器。

进入容器

d82b2ea2052a38e40319296b7fadc9f4.png

然后看看是否有安装包。发现两个都在了,下面能够安装了

056609068af001d04ea73265e2313680.png

1、安装JDK

直接使用

cd /usr

mkdir java

cd java

mkdir jdk

cd /mnt/software/

tar zxvf jdk-8u65-linux-x64.gz -C /usr/java/jdk这里直接接文件解压到/usr/java/jdk文件夹。例如以下

1bfaae2d0ab8fb3291fb499fa8b242e7.png

配置环境变量

输入: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

7bc9b0d7428910cd4d3b05ade43a9c36.png注意此处改成相应的jdk的文件夹,而且要以root用户来做改动,否则无法保存

保存后执行:

source /etc/profile验证安装:

输入:

java -version

2e80b284bf872ee305cc8d0949dd6325.png

假设出现例如以下内容,说明成功安装

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

a5caba8b61fd094ddde4e2880ec20527.png

说明tomcat启动成功

或者使用例如以下命令查看:

3b02f825cbc6b176b1b3ab915912fe7f.png

三、配置容器启动环境变量

(上面的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

输出例如以下内容:

487f743ed68ac3648a7dbc0e0d46e04a.png

记住以上CONTAINER ID(容器 ID),随后我们将通过该容器,创建一个可执行 Java Web 的镜像。

四、创建 Java Web 镜像使用下面命令,依据某个“容器 ID”来创建一个新的“镜像”:

docker commit 89a47b5b749e lin_javaweb:0.1该容器的 ID 是“89a47b5b749e”,所创建的镜像名是“lin_javaweb:0.1”。随后可使用镜像来启动 Java Web 容器。

这是创建成功后

10d2c8a45946ddf9c84a1522fc18e69c.png

相同能够查看下镜像

ba3798f3b3553d2c764b02ce26c65feb.png

五、启动 Java Web 容器有必要首先使用docker images命令,查看当前全部的镜像:

e5280c9a022b8695aa467c7b283fd199.png可见。此时已经看到了最新创建的镜像“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命令来查看当前正在执行的容器。

840df8f6605fcd1f904f533eff508dad.png

在浏览器中,输入下面地址,就可以訪问 Tomcat 首页:

http://127.0.0.1:58080/

或者

http://localhost:58080/

注意:这里使用的是宿主机的 IP 地址,与对外暴露的端口号 58080,它映射容器内部的端口号 8080。

681923341c86c7a6d3b44e1f828fe5f9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python解析http数据包_如何在python中嗅探HTTP数据包?

I want to sniff all the HTTP packets in my computer via python(version2.6.. is this possible? can I do it with scapy, or without other external modules?解决方案Scrapy is only for extracting data from webpages or similar structured documents.To actually r…

如何用Java创建不可变的Map

你好朋友, 在本教程中,我们将看到如何用Java创建不可变的Map。 –不可变的类或对象是什么意思? –什么是不可变地图? –如何在Java中创建不可变的Map? 不变的类或对象是什么意思? 不可变的类或对象是创…

quartz java 线程 不释放_java Quartz 内存泄漏

我用定时器启动应用的时候发现内存泄漏,具体报错如下:十月 30, 2015 2:30:12 下午 org.apache.catalina.startup.HostConfig undeploy信息: Undeploying context [/ChinaMoney Maven Webapp]十月 30, 2015 2:30:15 下午 org.apache.catalina.loader.Weba…

在ultraedit查找每行第二个单词_新手收藏!亚马逊关键字查找

亚马逊销售中最重要的是“排名”。而“关键字”对提高排名很重要。搜索结果对亚马逊的销售产生重大影响。要想让你的产品被显示在搜索结果的顶部,那你必须选择有效的关键字。搜索关键词排名一直上不去,你可能会这么想:“关键字不好吧......。…

java opencv磨皮算法_使用OPENCV简单实现具有肤质保留功能的磨皮增白算法

在一个美颜高手那里发现一个美颜算法,他写出了数学表达式,没有给出代码,正好在研究OPENCV,顺手实现之。具体过程就是一系列矩阵运算,据说是从一个PS高手那里研究 出来的,一并表示感谢。这是数学表达式&…

junit单元测试断言_简而言之,JUnit:单元测试断言

junit单元测试断言简而言之,本章涵盖了各种单元测试声明技术。 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 。 正在进行的示例扩大了主题,并说明了如何创建和使用自定义匹配器/断言。 单元测试断言 信任但要验证 罗纳德里…

keyshot环境素材文件_KeyShot渲染,打光这么打,效果倍儿棒

有过渲染经验的小伙伴们应该知道,除了需要对渲染软件的操作熟悉外,最重要的莫过于“材质”和“灯光”。而这里,就不得不提到KeyShot,作为工业设计行业必须要掌握的技能之一,它在行业当中的地位可谓独树一帜。除了其操作…

redis种类型对应java类型_Redis的五种基本数据类型介绍

Redis作为缓存具有极其丰富的功能,比如计数器、好友关系以及排行榜等等。而Redis之所能够实现如此强大的功能,完全是依赖着它的基本数据结构。今天我们来看看Redis的五种基本的数据结构,分别是字符串(strings), 散列(hashes)&…

REST /使用提要发布事件

处理事件 当使用多个解耦的服务时(例如,在微服务体系结构中 ),很有可能需要一种将某种域事件从一个服务发布到一个或多个其他服务的方法。 许多广泛采用的解决方案依赖于单独的基础结构来解决此问题(例如事件总线或消…

pycharm如何更改python项目环境_PyCharm如何导入python项目,并配置虚拟环境

rtc关机闹钟7 jni层 com_android_server_AlarmManagerServiceframeworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp int AlarmImplAlarmDrive ...ThinkPad E431怎样关闭触摸板ThinkPad E431怎样关闭触摸板 系统环境…

java虚拟机手机下载_java虚拟机下载

java虚拟机是一款可以运行Java代码的虚拟计算机软件。java虚拟机是根据规格描述将java解释器移植到指定计算机上,就能保证经过用户编译的任何Java代码能够在虚拟系统上完美运行。java虚拟机功能介绍java虚拟机一种用于计算机设备的规范,可用不同的方式(软…

hibernate自动配置_Hibernate自动冲洗的黑暗面

hibernate自动配置介绍 既然我已经描述了JPA和Hibernate刷新策略的基础知识 ,我就可以继续阐明Hibernate的AUTO刷新模式的令人惊讶的行为。 并非所有查询都会触发会话刷新 许多人会认为Hibernate 总是在执行任何查询之前先刷新Session。 虽然这可能是一种更直观的方…

slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...

大家好,我是程序员7歌!今天我将为大家讲解如何通过自定义注解记录接口访问日志。一般的开发中,有两种方式可以记录日志信息,第一种:把接口日志信息保存到日志文件中,第二种:把接口操作日志保存到…

java applet audion_java applet audion

①希罗尤尔和他的飞翼敢达也有着不少拥趸,让我们期待这位美少年在《敢达决战》中的表现吧。②颜值时代,浏览器皮肤也不能输360浏览器耳目一新的设计,高清精美的壁纸,让你上网时更添一份好心情。软件使用1、支持游戏小号2、优化小程…

处理Java异常的10种最佳实践

在本文中,我们将看到处理Java异常的最佳实践。 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专家级开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常。 因此,最大的开发公司对如何使用它们有一套规则。 如果您是…

markdown 流程图_Markdown 进阶技能:用代码画流程图(编程零基础也适用)

这篇文章主要介绍流程图基础以写代码的方式画流程图相比于使用画图工具拖拽画图,用代码画图有什么好处?首先,这种方式非常轻便,无需安装复杂的画图应用。Typora 等多种 Markdown 编辑器自带有画图扩展(这也是 Markdown…

java jtree_Java JTree

Java JTree1 Java JTree的介绍JTree类用于显示树结构数据或层次结构数据。JTree是一个复杂的组件。它的最顶部有一个“根节点”,它是树中所有节点的父节点。它继承了JComponent类。2 Java JTree的声明我们来看一下javax.swing.JTree类的声明。public class JTree ex…

akka和rabbitmq_Akka Notes –演员记录和测试

akka和rabbitmq在前两部分( 一 , 二 )中,我们简要讨论了Actor以及消息传递的工作方式。 在这一部分中,让我们看一下如何修复并记录我们的TeacherActor 。 回顾 这就是我们上一部分中的Actor的样子: class…

完数c++语言程序_C语言经典100题(19)

1上期答案揭晓首先给大家看看上一篇文章C语言经典100题(18)中第三部分编程题的答案:#includeint main(){ int s0,a,n,t; printf("请输入 a 和 n:\n"); scanf("%d%d",&a,&n); ta; while(n>0) { …

PHP怎样表示几时几分,PHP将时间戳转换为刚刚、N分钟前、今天几点几分、昨天几点几分......

自定义函数&#xff1a;<?php date_default_timezone_set(PRC); // 设置时区&#xff0c;如果已经设置可以删除function timeFormat( $timestamp ) {$curTime time();$space $curTime - $timestamp;if($space < 60) { // 一分钟以内$string "刚刚";return …