Docker 搭建 Tomcat + Mysql

准备

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

在纯净的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/profile
export JAVA_HOME=/usr/local/java/jdk/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 运行 source /etc/profile,使环境变量生效
  • 检测是否成功
java --version
#结果
java 11.0.2 2019-01-15 LTS
Java(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

  • 准备好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

  • 获取 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_ci
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
initialize specified but the data directory has files in it # 从5.6开始timestamp 的默认行为已经是 deprecated 了,需要关闭警告
[client]
default-character-set=utf8
  • 获取mysql 初始密码
grep "password" /var/log/mysqld.log
#结果:[Note] A temporary password is generated for root@localhost: k:nT<dT,t4sF
#使用这个密码登录mysql
  • 进入到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
# 推到dockerhub
docker 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 centos
MAINTAINER tomcat mysql
ADD jdk-11.0.2 /usr/local/java
ENV JAVA_HOME /usr/local/java/
ADD apache-tomcat-8.5.38 /usr/local/tomcat8
EXPOSE 8080

使用docker build输出结果

[root@localhost dockerfile]# docker build -t tomcats:centos .
Sending build context to Docker daemon 505.8 MB
Step 1/7 : FROM centos
---> 1e1148e4cc2c
Step 2/7 : MAINTAINER tomcat mysql
---> Using cache
---> 889454b28f55
Step 3/7 : ADD jdk-11.0.2 /usr/local/java
---> Using cache
---> 8cad86ae7723
Step 4/7 : ENV JAVA_HOME /usr/local/java/
---> Running in 15d89d66adb4
---> 767983acfaca
Removing intermediate container 15d89d66adb4
Step 5/7 : ADD apache-tomcat-8.5.38 /usr/local/tomcat8
---> 4219d7d611ec
Removing intermediate container 3c2438ecf955
Step 6/7 : EXPOSE 8080
---> Running in 56c4e0c3b326
---> 7c5bd484168a
Removing intermediate container 56c4e0c3b326
Step 7/7 : RUN /usr/local/tomcat8/bin/startup.sh
---> Running in 7a73d0317db3 Tomcat started.
---> b53a6d54bf64
Removing intermediate container 7a73d0317db3
Successfully 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/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java/
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat 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 load
    tomcat | 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 start
    tomcat | 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 -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a8a0165a3a8 tomcat "catalina.sh run" 7 seconds ago Up 6 seconds 0.0.0.0:8009->8009/tcp, 0.0.0.0:8080->8080/tcp tomcat
ddf081e87d67 mysql:5.7 "docker-entrypoint..." 7 seconds ago Up 7 seconds 33060/tcp, 0.0.0.0:6033->3306/tcp mysql

Docker 搭建 Tomcat + Mysql的更多相关文章

  1. 使用Docker搭建Tomcat运行环境

    1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: # uname -r 2 安装Do ...

  2. Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案

    原文:Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案 版权声明:本文为博主原创文章,未经博主允许不得 ...

  3. 在Linux环境下搭建Tomcat+mysql+jdk环境

    按照下面的步骤一步一步来搭建tomcat+jdk+mysql环境.   [Linux环境]------我搭建的是64位centos版本的linux系统 1.下载并安装一个VMware workstat ...

  4. docker搭建tomcat环境

    1.拉取镜像 docker pull tomcat 2.运行容器 docker run --name tomcat -p : -v /data/tomcat/test:/usr/local/tomca ...

  5. Linux环境下搭建Tomcat+mysql+jdk

    Linux环境 1.下载并安装一个VMware workstation, 这个是虚拟机的平台(自行度娘下载~),虚拟机是在后面要在里面搭建Linux系统. 2.下载一个centos安装包,linux版 ...

  6. 使用 Docker 搭建 Tomcat 运行环境

    转自: http://m.oschina.net/blog/616526, 版权归原作者所有. 1 Docker与虚拟机     2 搭建过程 2.1 准备宿主系统 准备一个 CentOS 7操作系统 ...

  7. Docker搭建tomcat运行环境(Dockerfile方式)

    上一篇文章的基本做法是通过centOS的官方镜像启动一个容器,然后进入到容器中,手动敲命令安装JDK跟tomcat,这个跟在linux下搭建没有什么区别,只是用来熟悉docker命令,并且在日常开发中 ...

  8. docker搭建简单mysql主从

    关于MySQL主从模式,如果我们直接在本机上搭建的话,是没法搭建的,只能借助于虚拟机,但有的时候我们又需要搭建一个主从集群,以便于进行一些功能性的测试.这个时候我们就可以尝试使用docker,借助于d ...

  9. Docker搭建tomcat运行环境(修改镜像方式)

    对于java程序员来说,要想使用Docker来部署你的应用,那么在镜像中安装类似于tomcat的容器基本上是必须的(sprintboot项目除外),本篇介绍自己基于对centos镜像的修改,创建自己的 ...

随机推荐

  1. asynicio模块以及爬虫应用asynicio模块(高性能爬虫)

    一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...

  2. Python基础之面向对象进阶二

    一.__getattribute__ 我们一看见getattribute,就想起来前面学的getattr,好了,我们先回顾一下getattr的用法吧! class foo: def __init__( ...

  3. CF1029E

    一个看起来就不对的贪心居然是正解... 但仔细思考一下,这种贪心倒的确找不到反例.. 贪心思想:每次找出离根节点最远的点,然后由根节点向这个点的父节点连边,一直连到所有点都能被覆盖即可,这样构造出的一 ...

  4. 20165314 2016-2017-2 《Java程序设计》第7周学习总结

    20165314 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 MySQL数据库管理系统 连接MySQL数据库 JDBC 批处理 代码托管

  5. jenkins+git+maven 增量部署思路以及相关脚本

    之前通过jenkins+Git+maven这种方式打war包然后scp到测试环境使用,但是现在项目组要求打增量包,即只部署修改的文件和配置文件. 核心问题:如何获取到变动的文件??? 前置条件:初始化 ...

  6. C++ Primer 笔记——关联容器

    1.关联容器支持高效的关键字查找和访问,标准库提供8个关联容器. 2.如果一个类型定义了“行为正常”的 < 运算符,则它可以用作关键字类型. 3.为了使用自己定义的类型,在定义multiset时 ...

  7. IDEA新建模块

  8. 在 Windows服务器中启用/禁用SMBv1、SMBv2和SMBv3的方法

    本文介绍如何在 SMB 客户端和服务器组件上启用/禁用服务器消息块 SMBv1.SMBv2 和 SMBv3. 注意:建议由专业技术工程师完成以下操作. 禁用 SMBv2 和 SMBv3 的影响 我们建 ...

  9. nodejs 2017

    1.  nodejs函数 path()  nodejs全局变量 __dirname a.js // 运行 node a.js var path = require('path'); console.l ...

  10. 5336: [TJOI2018]party

    题解: 比较水啦..dp套dp f[i][j][k]表示枚举了前i位,最大公共子序列匹配状态为j,noi匹配到了第k位 因为g[j]和g[j+1]最多差1 所以可以状压成j 然后内层再dp一下搞出下一 ...