1、构建Tomcat
Tomcat是一个免费开源的轻量级web服务器,在中小型企业和并发量不高的场合广泛使用,是开发和调试JSP程序的首选。下面使用Dockerfile文件的方式来建立带有Tomcat服务的docker镜像。
下载JDK源码包
(提取码:0e3q)并放置Linux宿主机的Tomcat工做目录。java
[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引擎。mysql
2、构建Nginx容器
Nginx是一款轻量级的web服务器,也是一个优秀的反向代理服务器。Nginx服务占用内存少,并发能力强,下面是构建Nginx容器的具体操做:linux
[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 # 查看容器,其中3276九、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端口):
固然也能够进入容器进行修改网页文件来自定义内容
3、构建MySQL容器
MySQL是当下最流行的关系型数据库,所使用的SQL语言是用于访问数据库的最经常使用标准化语言,MySQL具备体积小、速度快、成本低的优点,是中小型企业首选的数据库。
开始构建MySQL容器:nginx
[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)
4、构建MySQL容器(源码编译)
二进制就不用写了,直接ADD复制到镜像,而后运行下安装脚本便可c++
[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服务放在容器中运行,而是会单独使用服务器部署提供服务,搭建高可用集群web