首页 > 编程语言 >Docker部署Java应用[转]

Docker部署Java应用[转]

时间:2023-07-16 18:12:13浏览次数:35  
标签:Java tomcat tmall 部署 usr mysql Docker local docker

练习要求: 在CentOS Linux release 7.7.1908 (Core)中,先拉一个Centos镜像,然后在光秃秃的centos镜像基础上把项目环境搭建好,然后再提交到自己的docker仓库里。   操作环境: 虚拟机中安装好的CentOS Linux release 7.7.1908 (Core)   一、安装并启动Docker  1.更新 yum

 yum -y update

 

2. 安装 Docker:
yum install docker -y

 

3.启动: 
systemctl start docker.service

 

4.拉去Centos镜像
docker pull centos:7.6.1810

 

5.启动容器:
docker run --privileged -it -d --name tmall-test f1cb7c7d58b7 /usr/sbin/init

 

6.进入容器:
docker exec -it 容器ID  /bin/bash
    二、安装java (在已启动的容器中操作)
yum -y install java-1.8.0-openjdk.x86_64
  检查java安装是否成功:
java -version
  三、安装mysql (在已启动的容器中操作) 1.下载 yum上mysql的资源有问题,所以不能仅仅之用yum。在使用yum之前还需要用其他命令获取mysql社区版
cd /tmp
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
  2.安装
yum install mysql mysql-server mysql-devel -y
  3.启动mysql
systemctl start mysql.service
netstat -anp|grep 3306
以上说明安装并启动成功   4.设置密码 通过Yum安装的mysql的管理员账户是没有密码的,这里通过命令设置其密码为 admin ,尽量使用这个密码哦,后续部署j2ee应用的时候会用到这个密码哦。
mysqladmin -u root password admin
  5.登录
mysql -uroot -p
输入密码admin 登录成功后输入:
show databases;
看到这3个数据库,就表示用root账号登陆成功了     四、安装tomcat (在已启动的容器中操作) 1.安装 yum上没有tomcat的源,所以使用如下方式下载解压
cd /tmp
wget wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz
tar -zxvf apache-tomcat-8.5.50.tar.gz
mv apache-tomcat-8.5.50 /usr/local/tomcat8
  2.启动Tomcat
/usr/local/tomcat8/bin/startup.sh
查看端口: 
netstat -anp|grep 8080
查看启动日志,ctrl+c可退出
tail -10f /usr/local/tomcat8/logs/catalina.out
  五、部署一个web应用 (在已启动的容器中部署) 1.上传web应用 首先在宿主机新建目录data:
mkdir data
然后利用xftp将本地文件上传至宿主机,如下图: 左边是本地,右边是宿主机,将需要上传的文件拖拽至右边即可上传   最后将文件从宿主机中拷贝至docker: 语法:docker cp 本地文件路径 容器ID:容器路径
docker cp /root/data/tmall 86422442c39d:/home/wwwroot/ftptest
docker cp /root/data/tmall.sql 86422442c39d:/home/wwwroot/ftptest
注意:以上拷贝需要在容器外操作   2.数据库准备 1)大小写敏感 Linux MySQL默认是大小写敏感的,但是模仿天猫在设计的时候是在windows上开发的,而windows上的Mysql默认是非大小写敏感的,所以JDBC代码有的表名是大写,有的是小写的,一旦运行起来就会因为大小写不一致导致无法识别表名。 为了解决这个矛盾,就需要把MySQL的大小写敏感修改为非敏感 修改 mysql配置文件: 
vi /etc/my.cnf
修改:
lower_case_table_names=1
修改保存后重启mysql:
systemctl restart mysqld.service
  2)创建数据库
mysql -uroot -padmin
CREATE DATABASE tmall DEFAULT CHARACTER SET utf8;
show databases;
quit;
  3)导入数据 执行命令: 
mysql -u root -padmin --default-character-set=utf8 tmall < /home/wwwroot/ftptest/tmall.sql
注意:执行该命令需要退出mysql控制台   重新登录mysql,验证导入是否成功:
mysql -uroot -padmin
use tmall;
show tables;
select count(*) from product;
  3.tomcat配置  1)修改server.xml
vi /usr/local/tomcat8/conf/server.xml
然后在<host下面增加一行:
<Context path="/tmall" docBase="/home/wwwroot/ftptest/tmall/web" debug="0" reloadable="false" />
注: /home/wwwroot/ftptest/tmall/web 就是 上传web应用 后的位置 2)重启tomcat
/usr/local/tomcat8/bin/shutdown.sh
/usr/local/tomcat8/bin/startup.sh
查看日志:
tail -300f /usr/local/tomcat8/logs/catalina.out
    六、设置自启动 所谓的自启动,就是在 Linux 重启之后,会自动启动一些服务和程序。这里也就是容器启动之后自动启动服务和程序。 在重启之后,mysql 不会自动启动,tomcat也不会自动启动,这样在重启之后,服务就不可以使用了。 需要自启动的服务有 mysql 需要自启动的脚本有 tomcat 1.mysql自启动
