dockerfile源码安装mysql_docker容器详解五: dockerfile实现tomcat环境以及源码安装mysql...

tomcat

上一节讲到了dockerfile的基础,这一次咱们来作一个小的练习

首先要了解tomcat安装的整个过程

首先搭建 jdk环境:

下载jdk包,解压以后添加环境变量

而后搭建tomcat:

下载tomcat包,解压,修改配置文件到一个工做目录

而后给工做目录加入一些东西,访问。java

From centos

add ./jdk-8u191-linux-x64.tar.gz /usr/local

add ./apache-tomcat-8.5.35.tar.gz /usr/local

ENV JAVA_HOME /usr/local/jdk

ENV CLASSPATH $JAVA_HOME/lib/

ENV PATH $PATH:$JAVA_HOME/bin

RUN mkdir -p /var/www/www.fz.com

VOLUME /var/www/www.fz.com

RUN cd /usr/local/ && mv apache-tomcat-8.5.35 tomcat && mv jdk1.8.0_191 jdk

copy ./server.xml /usr/local/tomcat/conf/

copy ./mysql-connector-java-5.1.7-bin.jar /usr/local/tomcat/lib/

workdir /usr/local/tomcat

CMD bash bin/startup.sh && tail -f logs/catalina.out

这是整个dockerfile的文件。我来一次解释一下

From centos:

这个没什么好说的就是一个基础的centos的源镜像

add:

两个源码包 一个是jdk的一个是tomcat的包

ENV:这里会设置环境变量,就是三个jdk的环境变量

RUN:执行命令,建立一个tomcat的工做目录,

VOLUME:和上面一块儿,建立目录以后把他映射到宿主机,以即可以在外部把具体的页面代码放入。

RUN: 运行命令把tomcat放到制定目录并解压

copy:第一个是把tomcat的配置文件的副本拷贝进去,第二个是拷贝jdbc的包,以便之后链接数据库时用。

workdir:后面的命令都是在/usr/local/tomcat下运行

最后一个CMD很关键。

前面讲过,docker的镜像运行以后在执行完命令就会自动关闭,必需要给他一个可以挂在后台运行的命令,好比说你在run后面会加上 /bin/bash等等让他保持活跃的状态。否则它就会自动关闭。

这里若是只有打开tomcat而没有后面的加载日志,那么就会在打开以后容器立刻又关闭了。因此docker ps就看不见 须要用 ps -a看全部的容器,会发现容器是关闭的。 就须要用刷新日志的方式让tomcat在后台与进行。保持容器的开启状态。

前面的须要的文件放在和dockerfile一个目录下ok了。

而后编译运行

7e2867fba2bbee1df0c58ab95cc558a6.png

30b498a21baa1da405547d7a29298904.png而后运行

91bb30ef3c915cd9e8b068109d692880.png中间一部分省略

077355422d46d872e3e8c780a00b1d92.png就能够看见相似与平时的开启tomcat的日志

b9ed67bd89a69cd4add705d32a66aee2.png若是不想要在前台看日志,能够-d挂入后台。如上图所示mysql

mysql源码安装

mysql源码安装的大体过程

1.下载源码包,下载一些依赖包例如gcc等

2.编译安装

3.建立用户和组并赋予权限,而后数据库初始化

4.设置数据库root密码linux

from centos

ADD ./mysql-5.6.35.tar.gz /usr/local/

RUN yum install gcc gcc-c++ ncurses-devel perl cmake make autoconf -y

RUN cd /usr/local/mysql-5.6.35 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

&& make && make install

RUN groupadd mysql && useradd -r -g mysql mysql && \

chown -R mysql:mysql /usr/local/mysql

ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH

workdir /usr/local/mysql

RUN scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql \

--datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid

RUN support-files/mysql.server start && mysqladmin -u root password 'redhat'

COPY ./test.sql /root/

RUN support-files/mysql.server start && mysql -uroot -predhat < /root/test.sql

CMD mysqld --user=mysql

这是个人dockerfile文件

依次解释:

from:镜像源

add:把源码包copy进去并解压

run: 第一个是下载一些依赖包,第二个是编译安装。第三个是用户和权限。

env:环境变量

workdir :工做目录设在mysql目录下

run:数据库初始化,

第二个是开启服务并修改root密码

这里我踩了一个坑,修改密码是要在开启服务的状态下的,一开始我没有开服务,会出错。第二次我知道了要开服务,而后我是先在前面开服务,在后面在加一个run修改密码,也会出错,为何呢?

由于dockerfile每一行命令都是把镜像生成一个容器,而后在容器内执行命令,子啊构建成新的镜像,这样一来,上一个镜像是开启服务,像开启服务把他单独列在一行是没有效果的,由于生成容器开启服务再生成镜像还会同样的镜像,下一个执行修改root密码命令时候已是一个新的镜像了因此服务是没打开的。

copy:而后就是拷贝我本身写的一个mysql的脚本进入docker

run:这个是开启服务而且执行脚本,然数据库生成表插入数据

cmd:这个是前台开启数据库服务。

像前面一个编译并开启就ok了

这里数据库的编译是最基础的,没有不少参数,有需求本身加,而后这里的编译须要的时间可能会有点久。c++

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

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

相关文章

pom.xml的配置详解

<!--可以免费转载&#xff0c;转载时请注明出处 http://pengqb.iteye.com 。--><project xmlns"http://maven.apache.org/POM/4.0.0 " xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation"http://maven.apache.or…

azkaban 与 java任务_azkaban任务报错java.lang.RuntimeException: The root scratch dir: /tmp/hive...

azkaban运行任务的时候失败报错如下&#xff1a;23-03-2016 08:16:14 CST analyzer-kafka2hdfs_new ERROR - Exception in thread "main" org.apache.hive.service.cli.HiveSQLException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS shou…

