docker实现lamp
- 仅拉取官方centos7.9源码制作,安装discuz论坛
1、创建桥接设备lamp
子网为172.29.109.0/24,任务所有容器都连接此网络,任务完成后输出网络拓扑图。
# docker network create --driver bridge --subnet 172.29.109.0/24 --gateway 172.29.109.1 lamp
浏览器访问eth3就是访问Apache容器
2 、选择7.9的centos7镜像
# docker pull centos:7.9.2009
3、MySQL容器
1)选择mysql的版本
注:这里让docker主机的/data/docker/mysql/data文件夹绑定mysql容器的/opt的文件夹,在docker/data/docker/mysql/data给权限即可在docker的/data/docker/mysql/data里面放入安装包就可以在容器的/opt里面看到
# chmod 777 /data/docker/mysql/data
# docker run -it --name=mysql --net lamp -p 3306:3306 -v /data/docker/mysql/data:/opt -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5.60 --character-set-server=utf8
2)配置数据库
在mysql容器运行
更新源
# apt-get update
安装ifconfig
# apt-get install -y net-tools
创建discuz的表
# create database discuz charset=utf8;
授权
# grant all on discuz.* to 'root'@'localhost' identified by '123456';
4、Apache容器:方法一
# 暂时没写
5、Apache容器:方法二
1)创建Apache容器
# docker run -it --name=httpd-php --net lamp -p 80:80 -v /data/docker/httpd/data:/opt -d centos:7.9.2009
更新源并安装vim,net-tools
# yum install -y vim
# yum install -y net-tools
2)安装Apache组件
apr-util-1.6.1.tar.gz
apr-1.7.0.tar.gz
httpd-2.4.46.tar.gz
pcre-8.44.tar.gz
现在先在docker主机上操作,把httpd-2.4.46.tar.gz, apr-util-1.6.1.tar.gz,apr-1.7.0.tar.gz,pcre-8.44.tar.gz四个文件放到/data/docker/httpd/data里面
# cd /data/docker/httpd/data
返回Apache的容器操作
解压
# cd /opt
# tar -zxvf httpd-2.4.46.tar.gz
# tar -zxvf apr-util-1.6.1.tar.gz
# tar -zxvf apr-1.7.0.tar.gz
# tar -zxvf pcre-8.44.tar.gz
安装编译环境
# yum install -y gcc gcc-c++
# yum install -y make
4)安装apr依赖包
在Apache容器的/opt文件夹下操作
# cd /opt
# yum install -y make
# cd apr-1.7.0/
# ./configure --prefix=/usr/local/apr
# make && make install
5)安装apr-util依赖包
在Apache容器的/opt文件夹下操作
# cd /opt
# yum install -y expat-devel
# cd apr-util-1.6.1/
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install
6)安装pcre依赖包
在Apache容器的/opt文件夹下操作
pcre-8.44
# cd /opt
# cd pcre-8.44/
# ./configure --prefix=/usr/local/pcre
# make && make install
7)安装Apache服务
在Apache容器的/opt文件夹下操作
httpd-2.4.46
# cd /opt
# cd httpd-2.4.46/
# ./configure --prefix=/usr/local/apache/ --enable-rewrite --enable-so --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
# make && make install
# vim /usr/local/apache/conf/httpd.conf
将httpd.conf的文件里修改ServerName localhost:80
# /usr/local/apache/bin/apachectl restart
在浏览器访问docker主机的IP
6、Apache+PHP
在Apache容器操作
1)PHP安装
PHP的安装包
在docker的主机里面的/data/docker/mysql文件夹添加PHP的安装包
然后在Apache容器操作以下命令
注意,PHP在安装的前需要安装本地mysql,可以直接yum安装
也可以根据一下源码安装mysql
mysql-5.5.60.tar.gz
把mysql的包丢到docker容器的/data/docker/httpd/data里
# cd /opt
# yum install -y gcc gcc-c++ git cmake ncurses-devel bison
# tar -zxvf mysql-5.5.60.tar.gz
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc \
-DMYSQL_TCP_PORT=3306 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_DEBUG=0
# make && make install
2)继续安装PHP
# cd /opt
# tar -zxvf php-5.4.39.tar.gz
# yum install -y libxml2 libxml2-devel
# ./configure --prefix=/usr/local/php5 \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-config-file-path=/usr/local/php5/etc
# make && make install
3)整合Apache+PHP环境
# vim /usr/local/apache/conf/httpd.conf
//加入如下代码,不要直接复制粘贴,查找后少了的添加
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html index.htm
# cat >/usr/local/apache/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
# rm -rf /usr/local/apache/htdocs/index.html
# /usr/local/apache/bin/apachectl restart
7、Redis容器
有两个方法:
1)方法一:官方拉取
redis
# docker pull redis:6.2.6
# docker run -it --name=redis --net lamp -p 6379:6379 -v /data/docker/redis:/opt -d redis:6.2.6
# docker start redis
# docker exec -it redis /bin/bash
2)方法二:在centos7的容器源码安装
在docker的主机里面的/data/docker/redis文件夹添加Redis的安装包
# docker run -it --name=redis --net lamp -p 6379:6379 -v /data/docker/redis:/opt -d centos:7.9.2009
# docker exec -it redis /bin/bash
下面在redis容器操作
# yum update
# cd /opt
# tar -zxvf redis-4.0.14.tar.gz
# cd redis-4.0.14
# yum install -y gcc
# make PREFIX=/usr/local/redis install
# cp redis.conf /usr/local/redis/
# vim /usr/local/redis/redis.conf
daemonize no 改成daemonize yes
# cd /usr/local/redis/bin
# ./redis-server ../redis.conf
3)修改redis的配置
在redis容器操作
# vim /usr/local/redis/redis.conf
protected-mode yes 改为 protected-mode no
bind 127.0.0.1注释
# cd /usr/local/redis/bin
# ./redis-cli shutdown
# ./redis-server ../redis.conf
尝试远程访问,h后面直接redis容器IP就得了
# ./redis-cli -h 172.29.109.4 -p 6379
8、PHP添加redis支持
在Apache容器运行
在docker的主机里面的/data/docker/httpd文件夹添加Redis的拓展安装包
# cd /opt
# yum install -y autoconf
# tar -zxvf phpredis-4.0.1.tar.gz
# cd phpredis-4.0.1
# /usr/local/php5/bin/phpize
# ./configure --with-php-config=/usr/local/php5/bin/php-config --enable-redis
# make && make install
# cp /opt/php-5.4.39/php.ini-development /usr/local/php5/etc/php.ini
# vim /usr/local/php5/etc/php.ini
# 添加:
extension=redis.so
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20100525"
# cd /usr/local/apache/htdocs/config/
# vim config_global.php
将redis server后改为Redis主库的IP
# /usr/local/apache/bin/apachectl restart
9、安装论坛
论坛
在Apache容器操作,先把论坛的安装包放到docker的/data/docker/httpd文件夹
# cd /opt
# yum install -y unzip
# unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/apache/htdocs/
# cd /usr/local/apache/htdocs/; mv upload/* ./
# chmod 757 -R data/ uc_server/ config/ uc_client/
# /usr/local/apache/bin/apachectl restart
数据库服务器是IP是MYSQL的容器IP,密码是mysql允许远程访问时候的密码,数据库名是mysql容器创建的时候创建的数据库,管理员密码是自定义