热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建tomcat_Docker搭建Tomcat+Mysql

准备虚拟机虚拟机安装Docker在纯净的Centos镜像上搭建Centos镜像准备虚拟机上拉取Centos镜像:dockerpullcentos创建一个容器运行Cen

准备

  1. 虚拟机
  2. 虚拟机安装Docker
a241d2d11d87c784bbb2125344b1ea81.png

在纯净的Centos镜像上搭建

Centos镜像准备

  • 虚拟机上拉取 Centos 镜像: docker pull centos
  • 创建一个容器运行Centos镜像:docker run -it -d --name mycentos centos /bin/bash

注:这里遇到了一个错误【WARNING: IPv4 forwarding is disabled. Networking will not work.

更改虚拟机文件:vim /usr/lib/sysctl.d/00-system.conf添加如下内容net.ipv4.ip_forward=1重启网络:systemctl restart network

注:这里又衍生一个问题,docker中systemctl无法正常使用。在官网找到如下解决办法

链接:https://forums.docker.com/t/systemctl-status-is-not-working-in-my-docker-container/9075/4

run 镜像的时候用如下语句docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup -it -d --name usr_sbin_init_centos centos /usr/sbin/init#注意几点 #1. 必须有--privileged#2. 必须有-v /sys/fs/cgroup:/sys/fs/cgroup#3. 将bin/bash替换成 /usr/sbin/init

最后终于能够正常运行起来一个Centos镜像了。

安装JAVA 环境准备JDK tar包上传到 虚拟机中

  • 使用docker cp 将tar包放入docker容器中

docker cp jdk-11.0.2_linux-x64_bin.tar.gz 41dbc0fbdf3c:/#与linux cp指定用法相同,需要加上container的标识:id或者name

  • 解压tar包

tar -xf jdk-11.0.2_linux-x64_bin.tar.gz -C /usr/local/java/jdk

  • 编辑profile文件 export java环境变量

# /etc/profileexport JAVA_HOME=/usr/local/java/jdk/jdk1.8.0_91export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

  • 运行 source /etc/profile,使环境变量生效
  • 检测是否成功

java --version #结果java 11.0.2 2019-01-15 LTSJava(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)

安装Tomcat

a8b68bac691ca6f7a772883da6df4b2c.png
  • 准备好tomcat tar 包上传到虚拟机,并cp到docker容器中
  • 解压到

tar -xf apache-tomcat-8.5.38.tar.gz -C /usr/local/tomcat

  • 设置开机启动,通过使用rc.local文件实现

#rc.local 增加如下代码export JAVA_HOME=/usr/local/java/jdk/jdk-11.0.2/usr/local/tomcat/apache-tomcat-8.5.38/bin/startup.sh

  • 开启tomcat

#到/usr/local/tomcat/apache-tomcat-8.5.38/bin/目录下 运行./startup.sh

  • 检测

curl localhost:8080#返回html源码内容

安装mysql

3b6850a6271db7340b509cbbdbf6c561.png
  • 获取 mysql 的yum源

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

  • 安装上面的yum 源

yum -y install mysql57-community-release-el7-10.noarch.rpm

  • yum 安装 mysql

yum -y install mysql-community-server

  • 更改mysql 配置:/etc/my/cnf

validate_password=OFF # 关闭密码验证character-set-server=utf8 collation-server=utf8_general_cilog-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid[client]default-character-set=utf8

  • 获取mysql 初始密码

grep "password" /var/log/mysqld.log#结果:[Note] A temporary password is generated for root@localhost: k:nT

  • 进入到mysql,进行操作

# 进入mysql -u root -p #更改密码ALTER USER 'root'@'localhost' IDENTIFIED BY '111111';# 更改 使mysql可以远端访问update user set host = '%' where user = 'root';

  • 测试,可以使用物理机,使用navicat 对docker中的mysql进行访问

打包容器

  • 放到docker hub上

# 将容器提交成 镜像docker commit -a 'kane' -m 'test' container_id images_name:images_tag# 推到dockerhubdocker push kane0725/tomcat

  • 到处本地tar包

# 导出打成本地 tar 包docker export -o test.tar a404c6c174a2# 将 tar 包导入成镜像docker import test.tar test_images

