专业编程基础技术教程

网站首页 > 基础教程 正文

docker-compose 示例分享(docker compose的作用)

ccvgpt 2025-05-03 12:43:29 基础教程 3 ℃

最近在研究温故加强docker容器的使用。前面使用宝塔安装了lnmp环境,并且安装了论坛flarum,现在分享一下如何通过docker容器将这个系统运行起来。

docker 及docker-compose 版本:

docker-compose 示例分享(docker compose的作用)

所用到的images为:

docker-compose 配置文件:

# cat docker-compose.yml 
version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - "18081:80"
    volumes:
      - /www/wwwroot/bbs-uat-2.test.com:/usr/share/nginx/html
      - /www/server/nginx/conf.d:/etc/nginx/conf.d
      - /www/wwwlogs:/var/log/nginx
    depends_on:
      - php-fpm
  php-fpm:
    image: php:8.3-fpm
    volumes:
      - /www/wwwroot/bbs-uat-2.test.com:/www
      - /www/server/php/php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - mysql
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dbnane 
      MYSQL_USER:dbuser
      MYSQL_PASSWORD: dbpass
    volumes:
      - /www/server/mysql:/var/lib/mysql

说明:系统使用的数据库名,账户和密码根据实际填写。MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD。

目录结构规划:

说明:/www/server 用来存放中间件的配置文件,如nginx,php,mysql等数据。

/www/wwwlogs 用来存放相关日志

/www/wwwroot 用来存放代码

nginx相关配置文件:

# pwd
/www/server/nginx/conf.d
[root@localhost conf.d]# cat flarum.conf 
server
{
    listen 80;
    server_name  _;
    index index.php index.html index.htm default.php default.htm default.html;
    root /usr/share/nginx/html/public;

    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    #CERT-APPLY-CHECK--END
    
    #允许跨域配置
    #add_header 'Access-Control-Allow-Origin' '*';

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    #include enable-php-83.conf;
    location ~ \.php$ {
        fastcgi_pass   php-fpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/public$fastcgi_script_name;
        include        fastcgi_params;
    }
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include conf.d/rewrite/rewrite_rule.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)#34; ) {
        return 403;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null;
    }
    access_log  /var/log/nginx/bbs-uat-2.test.com.log;
    error_log  /var/log/nginx/bbs-uat-2.test.com.error.log;
}
# cat rewrite/rewrite_rule.conf 
# Pass requests that don't refer directly to files in the filesystem to index.php
location / {
  try_files $uri $uri/ /index.php?$query_string;
}

# Uncomment the following lines if you are not using a `public` directory
# to prevent sensitive resources from being exposed.
# <!-- BEGIN EXPOSED RESOURCES PROTECTION -->
# location ~* ^/(\.git|composer\.(json|lock)|auth\.json|config\.php|flarum|storage|vendor) {
#   deny all;
#   return 404;
# }
# <!-- END EXPOSED RESOURCES PROTECTION -->

# The following directives are based on best practices from H5BP Nginx Server Configs
# https://github.com/h5bp/server-configs-nginx

# Expire rules for static content
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
  add_header Cache-Control "max-age=0";
}

location ~* \.(?:rss|atom)$ {
  add_header Cache-Control "max-age=3600";
}

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ {
  add_header Cache-Control "max-age=2592000";
  access_log off;
}

location ~* \.(?:css|js)$ {
  add_header Cache-Control "max-age=31536000";
  access_log off;
}

location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ {
  add_header Cache-Control "max-age=2592000";
  access_log off;
}

# Gzip compression
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
    application/atom+xml
    application/javascript
    application/json
    application/ld+json
    application/manifest+json
    application/rss+xml
    application/vnd.geo+json
    application/vnd.ms-fontobject
    application/x-font-ttf
    application/x-web-app-manifest+json
    application/xhtml+xml
    application/xml
    font/opentype
    image/bmp
    image/svg+xml
    image/x-icon
    text/cache-manifest
    text/css
    text/javascript
    text/plain
    text/vcard
    text/vnd.rim.location.xloc
    text/vtt
    text/x-component
    text/x-cross-domain-policy;

php相关配置文件:如php.ini

容器启动后,可以将其拷贝出来到宿主机

docker cp flarum-php-fpm-1:/usr/local/etc/php/php.ini-production php.ini

同理,如果下载的php容器版本或者扩展没安装,可以在容器启动后,进入容器通过源码重新编译安装,或者重新构建一个容器。

docker-compose停止和启动,进入docker-compose.yml所在的目录:

docker-compose down    //停止
docker-compose up -d   //启动

查看容器是否都启动:

浏览器访问:

Tags:

最近发表
标签列表