linux安装docker部署java项目

大家好,我是烤鸭:

分享一下linux上部署docker的javaweb项目

 

1.环境

linux centos 7.2

64-bit 系统

kernel 3.10+

 查看版本号 :

uname -r

大于3.10即可

2.安装docker

这里是官网安装教程

https://docs.docker.com/engine/installation/linux/docker-ce/centos/

说一下docker ce 和ee版的区别,ce是社区版免费的,ee是企业版,收费的。

简述几个安装命令,一路打下来就好。

2.1.移除之前定的安装:

yum remove docker \docker-common \docker-selinux \docker-engine

2.2.设置仓库:

yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

2.3.安装docker-ce

yum install docker-ce


2.4.启动docker

systemctl start docker

2.5.运行hello-world镜像

docker run hello-world

成功如下图:



3.docker安装成功了,我选择的是官网拉取一个centos镜像

这里是官网的商店,可以找你想要的镜像。

https://store.docker.com/search?offering=community&type=edition

https://store.docker.com/images/centos

其实要的就是这个命令:

docker pull centos

拉取到了centos的镜像,我们用镜像启动容器。

4.镜像创建与容器启动

4.1查看镜像

docker images


4.2用镜像启动容器

docker run -i -t -v /download/:/usr/my/docker/download/ 3fa822599e10 /bin/bash
其中,相关参数包括:  
-i:表示以“交互模式”运行容器  
-t:表示容器启动后会进入其命令行  
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

说一下downlaod和/usr/my/docker/download/

前者表示你把东西放在你服务器的download/文件夹下,在进入容器的时候,文件会相应地映射到/usr/my/docker/download/这个文件夹下。

/bin/bash表示启动后进入命令行,crtl+d或者exit退出。

如果这一步出现:Permission denied,参考这篇大神的文章:http://blog.csdn.net/rznice/article/details/52170085

查看容器:

docker ps -a

4.3重新进入容器

首先启动容器:

docker start c806a68d2409

进入容器:

docker attach c806a68d2409

5.java环境安装

5.1将jdk的tar包和tomcat的tar包放到/download/文件下

如图所示:

5.2 这时候进入容器指定目录,我的是/usr/mmy/就能找找到这两个jar包,解压和配置环境变量。

5.3解压jdk和tomcat的tar包

cd /usr/my  
mkdir jdk  
mkdir tomcat
cd /usr/my/docker/download/  
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/my/jdk 
tar -zxvf apache-tomcat-9.0.0.M26.tar.gz -C /usr/my/tomcatmv apache-tomcat-9.0.0.M26 tomcat_test

5.4配置环境变量

这里我没有配置jdk的环境变量,因为不需要,当然也可以配置。

vi /etc/profile  

G-到最后一行,o-新换行开始。最后一行加上:

#set java environment   
export JAVA_HOME=/usr/my/jdk/jdk1.8.0_144  
export JRE_HOME=$JAVA_HOME/jre   
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH   
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH 

保存后 执行生效:

source /etc/profile   

查看java版本:

5.5配置tomcat

进入tomcat的bin目录下

cd /usr/my/tomcat/tomcat_test/bin
vi setclasspath.sh 
vi setclasspath.sh 

最后添加:

export JAVA_HOME=/usr/my/jdk/jdk1.8.0_144 
export JRE_HOME=$JAVA_HOME/jre

保存后,启动tomcat。

./startup.sh


6.配置容器启动环境变量

之所以前面说jdk的环境变量可以不配置,因为容器启动重新加载单独的配置文件。

6.1设置环境变量

vi ~/.bashrc

文件最后加上:

#set java environment   
export JAVA_HOME=/usr/my/jdk/jdk1.8.0_144  
export JRE_HOME=$JAVA_HOME/jre   
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH   
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH 

生效:

source ~/.bashrc 

6.2编写运行脚本

vi /root/run.sh

脚本内容如下:

#!/bin/bash  
source ~/.bashrc  
sh /usr/my/tomcat/tomcat_test/bin/catalina.sh run 

千万不要忘记给脚本加权限

chmod u+x /root/run.sh 

这时候容器内部的准备工作就完了。退出容器。

7.创建web镜像

