专栏首页小手冰凉Docker 构建容器Tomcat+Nginx+MySQL

Docker 构建容器Tomcat+Nginx+MySQL

一、构建Tomcat Tomcat是一个免费开源的轻量级web服务器,在中小型企业和并发量不高的场合普遍使用,是开发和调试JSP程序的首选。下面使用Dockerfile文件的方式来创建带有Tomcat服务的docker镜像。 下载JDK源码包 (提取码:0e3q)并放置Linux宿主机的Tomcat工作目录。

[root@docker01 ~]# docker pull centos:7
[root@docker01 ~]# mkdir tomcat            # 创建Tomcat工作目录
[root@docker01 ~]# cd tomcat/
[root@docker01 tomcat]# ls               # 下载JDK源码包并上传到该工作目录
jdk-8u211-linux-x64.tar.gz
[root@docker01 tomcat]# vim Dockerfile   # 编辑dockerfile 文件

FROM centos:7            # 基础镜像centos:7
MAINTAINER The centos project            # 维护该镜像的用户信息,可不写
ADD jdk-8u211-linux-x64.tar.gz /usr/local/                # 将本地的JDK文件上传至容器
#以下是设置JDK环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV JAVA_BIN /usr/local/jdk1.8.0_211/bin
ENV JRE_HOME /usr/local/jdk1.8.0_211/jre
ENV PATH $PATH:/usr/local/jdk1.8.0_211/bin:/usr/local/jdk1.8.0_211/jre/bin
ENV CLASSPATH /usr/local/jdk1.8.0_211/jre/bin:/usr/local/jdk1.8.0_211/lib:/usr/local/jdk1.8.0_211/jre/lib/charsets.jar
ADD apache-tomcat-8.5.35.tar.gz /usr/local           # 将本地文件上传到容器(也可以安装wget 工具  然后RUN wget 从网上直接下载)
WORKDIR /usr/local/              # 进入该目录
RUN mv apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080              # 开启8080端口
ADD run.sh /run.sh                 # 添加运行脚本
RUN chmod 755 /run.sh         # 赋予脚本权限
CMD ["/run.sh"]            # 运行脚本
[root@docker01 tomcat]# vim run.sh       # 编写脚本内容
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /run
[root@docker01 tomcat]# ls         # 确定该工作目录有如下文件
apache-tomcat-8.5.35.tar.gz  Dockerfile    jdk-8u211-linux-x64.tar.gz  run.sh
[root@docker01 tomcat]# docker build -t tomcat:zyz .            # 生成镜像文件,注意!注意!注意!最后有个“.” 不要忽略,否则会报错
Successfully built 3b0d4e57c9cf      # 出现这行提示信息,则表示创建成功
Successfully tagged tomcat:zyz
[root@docker01 tomcat]# docker run -d --name tomcat -p 8080:8080 tomcat:zyz                   # 运行刚刚创建的Tomcat容器,并指定容器的名字为Tomcat,映射到宿主机的8080端口。
7fc935e10028b32cc420a8a5b8d5647e9dfa92332ee27d22a4078a1187086d77
[root@docker01 tomcat]# docker ps -a | grep tomcat       # 可以看到运行正常
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
9e7bb83f6cd0        tomcat:zyz          "/run.sh"           5 minutes ago       Up 5 minutes        0.0.0.0:8080->8080/tcp   tomcat

客户端访问Linux宿主机的8080端口,测试是否能够访问到Tomcat容器提供的web服务,如下:

看到以上页面,则表示Tomcat容器构建成功。 简单说一下Tomcat和apache的区别:它们都是Aache开源组织开发的用于处理HTTP服务的项目。两者都免费,也都可以作为独立的web服务器运行。Apache是C语言实现的,主要解析静态文本,并发性高,侧重于HTTP服务,Tomcat是java开发的一个符合JavaEES的JSP服务器,属于Apache的扩展,主要用于解析JSP/Servlet,侧重于Servlet引擎。

二、构建Nginx容器 Nginx是一款轻量级的web服务器,也是一个优秀的反向代理服务器。Nginx服务占用内存少,并发能力强,下面是构建Nginx容器的具体操作:

[root@docker02 ~]# mkdir nginx
[root@docker02 ~]# cd nginx/
[root@docker02 nginx]# vim Dockerfile
FROM centos:7            基础镜像
MAINTAINER the centos project         # 开发者信息
RUN yum -y install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel               # 安装依赖包
RUN wget http://nginx.org/download/nginx-1.18.0.tar.gz
RUN tar zxf nginx-1.18.0.tar.gz
WORKDIR nginx-1.18.0           # 进入目录
RUN ./configure --prefix=/usr/local/nginx && make && make install              # 编译并安装
EXPOSE 80            # 开启容器的端口
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf             # 修改配置文件,以非daemon方式启动
ADD run.sh /run.sh           # 上传运行脚本
RUN chmod 775 /run.sh          # 赋予权限
CMD ["/run.sh"]         # 执行
[root@docker02 nginx]# vim run.sh 
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@docker02 nginx]# ls          # 确定文件已准备好
Dockerfile  run.sh
[root@docker02 nginx]# docker build -t nginx:zyz .           # 还是切记最后有个“.”
Successfully built 398c33862c6d
Successfully tagged nginx:zyz 
[root@docker02 nginx]# docker run -d --name nginx -P nginx:zyz            # -d表示持久化运行,-P表示将容器端口映射到宿主机 
509ce884117e46eb24110ed5e144ff721ca0a68ac0787b11d17871ad376fcfdc
[root@docker02 nginx]# docker ps -a           # 查看容器,其中32769、32768就是容器映射到宿主机的端口
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
509ce884117e        nginx:zyz           "/run.sh"           4 seconds ago       Up 3 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   nginx

