[root@localhost my-composetest]# tree
.
├── docker-compose.yml
├── etc
│ └── localtime ##时区文件
├── nginx
│ └── default.conf ##nginx配置文件
├── tomcat
│ ├── apache-tomcat-8.5.56.tar.gz ##tomca压缩包
│ ├── Dockerfile ##构建镜像文件
│ └── jdk-8u251-linux-x64.tar.gz ##jdk压缩包
└── webserver
├── tomcat1
│ └── index.jsp ##网页文件
└── tomcat2
└── index.jsp ##网页文件
jdk下载网址:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
官方网址需要注册
tomcat下载地址(wget):https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.56/bin/apache-tomcat-8.5.56.tar.gz
cat tomcat/Dockerfile
FROM centos7
ADD jdk-8u251-linux-x64.tar.gz /usr/local/ ##复制并解压压缩包到容器
ENV JAVA_HOME /usr/local/jdk1.8.0_251/ ##设置java环境变量
ADD apache-tomcat-8.5.56.tar.gz /usr/local/
EXPOSE 8080 ##开放端口
ENTRYPOINT ["/usr/local/apache-tomcat-8.5.56/bin/catalina.sh","run"]
##前台运行tomcat脚本
cat nginx/default.conf
upstream webserver {
server tomcat1:8080;
server tomcat2:8080;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://webserver;
}
}
[root@localhost my-composetest]# cp /usr/share/zoneinfo/Asia/Shanghai etc/localtime
[root@localhost my-composetest]# cat webserver/tomcat1/index.jsp
<%
out.println("this is tomcat1");
%>
[root@localhost my-composetest]# cat webserver/tomcat2/index.jsp
<%
out.println("this is tomcat2");
%>
version: "3"
services:
nginx:
image: nginx
restart: always
ports:
- 80:80
links: ##links方式连接tomcat
- tomcat1:tomcat1
- tomcat2:tomcat2
volumes:
- ./etc/localtime:/etc/localtime ##挂载时区文件
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf ##挂载nginx配置文件
depends_on: ##设置依赖,启动顺序
- tomcat1
- tomcat2
tomcat1:
hostname: tomcat1
build: ./tomcat ##Dockerfile路径
volumes: ##挂载时区跟网页路径
- ./webserver/tomcat1:/usr/local/apache-tomcat-8.5.56/webapps/ROOT
- ./etc/localtime:/etc/localtime
tomcat2:
hostname: tomcat2
build: ./tomcat
volumes:
- ./webserver/tomcat2:/usr/local/apache-tomcat-8.5.56/webapps/ROOT
- ./etc/localtime:/etc/localtime
docker-compose up -d
Building tomcat1
Step 1/6 : FROM centos7
---> f9c9fbed3702
Step 2/6 : ADD jdk-8u251-linux-x64.tar.gz /usr/local/
---> 591d5b98b6ed
Step 3/6 : ENV JAVA_HOME /usr/local/jdk1.8.0_251/
---> Running in 2cac20cececf
Removing intermediate container 2cac20cececf
---> de15c462828d
Step 4/6 : ADD apache-tomcat-8.5.56.tar.gz /usr/local/
---> 2c8e1de42336
Step 5/6 : EXPOSE 8080
---> Running in 54bc2ad953af
Removing intermediate container 54bc2ad953af
---> d4c2974a3704
Step 6/6 : ENTRYPOINT ["/usr/local/apache-tomcat-8.5.56/bin/catalina.sh","run"]
---> Running in 01bf136b66f5
Removing intermediate container 01bf136b66f5
---> 73373fdb1edb
Successfully built 73373fdb1edb
Successfully tagged my-composetest_tomcat1:latest
................
Creating my-composetest_tomcat1_1 ... done
Creating my-composetest_tomcat2_1 ... done
Creating my-composetest_nginx_1 ... done
curl 192.168.1.10
this is tomcat1
curl 192.168.1.10
this is tomcat2
创建文件夹
mkdir lnmp-compose
mkdir lnmp-compose/webserver
mkdir lnmp-compose/nginx
mkdir -p lnmp-compose/mysql/data
cd lnmp-compose
vim nginx/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /webserver; ##网页目录 等下安装discuz时创建
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ { ##开启php
fastcgi_pass php:9000; ##指定主机名和端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /webserver$fastcgi_script_name; ##此处改成网页目录
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
由于php官方镜像编译的问题,导致php不支持以mysqli的方式与mysql的连接,需要对镜像进行扩展
FROM php:5.6-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng12*-dev \
vim \
&& docker-php-ext-install pdo_mysql mysqli \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd
docker build -t="php-fpm5.6/v2" ./ ##构建新的镜像
##下载
wget http://download.comsenz.com/DiscuzX/3.3/Discuz_X3.3_SC_GBK.zip
##解压
unzip Discuz_X3.3_SC_GBK.zip
##复制upload到webserver
cp -rf /root/upload/* webserver/
##权限
chmod 777 -R webserver
cat docker-compose.yml
version: "3"
services:
nginx:
image: nginx
ports:
- 80:80
volumes:
- ./webserver:/webserver ##挂载网页目录
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf ##挂载配置文件
depends_on:
- php
links: ##连接容器
- php
environment: ##时区
- TZ=Asia/Shanghai
php:
image: php-fpm5.6/v2
ports:
- 9000:9000
volumes:
- ./webserver:/webserver ##挂载网页目录
links: ##链接容器
- mysql
depends_on:
- mysql
environment:
- TZ=Asia/Shanghai
mysql:
image: mysql:5.7
ports:
- 3306:3306
environment:
- TZ=Asia/Shanghai
volumes: ##此处挂载会自动把容器内的文件复制出来
- ./mysql/data:/var/lib/mysql
environment: ##传入mysql登录密码
- MYSQL_ROOT_PASSWORD=123456
docker-compose up -d
docker-compose up -d
Creating lnmp-compose_mysql_1 ... done
Creating lnmp-compose_php_1 ... done
Creating lnmp-compose_nginx_1 ... done
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------
lnmp-compose_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
lnmp-compose_nginx_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
lnmp-compose_php_1 docker-php-entrypoint php-fpm Up 0.0.0.0:9000->9000/tcp
##访问ip/install 一直下一步到第三步