docker部署:Apache-PHP7容器/MySQL容器/redis容器

本文介绍了如何使用Docker在CentOS 7.7上部署包含Apache, PHP7, MySQL和Redis的环境。首先,通过编辑Dockerfile和start.sh文件创建Apache与PHP7的联合镜像,接着分别启动MySQL和Redis容器,并确保配置了合适的端口映射和数据持久化。最后,启动Apache-php容器,并连接到MySQL和Redis容器,注意在PHP项目中使用MySQL的容器IP进行连接。" 122806737,1147440,使用集算器按时间间隔分组计算Excel数据平均值,"['Excel技巧', '数据处理', '有序计算']

前言

项目需要使用到 lamp 环境,最开始尝试的方案是 Apache+PHP+MySQL+Redis 四个容器独立运行,但没考虑到 Apache 容器如何调用 PHP 容器,所以走了个捷径,直接把 Apache 和 PHP合并在一个容器,连接上 MySQL 和 Redis 。

操作系统:centos:7.7
目标部署环境:Apache+PHP+MySQL+Redis
容器列表:

  • Apache-php容器
  • MySQL
  • Redis

制作Apache—php7镜像

cd
mkdir /Dockerfile
cd /Dockerfile  
#创建制作dockerfile的文件夹,进入文件夹

编辑Dockerfile

vi Dockerfile
#创建并编辑 Dockerfile ,写入以下内容
——————————————————————————————————————————————————————————————————————————————————————

FROM alpine:edge


#Add repos
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

#Add basics first
RUN apk update && apk upgrade && apk add \
	bash apache2 php7-apache2 curl ca-certificates openssl openssh git php7 php7-phar php7-json php7-iconv php7-openssl tzdata openntpd nano

#Setup apache and php ,可自行添加需要的扩展,php7-xxx
RUN apk add \
	php7-ftp \
	php7-xdebug \
	php7-mcrypt \
	php7-mbstring \
	php7-soap \
	php7-gmp \
	php7-pdo_odbc \
	php7-dom \
	php7-pdo \
	php7-zip \
	php7-mysqli \
	php7-sqlite3 \
	php7-pdo_pgsql \
	php7-bcmath \
	php7-gd \
	php7-odbc \
	php7-pdo_mysql \
	php7-pdo_sqlite \
	php7-gettext \
	php7-xml \
	php7-xmlreader \
	php7-xmlwriter \
	php7-tokenizer \
	php7-xmlrpc \
	php7-bz2 \
	php7-pdo_dblib \
	php7-curl \
	php7-ctype \
	php7-session \
	php7-redis \
	php7-exif \
	php7-intl \
	php7-fileinfo \
	php7-ldap \
	php7-apcu \
	php7-pcntl \
	php7-posix \
	php7-event

#Problems installing in above stack
RUN apk add php7-simplexml

