docker-compose 构建lnmp

发布于 / 1年前 - 更新于 / 1年前


docker-compose 构建lnmp 环境

docker的方便之处在于本地程序开发完成后,部署上线时可以把程序和程序运行环境一并打包部署
先来个构建好后的方便之处,直接输入 docker-compose up -d 几秒钟启动完成
image.png

docker-compose 文件内容如下

version: '3' services: mysql: hostname: mysql restart: always image: mysql:5.7 container_name: mysql ports: - "3306:3306" volumes: - ./mysql/logs:/var/log/mysql - ./mysql/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_USER: user MYSQL_PASSWORD: user123 redis: hostname: redis restart: always image: redis:alpine container_name: redis command: redis-server --requirepass 123456 ports: - "6379:6379" php: hostname: php restart: always container_name: php build: context: ./php dockerfile: Dockerfile image: myphp:7.3 ports: - "9000:9000" links: - mysql:mysql - redis:redis volumes: # php项目文件夹挂载 - ../www:/var/www/html nginx: hostname: nginx restart: always container_name: nginx image: nginx:1.17.0 ports: - "80:80" - "443:443" links: - "php:php" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/logs:/var/log/nginx - ./nginx/data:/usr/share/nginx/html

volumes: 文件挂载(宿主机和镜像同步)
links: 关联镜像
关于links说明,如上 php容器 关联了mysql和redis,在php容器中就可以直接以links的名称访问
如进入php容器,ping mysql (如果links: - mysql:mysql-db,则 ping mysql-db)

docker-compse mysql 说明

  • environment:
    • MYSQL_ROOT_PASSWORD: 123456
    • MYSQL_USER: user
    • MYSQL_PASSWORD: user123

以上配置后,构建时会设置root密码为123456,并创建一个user用户,密码为user123

docker-composer redis 说明

  • command: redis-server --requirepass 123456

**以上配置后,构建时会设置redis密码为 123456

特殊文件内容

nginx/conf.d

该文件夹下为nginx的配置,一下贴一个laravel框架使用的配置 laravel-web.conf

server { listen 80; server_name mylaravel.test; root /var/www/html/nb-api/public; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$query_string; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { root /var/www/html/nb-api/public; # 解析php时 的root设置 fastcgi_pass php:9000; #这里9000前面的php为nginx配置links的php容器名称 index index.php index.html fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

php/Dockerfile

该文件是为构建php容器内容如下

FROM php:7.3-fpm ENV DEBIAN_FRONTEND noninteractive # 更改 apt-get 源为阿里云 COPY sources.list /etc/apt/sources.list # 添加 phpredis 扩展文件 到 容器 ADD phpredis-5.2.2.tar.gz /usr/local/src # 安装依赖 RUN apt-get clean && apt-get update && apt-get install -y \ apt-utils \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ libzip-dev \ libmemcached-dev \ zlib1g-dev \ libcurl4-openssl-dev \ libxml2-dev \ --no-install-recommends && rm -rf /var/lib/apt/lists/* # 安装php常用扩展 RUN docker-php-source extract \ && docker-php-ext-install mysqli \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install pcntl \ && docker-php-ext-install gd \ && docker-php-ext-install zip \ # 安装phpredis扩展 && mv /usr/local/src/phpredis-5.2.2 /usr/src/php/ext/redis \ && docker-php-ext-install redis # 安装cron定时任务 和 supervisor 进程管理 RUN apt-get update && apt-get install -y cron \ && apt-get install -y supervisor # 添加配置 supervisor COPY supervisor /etc/supervisor/conf.d # 添加定时任务配置 crontabs COPY crontabs /var/spool/cron/crontabs # 添加 启动shell脚本 COPY entrypoint.sh /entrypoint.sh # 设置脚本为可执行 RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["php-fpm", "-F"]

entrypoint.sh 内容如下

#!/bin/sh # 启动 supervisord 进程管理 /usr/bin/supervisord -c "/etc/supervisor/supervisord.conf" # 加载并启动 cron 定时任务 /etc/init.d/cron reload /etc/init.d/cron start # 设置定时任务配置文件,如没有设置,定时任务不会执行,且 php/crontabs 文件夹下有哪些文件都需要设置 # crontab /var/spool/cron/crontabs/root crontab /var/spool/cron/crontabs/www-data # ENTRYPOINT shell 脚本固定语句 exec "$@"

注:windows创建的entrypoint.sh文件需要修改文件 fileformat=unix
gitbash 下 vim entrypoint.sh,然后输入 : 后面跟随 set ff=unix 回车确认,再次vim entrypoint.sh
image.png

完成

最后执行 docker-compose up -d

本作品采用《CC 协议》,转载必须注明作者和本文链接