查找容器:

docker ps -a

创建镜像:

docker commit c806a68d2409 test_web:1.0 

启动镜像:

docker run -d -p 8999:8080 --name  test test_web:1.0 /root/run.sh


-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。  
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 8999端口,这样就向外界暴露了 8999端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。  
--name:表示容器名称,用一个有意义的名称命名即可。

查看镜像:

docker ps

如果能查到,说明启动成功了。

最后附上一张访问成功的图(8999端口):


部分内容来自:

http://blog.csdn.net/evankaka/article/details/50722788

8.问题:

另外说一下出现的问题:

8.1.如果出现类似bash:vi:或者cd或者ps等常用命令

command not find
检查一下/etc/profile下,是不是新配的环境变量有问题。

vi命令不好用的话:

在命令行中输入:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin  这样可以保证命令行命令暂时可以使用。
8.2.如果出现容器启动没反应,docker ps 找不到内容,但是启动没报错

估计是脚本启动失败,原因不太清楚。

可以试着把/etc/profile文件还原,再尝试下。

毕竟启动容器不需要改/etc/profile这个文件,有单独的文件~/.bashrc配置环境变量就可以了。
 




 

 

 

 

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

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

相关文章

Java面试题谷歌插件

该插件可以让您在做WEB开发的同时&#xff0c;也可以去学习一些理论知识&#xff0c;加深你的技术。 随机题&#xff1a;每次点开插件&#xff0c;从题库中随机筛选出的题 当前题&#xff1a;是桌面通知的题目&#xff0c;每三分钟随机发送一次桌面通知 追加题&#xff1a;向…

[css] 你知道CSS的标准发布流程吗?

[css] 你知道CSS的标准发布流程吗&#xff1f; 随着 CSS 3 的广泛应用&#xff0c;很多新的 CSS 属性层出不穷&#xff0c;有很多陌生的 CSS 属性出现&#xff0c;所以经常需要去学习新的 CSS 属性。新的属性往往介绍文章不多&#xff0c;所以有时候就需要去看看官方文档&…

Apache Curator之分布式锁原理(二)

本文主要讲解如下内容&#xff1a; 为什么要使用分布式锁&#xff1f;分布式锁特性&#xff01;分布式锁的实现方式有哪些&#xff1f;Curator分布式锁原理Curator分布式锁实现类UML及相关类的介绍基于Redis&#xff0c;数据库实现分布式锁为什么要使用分布式锁&#xff1f; 在…

阿里云服务器发送邮件失败?连接超时?25端口被封?

大家好&#xff0c;我是烤鸭&#xff1a; 之前用阿里云服务器的时候发送126企业邮箱&#xff0c;用的smtp方式&#xff0c;但是一直超时。百思不得其解。因为在本地环境是可以的。 原来是阿里云服务器限制了25端口。问了126邮箱那边的技术客服&#xff0c;只支持25端口。 问了…

[css] 举例说明css有哪些简写的属性和属性值?

[css] 举例说明css有哪些简写的属性和属性值&#xff1f; border: solid 1px red;border-style: solid; border-width: 1px; border-color: red;animation: fadeIn .5s forward ease-in .2s infinite;animation-name: fadeIn; animation-duration: 0.5s; animation-fill-mode:…

JS重写Alert方法

var _alert window.alert; window.alert function(){ console.log(arguments); _alert(arguments); }

Pat乙级1011题:A+B和C

题目&#xff1a;给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。我写的代码&#xff1a; del abc(self,a,b,c,i):if ab>c: print("Case #X: true"%i)else:print("Case #X: false"%i)return 0if __name__"__ma…

springboot版的微信公众号,订阅号

大家好&#xff0c;我是烤鸭&#xff1a; 这是一篇微信公众号入门的文章&#xff0c;如果是个人的话&#xff0c;只能申请未认证的订阅号。如果是公司的话&#xff0c;想申请啥都是可以的。 这篇文章说的就是个人订阅号。 环境: centos 7.3 springboot 1.5 需要&#xff…

[css] 请说说颜色中#F00的每一位分别表示什么?为什么会有三位和六位的表示呢?