RUN cp /usr/bin/php7 /usr/bin/php \
    && rm -f /var/cache/apk/*

#Add apache to run and configure
RUN sed -i "s/#LoadModule\ rewrite_module/LoadModule\ rewrite_module/" /etc/apache2/httpd.conf \
    && sed -i "s/#LoadModule\ session_module/LoadModule\ session_module/" /etc/apache2/httpd.conf \
    && sed -i "s/#LoadModule\ session_cookie_module/LoadModule\ session_cookie_module/" /etc/apache2/httpd.conf \
    && sed -i "s/#LoadModule\ session_crypto_module/LoadModule\ session_crypto_module/" /etc/apache2/httpd.conf \
    && sed -i "s/#LoadModule\ deflate_module/LoadModule\ deflate_module/" /etc/apache2/httpd.conf \
    && sed -i "s#^DocumentRoot \".*#DocumentRoot \"/app/public\"#g" /etc/apache2/httpd.conf \
    && sed -i "s#/var/www/localhost/htdocs#/app/public#" /etc/apache2/httpd.conf \
    && printf "\n<Directory \"/app/public\">\n\tAllowOverride All\n</Directory>\n" >> /etc/apache2/httpd.conf

RUN mkdir /app && mkdir /app/public && chown -R apache:apache /app && chmod -R 755 /app && mkdir bootstrap
ADD start.sh /bootstrap/
RUN chmod +x /bootstrap/start.sh

EXPOSE 80
ENTRYPOINT ["/bootstrap/start.sh"]

编辑镜像内使用的start.sh

#!/bin/sh

# Set the timezone. Base image does not contain the setup-timezone script, so an alternate way is used.
if [ "$CONTAINER_TIMEZONE" ]; then
    cp /usr/share/zoneinfo/${
   
   CONTAINER_TIMEZONE} /etc/localtime && \
	echo "${CONTAINER_TIMEZONE}" >  /etc/timezone && \
	echo "Container timezone set to: $CONTAINER_TIMEZONE"
fi

# Force immediate synchronisation of the time and start the time-synchronization service.
# In order to be able to use ntpd in the container, it must be run with the SYS_TIME capability.
# In addition you may want to add the SYS_NICE capability, in order for ntpd to be able to modify its priority.
ntpd -s

# Apache server name change
if [ ! -z "$APACHE_SERVER_NAME" ]
	then
		sed -i "s/#ServerName www.example.com:80/ServerName $APACHE_SERVER_NAME/" /etc/apache2/httpd.conf
		echo "Changed server name to '$APACHE_SERVER_NAME'..."
	else
		echo "NOTICE: Change 'ServerName' globally and hide server message by setting environment variable >> 'APACHE_SERVER_NAME=your.server.name' in docker command or docker-compose file"
fi

# PHP Config
if [ ! -z "$PHP_SHORT_OPEN_TAG" ]; then sed -i "s/\;\?\\s\?short_open_tag = .*/short_open_tag = $PHP_SHORT_OPEN_TAG/" /etc/php7/php.ini && echo "Set PHP short_open_tag = $PHP_SHORT_OPEN_TAG..."; fi
if [ ! -z "$PHP_OUTPUT_BUFFERING" ]; then sed -i "s/\;\?\\s\?output_buffering = .*/output_buffering = $PHP_OUTPUT_BUFFERING/" /etc/php7/php.ini && echo "Set PHP output_buffering = $PHP_SHORT_OUTPUT_BUFFERING..."; fi
if [ ! -z "$PHP_OPEN_BASEDIR" ]; then sed -i "s/\;\?\\s\?open_basedir = .*/open_basedir = $PHP_OPEN_BASEDIR/" /etc/php7/php.ini && echo "Set PHP open_basedir = $PHP_OPEN_BASEDIR..."; fi
if [ ! -z "$PHP_MAX_EXECUTION_TIME" ]; then sed -i "s/\;\?\\s\?max_execution_time = .*/max_execution_time = $PHP_MAX_EXECUTION_TIME/" /etc/php7/php.ini && echo "Set PHP max_execution_time = $PHP_MAX_EXECUTION_TIME..."; fi
if [ ! -z "$PHP_MAX_INPUT_TIME" ]; then sed -i "s/\;\?\\s\?max_input_time = .*/max_input_time = $PHP_MAX_INPUT_TIME/" /etc/php7/php.ini && echo "Set PHP max_input_time = $PHP_MAX_INPUT_TIME..."
这个里面的redis 密码是多少? services: mysql: image: mysql:8.4.1 container_name: mysql-8 environment: - MYSQL_ROOT_PASSWORD=123456 - TZ=Asia/Shanghai - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai volumes: - ${PWD}/mysql/config:/etc/mysql/conf.d - ${PWD}/mysql/data:/var/lib/mysql - ${PWD}/mysql/logs:/var/log/mysql - /etc/localtime:/etc/localtime:ro ports: - 3306:3306 restart: always healthcheck: test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] interval: 5s timeout: 10s retries: 10 redis: image: redis:latest container_name: redis restart: always ports: - 6379:6379 volumes: - ${PWD}/redis/config/redis.conf:/usr/local/etc/redis/redis.conf:rw - ${PWD}/redis/data:/data:rw command: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf" nacos: image: nacos/nacos-server:v2.3.2 container_name: nacos env_file: - ${PWD}/nacos/env/nacos-standlone-mysql.env volumes: - ${PWD}/nacos/logs/:/home/nacos/logs ports: - "8848:8848" - "9848:9848" restart: always depends_on: mysql: condition: service_healthy namesrv: image: apache/rocketmq:5.2.0 container_name: rmqnamesrv ports: - 9876:9876 volumes: - ${PWD}/rocketMQ/data/namesrv/logs:/home/rocketmq/logs command: sh mqnamesrv -n 192.168.90.106:9876 broker: image: apache/rocketmq:5.2.0 container_name: rmqbroker ports: - 10909:10909 - 10911:10911 - 10912:10912 volumes: - ${PWD}/rocketMQ/data/broker/logs:/home/rocketmq/logs - ${PWD}/rocketMQ/data/broker/store:/home/rocketmq/store - ${PWD}/rocketMQ/data/broker/conf/broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf command: sh mqbroker -n 192.168.90.106:9876 -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf autoCreateTopicEnable=true depends_on: - namesrv rocketmq-dashboard: image: apacherocketmq/rocketmq-dashboard:latest container_name: rocketmq-dashboard environment: - JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.90.106:9876 ports: - "9080:8080" restart: always depends_on: - namesrv - broker xxl-job: image: xuxueli/xxl-job-admin:2.4.1 container_name: xxl-job volumes: - ${PWD}/xxl-job/config/application.properties:/application.properties ports: - "9081:8080" restart: always depends_on: - mysql es: container_name: es image: elasticsearch:8.13.0 environment: - discovery.type=single-node - ELASTIC_PASSWORD=123456 - TZ=Asia/Shanghai ports: - "9200:9200" - "9300:9300" mem_limit: 2g volumes: - ${PWD}/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ${PWD}/es/data:/usr/share/elasticsearch/data - ${PWD}/es/plugins:/usr/share/elasticsearch/plugins restart: always kibana: image: kibana:8.13.0 container_name: kibana restart: always ports: - 5601:5601 volumes: - ${PWD}/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml depends_on: - es seata-server: image: seataio/seata-server:2.0.0 container_name: seata-server environment: - STORE_MODE=db - SEATA_IP=192.168.90.106 - SEATA_PORT=8091 volumes: - /etc/localtime:/etc/localtime:ro - ${PWD}/seata-server/resources/application.yml:/seata-server/resources/application.yml - ${PWD}/seata-server/logs:/seata-server/logs ports: - "7091:7091" - "8091:8091" restart: always sentinel-dashboard: image: javajianghu/sentinel-dashboard:v1.8.8 container_name: sentinel-dashboard environment: - dashboard.server=192.168.90.106:8888 ports: - "8888:8888" restart: always
06-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值