### 도커 생초보의 그누보드5 도커화 시도
2020년 3월 19 일 강풍이 부는 현재
내 PC는 우분투 리눅스 19.10 설치해서 사용중이고,
기본으로 설치된 docker.io 패키지로 도커를 실행해서
기본환경으로 끙끙거리며 배우고 있는 중입니다.
그누보드5 버전을 도커에 설치하는걸 어거지로 겨우 해 봤습니다.
아주 낮은 수준으로 연습해본건데,
혹시라도 비슷한 초보분들 있을거 같아 간단하게 기록해 둡니다.
일단, 도커의 이념(?)에 맞게 마이크로서비스 형태로 아파치 웹서버와 mysqlDB 서버를
분리해서 docker-compose 로 컨테이너를 실행하고
컨테이너 종료시 db 정보나 웹업로드 정보가 사라지므로,
볼륨기능으로 호스트 디렉토리에 마운트해서 사용하도록 했습니다.
1.
일단 내 일반 계정 nonots 계정에 mydocker 라는 디렉토리를 만들고
거기서 도커 작업을 했습니다.
그 아래 mysqldata ( mysql컨테이너의 /var/lib/mysql 를 연결),
gnudata (그누보드 웹소스 전체 복사), 이렇게 2 개 폴더를 만들고
퍼미션을 707 로 바꿉니다.
그리고, gnudata 안에 data 를 만들어서 이것 역시 707 로 바꿉니다.
/home/nonots/mydocker/mysqldata/ => mysql 정보 저장(초기에 빈 디렉토리)
/home/nonots/mydocker/gnudata/ => 그누보드5 소스 전체 저장
/home/nonots/mydocker/gnudata/data => 그누보드 /data/ 폴더(퍼미션 707)
2.
웹서버는 아파치2.4 에 php가 모듈로 지원되고, php-mysqli php-gd 같은
php 모듈도 같이 하기위해서,
hub.docker.com 에 있는 php:7.4-apache 라는 이미지를 불러와서
간단하게 다시 빌드를 했습니다.
nonots@nonots-desktop:~/mydocker$ cat Dockerfile
ROM php:7.4-apache
MAINTAINER nonots
RUN apt update && apt -y install libfreetype6-dev libjpeg62-turbo-dev zlib1g-dev libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd mysqli
위와 같이 3줄짜리 Dockerfile 를 간단하게 만듭니다.
그런후 아래와 같이 nonots/gnudocker:v1 이라는 이미지 이름으로
빌드를 합니다.
nonots@nonots-desktop:~/mydocker$ docker build . -t nonots/gnudocker:v1
빌드가 성공하면
nonots@nonots-desktop:~/mydocker$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nonots/gnudocker v1 78566041ec11 13 seconds ago 435MB
와 같이 이미지 목록에 보입니다.
3.
그리고, 이렇게 생성한 웹서버 이미지와 db 이미지를 각각 컨테이너를 만들고
연결하기 위해서 docker-compose 사용했습니다.
우선 mydocker 폴더에 docker-compose.yaml 이라는 파일을
아래와 같이 생성합니다.
>>> docker-compose.yaml 시작
version: "3"
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
mymysqldb: # 서비스 명 - mysql DB서버
image: mysql:latest
container_name: mymysql
ports:
- "3306:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
environment: # -e 옵션
MYSQL_ROOT_PASSWORD: "root2349" # MYSQL root패스워드 설정 옵션
MYSQL_USER: "nonots" # 그누보드 사용자
MYSQL_DATABASE: "nonots_db" # 그누보드 사용 DB
MYSQL_PASSWORD: "kwon2349" #그누보드 비번
command: # 명령어 실행
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./mysqldata:/var/lib/mysql
gnuboard: #apache php 웹서버
depends_on:
- mymysqldb
image: nonots/gnudocker:v1
container_name: mygnu
ports:
- "888:80" # 웹브라우저에서 888 포트사용(변경가능).
restart: always
volumes:
- ./gnudata:/var/www/html # -v 옵션 (다렉토리 마운트 설정)
links:
- mymysqldb:mymysqldb # 그누보드 db 연결 호스트명을 mymysqldb 로 연결.
>>> docker-compose.yaml 끝
이 파일을 설명하면,
아파치웹서버 컨테이너는 mygnu 라는 이름으로, 그리고 mysql 서버는 mymysql 이라는
이름으로 컨테이너를 생성합니다.
mysql 서버는 원격 도커허브에 등록된 mysql:latest 최신버전 이미지를 다운받아서 만들고,
아파치 웹서버는 조금전 직접 빌드해 만든 nonots/gnudocker:v1 이라는 이미지로 만듭니다.
mysql 루트 비번과 그누보드에서 사용할 db,user,비번 정보(nonots, nonots_db, kwon2349)를
정해 주고,
웹서버에서 mysql db 서버를 원격 연결하는건 mymysqldb 라는 이름으로 링크(links)하게 합니다.
저장위치 볼륨은 컨테이너 안에서 외부 호스트로 연결해서 각각 호스트의 mysqldata, gnudata 로
연결합니다.
그리고 웹서버 포트는 80번포트를 외부로 888 로 연결했는데,
이부분은 원하는대로 수정하면 됩니다.
이렇게 yaml 파일을 만든 후.
nonots@nonots-desktop:~/mydocker$ docker-compose up -d
Creating mymysql ... done
Creating mygnu ... done
와 같이 docke-compose 로 실행하면
아래와 같이 컨테이너가 각각 mygnu mymysql 라는 이름을 실행 됩니다.
nonots@nonots-desktop:~/mydocker$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aeb187cb13df nonots/gnudocker:v1 "docker-php-entrypoi…" 5 seconds ago Up 3 seconds 0.0.0.0:888->80/tcp mygnu
2fc09a55ad89 mysql:latest "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mymysql
4.
이제 웹브라우저에서 http://localhost:888 포트로 접속하면
그누보드 설치 화면이 뜹니다.
물론 mysql 클라이언트 프로그램이 있다면, 3306 포트로 접속해서 db 관리도
가능합니다.
그누보드 설치시 Mysql 정보입력에서
Host 항목을 기본 localhost 가 아니라 원격 컨테이너인 mymysqldb 로 입력해야 합니다.
나머지는 일반적인 방법으로 설치해서 사용하면 됩니다.
그리고 설치 해서 정상적으로 사용하다가
nonots@nonots-desktop:~/mydocker$ docker container stop mygnu mymysql
nonots@nonots-desktop:~/mydocker$ docker container rm mygnu mymysql
로 컨테이너를 중지하고 컨테이너를 삭제하면 컨테이너 내부 정보는
다 사라지지만
nonots@nonots-desktop:~/mydocker$ docker-compose up -d
와 같이 다시 컨테이너를 실행하면
이전 설치된 그누보드 정보, DB 데이터가 그대로 남아 있음을 알수 있습니다.
즉, 만약 그누보드 정보를 그대로 다른 곳으로 복사해서 사용하려면,
/home/nonots/mydocker 디렉토리를 그대로 압축해서 다른 서버에서
docker-compose 로 실행하면 됩니다.
'기술빙자사기' 카테고리의 다른 글
[테스트 노트] docker swarm 모드로 그누보드5 로드밸런스(부하분산) 흉내내기 (0) | 2020.03.24 |
---|---|
docker 와 podman 으로 그누보드5 명령모드로 설치 (0) | 2020.03.23 |
오픈스택 (packstack): 멀티 노드 (3노드) 설정 참고. (1) | 2015.12.02 |
sendmail 로그분석 스팸 탐지 관련 삽질 (2) | 2011.12.03 |
리눅스 centos5에 오라클 10g 설치및 php 연동 (0) | 2011.08.25 |