[css] 请说说颜色中#F00的每一位分别表示什么&#xff1f;为什么会有三位和六位的表示呢&#xff1f; 颜色可以使用红-绿-蓝&#xff08;red-green-blue (RGB)&#xff09;模式的两种方式被定义&#xff1a;十六进制符号 #RRGGBB 和 #RGB "#" 后跟6位十六进制字符&a…

[css] 请使用css写一个多级的下拉菜单

[css] 请使用css写一个多级的下拉菜单 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"…

Javascript报错Failed to execute ‘querySelectorAll‘ on ‘Document‘: ‘#123456‘ is not a valid sele

Javascript报错&#xff1a;Failed to execute ‘querySelectorAll’ on ‘Document’: ‘#123456’ is not a valid selector 解决方式(除开特殊符号,第一个字符必须是字母)&#xff1a; 第一种&#xff1a; 将ID前面加字母&#xff0c;例如&#xff1a;document.querySelect…

pycharm创建django项目linux部署

大家好&#xff0c;我是烤鸭&#xff1a; pytho部署web项目比java简单一点&#xff0c;虽然springboot内置了tomcat。 环境&#xff1a; pycharm专业版python3.6 1.安装python python下载&#xff1a;https://www.python.org/downloads/ 我使用的3.6版本 2.配置环境变量 path目…

【USACO15DEC】最大流Max Flow

题面 FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道&#xff0c;隔间编号从1到N。所有隔间都被管道连通了。 FJ有K(1≤K≤100,000)条运输牛奶的路线&#xff0c;第i条路线从隔间si运输到隔间ti。一条运输路线会给它的两个端点处的隔间以及中间途径的所有隔间带来一个…

[css] 用css给一个元素加边框有哪些方法?

[css] 用css给一个元素加边框有哪些方法&#xff1f; :scope {border: 3px solid black;box-shadow: 0 0 0 1px black; /*不影响布局,无限叠加*/outline: 1px solid black; /*不支持圆角*/background-image: url("data:image/svgxml,%3Csvg xmlnshttp://www.w3.org/2000/…

java格式化html代码

/*** 格式化html代码* param model* param html* return*/RequestMapping("/formatHtml.dhtml")ResponseBodypublic M formatHtml(Model model,String html) {if(StringUtils.isNotBlank(html)) {try {Document doc Jsoup.parseBodyFragment(html);html doc.body()…

利用Android Studio快速搭建App

大家好&#xff0c;我是烤鸭: 给大家分享一个简单的用Android Studio快速搭建app 工具&#xff1a;Android Studio 64位 专业版 插件:Datepicker Timepicker okhttp 实现需求&#xff1a;界面上选择时间&#xff0c;发get/post请求到后台&#xff0c;获取选择的时间。1.修改And…

[css] 相邻兄弟选择器、后代选择器和子选择器三者有什么区别?

[css] 相邻兄弟选择器、后代选择器和子选择器三者有什么区别&#xff1f; 后代选择器与子选择的关系&#xff1a;后代选择器>子选择器。 后代选择器&#xff1a;包括父元素的子元素以及孙子元素&#xff08;代表符号&#xff1a;空格&#xff09;子选择器&#xff1a;包括父…

CompletableFuture的多线程和异步监听实现

大家好,我是烤鸭&#xff1a;今天给大家说的是多线程并发的异步监听的情况。这里不得不说一下CompletableFuture这个类&#xff0c;普通我们执行多线程的时候只需要另外启动一条线程。 说一下线程的3种方式&#xff1a;extends Thread&#xff0c;implements Runnable&#xff…

DCF:A Dataflow-Based Collaborative Filtering Trainging Algorithm

Abstratct:描述了当前协同过滤算法两大技术alternating least square(ALS,最小二乘法)和gradient descent(GD)的确定&#xff1a;原文&#xff1a;Existing collaborative filtering techniques are implemented with either alternating least square algorithm or gradient d…

[css] 举例说明你对相邻兄弟选择器的理解

[css] 举例说明你对相邻兄弟选择器的理解 divp{ //相邻兄弟选择器 background: red; } 符合两个条件就会被选中&#xff1a; 1.紧邻在另一个元素后面 2.两者父元素相同个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢…