도커로 그누보드 설치하기 #5 정보
도커로 그누보드 설치하기 #5
본문
오늘은 디렉토리 구조를 먼저 만들어 봤습니다.
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 에러인지 워닝인지 나오네요..
!-->!-->!-->!-->!-->!-->!-->
추천
1
1
댓글 8개

하나하나 잘 알려 주시니 배우는 재미에 즐겁습니다.
감사 합니다.
감사 합니다.

@들레아빠 자도 이것 저것 하면서 배우고 있는데, 코드만 봤을 때에는 다 아는 것 같은데, 실제로 해보니 막히는 것이 많네요..

감사 드려요.
여기서 php.ini 수정하는 방법도 좀 알려 주세요.
여기서 php.ini 수정하는 방법도 좀 알려 주세요.

@들레아빠 가능하면 빠른 시간내에 정리해서 올리겠습니다. 간단히 설명드리면 리눅스에 필요한 파일은 로컬에서 만들어 두고 시작할 때 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
&& 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

@마젠토님 감사 합니다.
etc/php/Dockerfile이 동작이 되지 않는 것 같습니다.
etc/php/php.ini는 잘 되는데..
etc/php/Dockerfile이 동작이 되지 않는 것 같습니다.
etc/php/php.ini는 잘 되는데..

@들레아빠 빌드에 문제가 있는지 아니면 동작에 문제가 있는지 체크해 봐야 됩니다.
docker-compose logs [컨테이너 서비스]
docker-compose logs [컨테이너 서비스]

@마젠토
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
로 해결이 되었습니다.
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
로 해결이 되었습니다.
