기술빙자사기

docker 에서 그누보드5 설치.

권성재 2020. 3. 23. 17:28

### 도커 생초보의 그누보드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 로 실행하면 됩니다.