도커로 그누보드 설치하기 #5 > Docker

Docker

도커로 그누보드 설치하기 #5 정보

도커로 그누보드 설치하기 #5

본문

오늘은 디렉토리 구조를 먼저 만들어 봤습니다.

 

1893124284_1665482289.4726.png

 

gnuboard 디렉토리는 나중에 깃헙 디렉토리 올릴때에는 불필요한 곳이라서 별도로 web이란 디렉토리를 하나 만들었습니다.

 

디렉토리 구조는 만들어 가면서 조금씩 변경될 수 있습니다. (과정을 가능하면 깃헙에 커밋을 할 예정입니다.)

 

docker-compose.yml에서 아래는 이미지가 php와 apache가 한 이미지로 되어 있는데,  

오늘은 이것을 분리해 보겠습니다.


  php-apache-environment:
    container_name: php-apache
    build:
      context: ./php
      dockerfile: Dockerfile
    depends_on:
      - db
    volumes:
      - ./gnuboard:/var/www/html
    ports:
      - 8000:80

를 아래와 같이 나누겠습니다.

 

Apache2는


  apache2:
    image: httpd:2.4
    container_name: apache2
    build:
      context: ./etc/httpd
      dockerfile: Dockerfile
    ports:
      - "8000:80"
    volumes:
      - "./app/web:/var/www/html"
      - "./etc/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf"
      # - ./etc/httpd/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf

 

build: 아래는 etc/httpd 아래에 있는 dockerfile로 이미지를 만들라는 것입니다.

미리 만들어진 이미지보다는 자기가 원하는 기능을 넣을 때 이렇게 합니다.

현재는 이미지만 그냥 오는 것으로, 나중에 필요할 때 쉽게 추가..

 


FROM httpd:2.4

 

httpd.conf는

 


ServerRoot "/usr/local/apache2"
 
Listen 80
 
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
# additional
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
 
ServerAdmin *** 개인정보보호를 위한 이메일주소 노출방지 ***
 
<Directory />
    AllowOverride none
    Require all denied
</Directory>
 
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>
 
<IfModule unixd_module>
    User daemon
    Group daemon
</IfModule>
 
<IfModule dir_module>
    DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
                   default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
                   home.php home.pl home.cgi home.asp home.shtml home.html home.htm
</IfModule>
 
<Files ".ht*">
    Require all denied
</Files>
 
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
 
    <IfModule logio_module>
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
</IfModule>
 
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
 
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride All
    Options None
    Require all granted
</Directory>
 
<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>
 
<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddHandler cgi-script .cgi .pl .asp
    AddOutputFilter INCLUDES .shtml
</IfModule>
 
#
# FPM
#
<IfModule proxy_module>
    <FilesMatch "\.php$">
        SetHandler  "proxy:fcgi://php:9000"
    </FilesMatch>
</IfModule>

 

PHP 부문은

 


  php:
    # image: php:7.4-fpm
    container_name: php
    build:
      context: ./etc/php
      dockerfile: Dockerfile
    volumes:
      - ./app/gnuboard:/var/www/html
    ports:
      - "9000:9000"
    command:
      - /bin/sh
      - -c
      - |
        echo "security.limit_extensions = .php .phtml .php3 .php4 .php5 .html .htm" >> /usr/local/etc/php-fpm.d/www.conf
              php-fpm
    networks:
      - app-network

 

dockerfile은

 


FROM php:7.4-fpm
 
RUN apt-get update > /dev/null && apt-get install -y \
   git \
   unzip \
   libzip-dev \
   libjpeg-dev \
   libxpm-dev \
   libwebp-dev \
   libfreetype6-dev \
   libjpeg62-turbo-dev \
   libmcrypt-dev \
   libpng-dev \
   zlib1g-dev \
   libicu-dev \
   jpegoptim \
   g++ \
   libxrender1 \
   libfontconfig \
   nano \
   cron \
#    php-gd \
   acl
 
RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/
 
RUN docker-php-ext-configure intl \
   && docker-php-ext-install intl > /dev/null \
   && docker-php-ext-install zip > /dev/null \
   && docker-php-ext-install bcmath > /dev/null \
   && docker-php-ext-install gd > /dev/null
 
RUN pecl install mcrypt-1.0.5 \
   && docker-php-ext-enable mcrypt
 
RUN docker-php-ext-install pdo pdo_mysql mysqli
 
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer > /dev/null
 
RUN usermod -u 1000 www-data
 
RUN chown -R www-data:1000 /var/www
 
USER www-data
 
WORKDIR /var/www

 

생각보다 확실히 어렵네요.  아직 networks 개념도 완벽하지 않고, depends_on, links(이것은 안쓴다고 하니.) 등..  

 

현재로서는 그누보드 설치는 됩니다. gd 라이브러리 설치가

 


docker-php-ext-install gd > /dev/null

 

로 되네요.  예전에 apt-get install php-gd 뭐 이런식으로 인스톨 했던 것 같은데..

 

조금 바꾸었더니 fopen 에러인지 워닝인지 나오네요.. 

2000813730_1665558962.5381.png

 

 

추천
1
  • 복사

댓글 8개

@들레아빠 자도 이것 저것 하면서 배우고 있는데, 코드만 봤을 때에는 다 아는 것 같은데, 실제로 해보니 막히는 것이 많네요..
@들레아빠  가능하면 빠른 시간내에 정리해서 올리겠습니다.  간단히 설명드리면 리눅스에 필요한 파일은 로컬에서 만들어 두고 시작할 때 Volume을 사용해서 매핑시킵니다.(올립니다.)
@들레아빠 여기 Dockerfile안에  && docker-php-ext-install gd > /dev/null 에서 아래와 같이

&& docker-php-ext-configure gd --with-freetype --with-webp --with-jpeg && \
    docker-php-ext-install gd

넣어보세요.  이전 gd 관련  네가지(?) 옵션을 다 넣어보세요

참조

https://github.com/docker-library/wordpress/issues/461
@마젠토
RUN apt-get install -y libfreetype6-dev libwebp-dev libjpeg62-turbo-dev libpng-dev libxpm-dev
RUN docker-php-ext-configure gd --with-freetype --with-webp --with-jpeg
로 해결이 되었습니다.
© SIRSOFT
현재 페이지 제일 처음으로