systemctl enable mysqld.service
  2.tomcat自启动 有个文件叫做 rc.local, 把脚本放进去就可以了。 不过这个脚本在 centos7里被降级了,不能被执行,所以要执行如下语句使得其可以被执行先
chmod +x /etc/rc.d/rc.local
然后修改 /etc/rc.d/rc.local, 放入 tomcat脚本即可
vi /etc/rc.d/rc.local
添加tomcat脚本:
/usr/local/tomcat8/bin/startup.sh
  七、生成新镜像 将上述步骤操作之后的容器commit成一个新镜像, 语法:docker commit 容器ID 镜像名称
docker commit 266c8dc4b799 tmall-test:v1
  并以新镜像运行容器:
docker run -dit --privileged -p80:80 -p8080:8080 --name tmall-test-final 1a2f17365656 /usr/sbin/init
  访问项目地址: http://192.168.197.226:8080/tmall/  (这是我本地虚拟机地址),功能正常,说明镜像正常。

标签:Java,tomcat,tmall,部署,usr,mysql,Docker,local,docker
From: https://www.cnblogs.com/franson-2016/p/17558289.html

相关文章

  • Java-多线程-八股文
    线程安全的理解?线程安全说的是,当多个线程并发访问互斥资源时,读写互斥资源的代码逻辑能正常处理,获得正确结果,不会互相干扰的情况。守护线程的理解?守护线程是与普通线程相区分的概念,用户一般使用的就是普通线程,普通线程有自身独立的生命周期,而守护线程的生命周期取决于普通......
  • Java-Day-32( 多用户即时通信系统 —— 文件传输 + 服务器推送新闻 + 离线留言 )
    Java-Day-32多用户即时通信系统文件传输思路:客户端里先把文件读取到客户端为字节数组,把文件对应的字节数组封装到message对象,内含文件内容、sender、getter,将message对象发送给服务端拆解message对象获取getterid,获取客户端被指定的接收用户的通信线程,把message转......
  • Java-JVM-八股文
    线程共享区堆区与方法区是所有线程共享的栈区:主要存放基本数据类型与对象引用(仅限局部变量,成员变量不管是不是基本数据类型都存放于堆)堆区:主要存放对象实例与数组[我的理解就是,由代码操作生成的对象或者说引用类型存放于堆]方法区:类信息(class文件)、静态变量与静态方......
  • 自定义java@注解
    自定义注解主要用于抽象出重复代码,以减少枯燥无味的重复工作量举例:创建Redis分布式锁注解步骤:新建interface接口@Target(ElementType.METHOD)//描述注解使用范围@Retention(RetentionPolicy.RUNTIME)//设置注解时间范围//SOURCE源文件保留//CLASS,......
  • Java-集合-八股文
    list、setlist:有序,可重复,允许多个null,支持下标随机访问set:无序,不可重复,单一null,必须遍历访问arraylist、linkedlistarraylist:基于数组实现,占用连续空间,有利于查找、修改,不利于插入、删除[适用场景不同]linkedlist:基于链表实现,不要求占用空间连续,有利于插入、删除,不利于......
  • Java处理子父级菜单的方式二
    处理存在子父级关系的数据是写代码的过程中常见的操作,前面讲解过使用递归的方法来做,可以参考这篇博客https://www.cnblogs.com/yilangcode/p/16831867.html今天来聊聊一种新的处理方式。使用List集合多轮遍历,添加子父级菜单信息。建表SQLDROPTABLEIFEXISTS`sa_menu`......
  • java序列化和反序列化
    感觉网上很多博客对这个的解释实在太官方了,也没说为什么一定要实现序列化接口。去看看rpc框架源码,或者java网络编程或者向磁盘进行序列化就知道了。首先这是个标记接口,就是用来告诉程序某某对象是可序列化对象,像dubbo框架,要传输对象就必须序列化。网络编程已经告诉你了,想要向另......
  • 拷贝文件到docker里面
    拷贝文件到Docker容器中在使用Docker时,我们常常需要将本地文件拷贝到正在运行的Docker容器中。这个过程可能涉及到从宿主机到容器的文件传输,以及在目标容器中进行文件操作。本文将为您介绍如何使用不同方法将文件拷贝到Docker容器中,并提供相关代码示例。1.使用dockercp命令Doc......
  • shell脚本-lnmp一键部署
    shell脚本-lnmp一键部署创建文件lnmp.shvimlnmp.sh#!/bin/bash#描述:LNMP网站架构部署脚本cat<<EOF欢迎使用LNMP架构服务搭建请将安装包放入/opt目录下1.安装nginx服务2.安装mysql3.安装php4.一键安装LNMP架构EOFread-p"请输入你的选择:"choicefunctionNginx(......
  • Java性能优化-测试try-catch放在循环内和外的性能对比与业务区别
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751使用如上方式测试Java中try-catch放在循环内和循环外是否有性能上的差别。注:博客:https://blog.csdn.net/badao_lium......