使用Dockerfile

注:只搭建一个tomcat的镜像

准备工作

  1. 创建一个专门的文件夹,放入jdk 与tomcat的 tar包
  2. 在这个目录下创建Dockerfile文件
  3. centos 基础镜像

文件内容

FROM centosMAINTAINER tomcat mysqlADD jdk-11.0.2 /usr/local/javaENV JAVA_HOME /usr/local/java/ADD apache-tomcat-8.5.38 /usr/local/tomcat8EXPOSE 8080

使用docker build输出结果

[root@localhost dockerfile]# docker build -t tomcats:centos .Sending build context to Docker daemon 505.8 MBStep 1/7 : FROM centos ---> 1e1148e4cc2cStep 2/7 : MAINTAINER tomcat mysql ---> Using cache ---> 889454b28f55Step 3/7 : ADD jdk-11.0.2 /usr/local/java ---> Using cache ---> 8cad86ae7723Step 4/7 : ENV JAVA_HOME /usr/local/java/ ---> Running in 15d89d66adb4 ---> 767983acfacaRemoving intermediate container 15d89d66adb4Step 5/7 : ADD apache-tomcat-8.5.38 /usr/local/tomcat8 ---> 4219d7d611ecRemoving intermediate container 3c2438ecf955Step 6/7 : EXPOSE 8080 ---> Running in 56c4e0c3b326 ---> 7c5bd484168aRemoving intermediate container 56c4e0c3b326Step 7/7 : RUN /usr/local/tomcat8/bin/startup.sh ---> Running in 7a73d0317db3Tomcat started. ---> b53a6d54bf64Removing intermediate container 7a73d0317db3Successfully built b53a6d54bf64

docker build的问题

一定要带上命令后面的 . 否则会报错的"docker build" requires exactly 1 argument(s).

运行一个容器

# 进入容器docker run -it --name tomcats --restart always -p 1234:8080 tomcats /bin/bash#运行tomcat startup.sh/usr/local/tomcat8/bin/startup.sh#结果Using CATALINA_BASE: /usr/local/tomcat8Using CATALINA_HOME: /usr/local/tomcat8Using CATALINA_TMPDIR: /usr/local/tomcat8/tempUsing JRE_HOME: /usr/local/java/Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jarTomcat started.

使用docker compose

安装 docker compose

官方:https://docs.docker.com/compose/install/

我选择的方式是pip安装

# 安装pip install docker-compose# 检测docker-compose --version# -----------------------docker-compose version 1.23.2, build 1110ad0

编写docker-compose.yml

# 这个yml文件 搭建一个mysql 一个 tomcat的容器version: "3" services: mysql: container_name: mysql image: mysql:5.7 restart: always volumes: - ./mysql/data/:/var/lib/mysql/ - ./mysql/conf/:/etc/mysql/mysql.conf.d/ ports: - "6033:3306" environment: - MYSQL_ROOT_PASSWORD=******** tomcat: container_name: tomcat restart: always image: tomcat ports: - 8080:8080 - 8009:8009 links: - mysql:m1 #连接数据库镜像

注:

  • volumn里必须是路径,不能指定文件
  • tomcat指定外部conf的时候一直创建不成功,不知道为什么,提示

tomcat | Feb 20, 2019 2:23:29 AM org.apache.catalina.startup.Catalina loadtomcat | WARNING: Unable to load server configuration from [/usr/local/tomcat/conf/server.xml]tomcat | Feb 20, 2019 2:23:29 AM org.apache.catalina.startup.Catalina starttomcat | SEVERE: Cannot start server. Server instance is not configured.tomcat exited with code 1

  • 运行命令

注:必须在yml文件的目录下下执行

docker-compose up -d# 结果----------查看docker container-------[root@localhost docker-compose]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1a8a0165a3a8 tomcat "catalina.sh run" 7 seconds ago Up 6 seconds 0.0.0.0:8009->8009/tcp, 0.0.0.0:8080->8080/tcp tomcatddf081e87d67 mysql:5.7 "docker-entrypoint..." 7 seconds ago Up 7 seconds 33060/tcp, 0.0.0.0:6033->3306/tcp mysql



推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
author-avatar
李小欠儿724_579
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有