利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像。

Dockerfile内容如下:

FROM centos
MAINTAINER Victor root@linuxidc.com
WORKDIR /root
RUN rm -f /etc/yum.repos.d/*
RUN  echo '[BASE]' > /etc/yum.repos.d/base.repo
RUN  echo 'name=base' >> /etc/yum.repos.d/base.repo
RUN  echo 'baseurl=http://192.168.244.132/yum/mnt' >> /etc/yum.repos.d/base.repo
RUN  echo 'enabled=1' >> /etc/yum.repos.d/base.repo
RUN  echo 'gpgcheck=0' >> /etc/yum.repos.d/base.repo
ADD /mysql /mysql
RUN yum  -y install java-1.8.0-openjdk wget httpd php php-mysqlnd /mysql/*
RUN mysql_install_db --user=mysql
ENV MYSQL_ROOT_PASSWORD=123456
ENV MYCAT_USER mycat
ENV MYCAT_PASS mycat
RUN wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.64/bin/apache-tomcat-7.0.64.tar.gz
RUN tar xvf apache-tomcat-7.0.64.tar.gz -C /usr/local/ && mv /usr/local/apache-tomcat-7.0.64/ /usr/local/tomcat
RUN wget http://code.taobao.org/svn/openclouddb/downloads/old/MyCat-Sever-1.2/Mycat-server-1.2-GA-linux.tar.gz
RUN mkdir /usr/local/mycat && tar xvf Mycat-server-1.2-GA-linux.tar.gz -C /usr/local/mycat && useradd mycat && \
    chown -R mycat.mycat /usr/local/mycat && chmod a+x /usr/local/mycat/bin/*
EXPOSE 8080 8066 9066
COPY startup.sh /root/startup.sh
RUN chmod a+x /root/startup.sh
ENTRYPOINT /root/startup.sh

说明如下

1. 以下用于构建yum源,由于公司网络有所限制,安装依赖包的过程让人泪奔…故果断利用宿主机的中的系统光盘搭建http yum源。

RUN rm -f /etc/yum.repos.d/*
RUN  echo '[BASE]' > /etc/yum.repos.d/base.repo
RUN  echo 'name=base' >> /etc/yum.repos.d/base.repo
RUN  echo 'baseurl=http://192.168.244.132/yum/mnt' >> /etc/yum.repos.d/base.repo
RUN  echo 'enabled=1' >> /etc/yum.repos.d/base.repo
RUN  echo 'gpgcheck=0' >> /etc/yum.repos.d/base.repo

2. 因为centos 7 的系统光盘中没有自带mysql-server,故需要自己下载,正好,mysql社区也提供了基于mysql-serve的yum源,只需在/etc/yum.repos.d/目录下添加以下文件mysql-community.repo文件,内容如下:

[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/5/$basearch/
enabled=1
gpgcheck=0

即便是这种方式,下载过程同样让人极度崩溃,无奈,只好自己下载了相关的rpm包,放到本地mysql目录下,通过ADD命令将该目录下的文件COPY到镜像中。注意:/mysql是相对于Dockerfile的相对路径,因为我的Dockerfile的绝对路径为/root/Dockerfile,所以,下面中/mysql中绝对路径实际上也是/root/mysql/。

ADD /mysql /mysql

/root/mysql中的文件如下:

[root@localhost ~]# ls /root/mysql/
mysql-5.6.26-2.el5.x86_64.rpm                  mysql-community-libs-5.6.26-2.el5.x86_64.rpm
mysql-community-client-5.6.26-2.el5.x86_64.rpm  mysql-community-libs-compat-5.6.26-2.el5.x86_64.rpm
mysql-community-common-5.6.26-2.el5.x86_64.rpm  mysql-community-server-5.6.26-2.el5.x86_64.rpm

3. 最后一步实际上用脚本进行启动

脚本内容如下:

[root@localhost ~]# cat /root/startup.sh 
#!/bin/bash
sed -i 's/user name="test"/user name=\"'"$MYCAT_USER"'"/' /usr/local/mycat/conf/server.xml
sed -i 's/name="password">test/name="password">'"$MYCAT_PASS"'/' /usr/local/mycat/conf/server.xml
mysqld_safe & /usr/local/mycat/bin/mycat start & httpd & /usr/local/tomcat/bin/catalina.sh run

在该启动脚本中,利用参数的方式设定mycat的用户名和密码,用户名和密码有Dockerfile中的以下变量指定:

ENV MYCAT_USER mycat
ENV MYCAT_PASS mycat

注意:在创建基于该镜像的容器时,也可通过-e参数显性指定以上两个参数的值,如果没有指定,则用户名和密码的默认值均为Dockerfile中指定的mycat。

验证如下:

1. 基于Docker生成镜像

# docker build -t victor/mycat:v1 .

建议:在利用Dockerfile构建镜像时,可带上--rm=false参数,即 docker build -rm=false -t victor/mycat:v1 .意思是不删除build镜像过程中产生的中间容器,这样的话,即便这次构建失败了,再次构建的时候会直接利用cache容器,会方便快捷很多。

2. 查看生成的镜像

[root@localhost ~]# docker images
REPOSITORY          TAG                IMAGE ID            CREATED            VIRTUAL SIZE
victor/mycat        v1                  5091cdf7b73a        2 hours ago        1.058 GB

3. 运行容器

# docker run -p 8080:8080 -p 9066:9066 -p 8066:8066 -p 81:80 victor/mycat:v1

首先验证tomcat是否启动

再次验证apache是否正常启动,为了避免和本地的http yum源冲突,我这边用的是宿主机的81端口映射容器的80端口

验证mycat是否能正常使用

不难看出,基于mycat的默认用户名和密码登陆被拒,必须用指定的用户名和密码。

利用Dockerfile构建一个基于CentOS 7镜像的更多相关文章

  1. 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像

    Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...

  2. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

  3. 利用 vue-cli 构建一个 Vue 项目

    一.项目初始构建 现在如果要构建一个 Vue 的项目,最方便的方式,莫过于使用官方的 vue-cli . 首先,咱们先来全局安装 vue-cli ,打开命令行工具,输入以下命令: $ npm inst ...

  4. 利用ELK构建一个小型的日志收集平台

    利用ELK构建一个小型日志收集平台 伴随着应用以及集群的扩展,查看日志的方式总是不方便,我们希望可以有一个便于我们查询及提醒功能的平台:那么首先需要剖析有几步呢? 格式定义 --> 日志收集 - ...

  5. 使用 XMPP 构建一个基于 web 的通知工具——转

    Inserting of file(使用 XMPP 构建一个基于 web 的通知工具.docx) failed. Please try again. http://www.ibm.com/develo ...

  6. Docker在Centos下使用Dockerfile构建远程Tomcat和Jenkins镜像

    镜像构建准备环境原料 构建CentOS Docker tomcat镜像 Dockerfile文件内容: FROM centos:latest MAINTAINER boonya <boonya@ ...

  7. Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 因为一直做Linux有关的开发工作,所以不习惯在Windows平台编译和测试 ...

  8. Docker - 构建一个简单的应用镜像

    概述 做个简单的可用镜像 背景 之前的镜像, 都是 命令教程 类的 这次我想构建一个 可以用的 简单镜像镜像 1. 环境 os centos7 docker 18.09 docker image ja ...

  9. 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端

    前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...

随机推荐

  1. atitit.javascript调用java in swt attilax 总结

    atitit.javascript调用java in swt attilax 总结 1. BrowserFunction 简单介绍1 1.1. BrowserFunction 能够分为三类: 1 1. ...

  2. 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射

    内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileC ...

  3. jQuery异步请求模拟IE登录网站

    具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: <%@ Page Language="C#" Aut ...

  4. ASP.NET自带对象JSON字符串与实体类的转换

    关于JSON的更多介绍,请各位自行google了解!如果要我写的话,我也是去Google后copy!嘿嘿,一直以来很想学习json,大量的找资料和写demo,总算有点了解! 切入正题! 还是先封装一个 ...

  5. 使用鼠标监听器,使鼠标悬停在JTable某行时背景色改变

    一.需要知道的事实: 1.当鼠标悬停在JTable上时,相应的格子(cell)的渲染器(TableCellRenderer)的渲染方法(getTableCellRenererComponent)会被调 ...

  6. 【观点】“马云:金融是要为外行人服务",这个观点其实并不新鲜

    不久前,马云在外滩国际金融峰会演讲,称金融行业需要“搅局者”.他说:“今天的金融,确实做得不错,没有今天这样的金融机构,中国的经济30年来不可能发展到今天,但是靠今天银行的机制,我不相信能支撑30年以 ...

  7. mysqldump工具,通过--where选项,导出指定表中指定数据?

    需求描述: 今天在使用mysqldump工具导出表的时候,考虑能不能导出满足条件的数据行,不要 将表都导出来,查找资料,通过--where选项,就可以实现目的,做个实验,在此记录下. 操作过程: 1. ...

  8. 给IT同学推荐这15个不错的学习网站,收藏起来慢慢看吧

    1.学堂在线:http://www.xuetangx.com 目前,学堂在线运行了包括包括清华大学.北京大学.复旦大学.斯坦福大学.麻省理工学院.加州大学伯克利分校等国内外几十所顶尖高校的优质课程.在 ...

  9. AFNetworking 上传文件

    本文转载至 http://blog.csdn.net/hmt20130412/article/details/36487055 文件上传AFNetworking @第一种:我的 #pragma mar ...

  10. win8.1rtm专业版无法安装net3.5还有iis

    win8.1rtm专业版无法安装net3.5还有iis错误代码:0x800F0906 已解决:dism.exe /online /enable-feature /featurename:NetFX3 ...