访问容器进行测试,Nginx是否运行成功!如下(访问宿主机的32769端口,就相当于访问了容器的80端口)

当然也可以进入容器进行修改网页文件来自定义内容 三、构建MySQL容器 MySQL是当下最流行的关系型数据库,所使用的SQL语言是用于访问数据库的最常用标准化语言,MySQL具有体积小、速度快、成本低的优势,是中小型企业首选的数据库。 开始构建MySQL容器:

[root@docker02 mysql]# docker pull centos:6       #下载centos 6作为基础镜像 
[root@docker02 ~]# mkdir mysql      # 创建工作目录
[root@docker02 ~]# cd mysql/
[root@docker02 mysql]# vim Dockerfile 

FROM centos:6         # 6为基础镜像
MAINTAINER the centos project-mysql
RUN yum -y install mysql mysql-server
RUN /etc/init.d/mysqld start && \
mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456';"&&\
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456';"
EXPOSE 3306
CMD ["mysqld_safe"]
[root@docker02 mysql]# docker build -t mysql:zyz .          # 生成镜像
Successfully built 2dc81fb9f463
Successfully tagged mysql:zyz
[root@docker02 mysql]# docker run -d --name mysql -P mysql:zyz 
9ac6f150fc6ed52e7847e52ecc3f66653a3d383f5dbe99a7afc9db3df8c8b543
[root@docker02 mysql]# docker ps -a            # 确认容器处于运行状态
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
9ac6f150fc6e        mysql:zyz           "mysqld_safe"       4 seconds ago       Up 4 seconds        0.0.0.0:32770->3306/tcp                         mysql
#对容器中的数据库进行访问测试,若无法使用mysql命令,请自行执行“yum -y install mysql”进行安装
[root@docker02 ~]# mysql -uroot -p123456 -h192.168.171.150 -P 32770
MySQL [(none)]> show databases;               #命令提示符发生变化,登录到了容器中的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

四、构建MySQL容器(源码编译) 二进制就不用写了,直接ADD复制到镜像,然后运行下安装脚本即可

[root@docker02 ~]# mkdir mysql      # 创建工作目录
[root@docker02 ~]# cd mysql/
[root@docker02 mysql]# vim Dockerfile 
FROM centos:7
MAINTAINER the centos project-mysql
RUN yum -y install wget ncurses ncurses-devel bison cmake make gcc gcc-c++ openssl openssl-devel
RUN useradd -s /sbin/nologin mysql
RUN wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.31.tar.gz
RUN tar zxf mysql-boost-5.7.31.tar.gz
WORKDIR  mysql-5.7.31/
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DWITH_SYSTEMD=1 && make && make install
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
RUN echo -e "#!/bin/sh \nsystemctl enable mysqld" > /run.sh
RUN chmod 755 /run.sh
RUN sh /run.sh
CMD ["init"]
#my.cnf 文件内容如下
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

[root@docker02 mysql]# docker build -t mysql:zyz .
[root@docker02 mysql]# docker run --name mysql -d -P --privileged mysql:zyz
10e18326b3e3e1df3f21087b9e4659dabe92364a2dee77fcb7ac2f14bdb0b7ee
[root@docker02 mysql]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                           NAMES
10e18326b3e3        mysql:zyz           "init"                   5 seconds ago       Up 4 seconds                0.0.0.0:32771->3306/tcp                         mysql
[root@docker02 mysql]# docker exec -it mysql /bin/bash
[root@10e18326b3e3 mysql-5.7.31]# mysql  
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
mysql> flush privileges;

在生产环境中一般不会将MySQL服务放在容器中运行,而是会单独使用服务器部署提供服务,搭建高可用集群

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 二进制部署MySQL5.7

    小手冰凉
  • 部署MySQL 5.7

    注:在安装MySQL前需要卸载掉当前已有的mariadb,然后需要安装gcc环境 1、安装cmake

    小手冰凉
  • MySQL 之数据备份及恢复

    MySQL备份一般采用全库备份加日志备份的方式,根据业务的需要,可以采用每周日凌晨1点进行完全备份以及每小时进行一次增量备份,这样在MySQL故障后可以使用完全...

    小手冰凉
  • 二进制部署MySQL5.7

    小手冰凉
  • mysql源码安装

    源码安装 #安装依赖 yum install gcc gcc-c++ autoconf automake zlib zlib-devel openssl ope...

    零月
  • CentOS8部署LNMP环境之编译安装mysql8.0.29的教程详解

    由于我安装了几次,我就不再讲述报错了,有点打脑壳!!!提前把相关依赖和报错就地解决。

    砸漏
  • 部署MySQL 5.7

    注:在安装MySQL前需要卸载掉当前已有的mariadb,然后需要安装gcc环境 1、安装cmake

    小手冰凉
  • CentOS6.3 x86_64 mininstall 安装 apahce2.23+jdk1.7+tomecat7+mysql5.1.58

    CentOS6.3 x86_64 mininstall 安装 apahce2.23+jdk1.7+tomecat7+mysql5.1.58

    三杯水Plus
  • 腾讯云服务器Linux系统如何安装MySQL数据库?

    我之前写过《【图文】腾讯云服务器CVM如何安装宝塔面板?》 ,安装完宝塔控制面板之后,里面自带有mysql数据库,非常方便。

    云上云
  • 使用mysql-proxy配置mysql读写分离

    老七Linux

扫码关注云+社区

领取腾讯云代金券