php-fpm的重启/关闭

php 5.3.3 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令&#xff0c;需要使用信号控制&#xff1a; INT, TERM 立刻终止QUIT 平滑终止USR1 重新打开日志文件USR2 平滑重载所有worker进程并重新载入配置和二进制模块 kill -…

SQL server 2008数据库的备份与还原、分离(转)

一、SQL数据库的备份&#xff1a; 1、依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库&#xff1a;Dsideal_school_db既是我们需要备份的学籍数据库 图&#xff08;1&#xff09; 2、选择要备份的数据库“Dsideal_school_d…

Java做一个动画效果音量调节_设计与实现一个 ISoundable 接口,该接口具有发声功能、还能调节音量大小...

[java]代码库package experiment6;public interface ISoundable {public void increaseVolume();public void decreaseVolume();public void stopSound();public void playSound();}package experiment6;public class Radio implements ISoundable {public void increaseVolume…

人人都有极客精神

http://www.jisuanke.com/minicourse/59/438 人人公司是一家极为鼓励极客精神的公司&#xff0c;当有重要的项目需要上线但又时间太紧&#xff0c;甚至需要当天上线的时候&#xff0c;往往会挂起海盗旗开启电子日期显示&#xff0c;让大家可以在对时间有更明确的感知的情况下&a…

WPF入门教程系列十三——依赖属性(三)

四、 只读依赖属性 在以前在对于非WPF的功能来说&#xff0c;对于类的属性的封装中&#xff0c;经常会对那些希望暴露给外界只读操作的字段封装成只读属性&#xff0c;同样在WPF中也提供了只读属性的概念&#xff0c;如一些 WPF控件的依赖属性是只读的&#xff0c;它们经常用于…

java 反编译 类名_java javassist创建类和反编译类

public class Byte {public static void main(String[] args) throws Exception {//获得类池ClassPool poolClassPool.getDefault();//创建类CtClass ccpool.makeClass("cn.sxt.in.Emp");//创建属性CtField f1 CtField.make("private int empno;", cc);Ct…

java生成动态验证码_动态生成验证码案例

servlet代码package cn.guizimo.web.servlet;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.…

TCP、UDP、HTTP、SOCKET之间的区别

http://blog.csdn.net/magister_feng/article/details/8634518 转载于:https://www.cnblogs.com/luningning0901/p/4667733.html

特征选择算法java实现_relief算法特征选择

1.[文件]Relief算法程序.txt ~ 6KB下载(44)package com.relief.algorithm;import java.util.Random;import java.util.Set;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;public class Relie…

freemarker跳出循环

break语句跳出当前循环&#xff0c;如下: <#list table.columns as c> <#if c.isPK> <#assign pkNamec.columnName?cap_first /> <#break> </#if> </#list>转载于…

多线程程序排错总结

先不考虑其他因素&#xff0c;直接干掉密集IO操作&#xff0c;把并行IO变成串行IO 要沉下心来&#xff0c;先浏览一遍代码&#xff0c;看看是否有有问题的地方&#xff0c;首先找加锁的地方 没有办法的办法是&#xff0c;用二分法&#xff0c;一行一行的来定位转载于:https://w…

java如何将数据保存为xml6_用Java实现可保存状态的数据库生成XML树,源码来了(9)...

用Java实现可保存状态的数据库生成XML树&#xff0c;源码来了(9)时间&#xff1a;2006/7/19 5:38:30作者&#xff1a;佚名人气&#xff1a;306.3.2.Servlet源码1.RefreshServlet.javapackage com.sitechasia;import javax.servlet.*;import javax.servlet.http.*;import java.i…

企业服务总线全双工异步通信机

为了实现系统的高可靠性、高可用性和并行处理能力&#xff0c;我们经常使用一些负载均衡设备&#xff08;例如F5&#xff09;等集群解决方案。但&#xff0c;会有一些特殊的情况下&#xff0c;。例如&#xff0c;长连接、特殊的技术协议。不可用F5和其他设备来解决&#xff0c;…

java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】

Druid连接数据库&#xff0c;DBUtils工具类的使用1.在maven中添加Druid依赖com.alibabadruid1.2.02.封装Druid连接方法import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import java.io.IOException;import java.io.Input…

TimerTask定时任务

web.xml <listener><listener-class>com.sign.listener.NFDFlightDataTaskListener</listener-class></listener> 监听器类 package com.sign.listener;import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;impor…

java前后端接口文档_前后端交互接口设计规范

在开发web应用的时候&#xff0c;往往会涉及到一个问题&#xff0c;前端后接口定义的问题。接口定义设计的好坏很大程度上能影响一个项目的进度和可扩展性。但是前辈们在这个问题上留下了非常宝贵的一些常规的设计思路&#xff0c;值得我们参考。1、后端设计统一的返回模型在与…

2015 多校第三场

1002 求max&#xff08;f(a),f(b)&#xff09;, f为不重复的素因子个数&#xff0c; 在数据要求以内 &#xff0c; 每个数最多有7个&#xff0c;可以打表。 1 /*Author :usedrose */2 /*Created Time :2015/7/29 11:32:09*/3 /*File Name :2.cpp*/4 #include <cstdio>5 …

java多线程必须掌握吗_多线程模式有什么作用(java多线程必须掌握的知识)

什么叫多进程&#xff1f;在预估中&#xff0c;过程是已经实行的计算机语言的一个案例。或是简易地说&#xff0c;运作程序流程也称之为过程。多进程代表着“在单独计算机软件中具备2个或更好几个CPU。比如&#xff0c;假如计算机软件具备双核四线程&#xff0c;而且另外运作(实…