기술빙자사기

도커(docker) 웹관리 프로그램인 dockge 설치 및 사용방법

권성재 2024. 2. 9. 19:05

### 작성물 : 도커(docker) 웹관리프로그램인 dockge 설치 및 사용방법
### 작성일 : 2024-02-09 설 전날 저녁.
### 작성자 : 아무개 nonots@hanmail.net

1. 개요

  도커가 참.
이 도커를 웹모드에서 쉽게 관리하기 위해서 기존 portainer 같은게 있는데
최근 dockge 라는게 나왔습니다.
dockge 발음이 닷지,돗지,독지,닥지.. 뭐 이렇게 하던데 
나는 "독게" 이렇게 하고 싶네요. 독게 !!! 
암튼.  내일이 새해 갑진년 설날입니다. 오늘은 계묘년 마지막날. 달도 없는 그믐.
은평구 북한산 아래 누추한 '호이재'에서 
한 독거노인이 궁상을 떨며 시간을 보내다가, 
혹시라도 나중 사람에 약간의 도움이 될까해서 몇자 끄적여 기록을 남깁니다.


2. 환경

  환경은 특별한건 없습니다.그냥 개인 PC, 다만 리눅스여야 한다는것.
MS 윈도우를 쓴다면 WSL 을 설치해서 해도  될겁니다.
나는, 오래전부터 PC 에 리눅스를 써왔는데, 지금은 우분투 22.04 LTS 를 
깔아서 씁니다.
그리고, 도커가 이미 설치되어 있고, 도커 데몬이 실행되어 있다고 전제하겠습니다.

root@nonots-mainpc:~# docker -v
Docker version 25.0.3, build 4debf41

root@nonots-mainpc:~# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-02-09 11:52:32 KST; 5h 10min ago


3. dockge 설치
  https://dockge.kuma.pet/ 여기를 참고 하면 됩니다.
  일단, 각종 도커 관련 데이타가 저장될 위치를 정합니다.
  기본 생성디렉토리는 /opt/stacks, /opt/dockge 인데, 만약 다른 곳에 하려면, 아래 compose.yaml 를 다운받아서
  위치와 포트 등을 수정하면 됩니다.
  작업은 root 권한으로 해야 합니다. /opt/dockge 는 dockge 스택관련만 저장되고  
  /opt/stacks 는 dockge 에서 생성한 정보가 저장됩니다.

        root@nonots-mainpc:~# mkdir -p /opt/stacks /opt/dockge
        root@nonots-mainpc:~# cd /opt/dockge

        # 다운로드  compose.yaml
        root@nonots-mainpc:/opt/dockge# curl "https://dockge.kuma.pet/compose.yaml?port=5002&stacksPath=%2Fopt%2Fstacks" --output compose.yaml

        # 도커 실행
        root@nonots-mainpc:/opt/dockge# docker compose up -d


  이렇게 설치해서,  쉘에서  docker ps 명령어로 보면. 아래와 같이 dockge 컨테이너가 실행되어 있습니다. 

root@nonots-mainpc:~# docker ps
CONTAINER ID   IMAGE               COMMAND                   CREATED        STATUS                 PORTS                                       NAMES 8fc7e11c7079   louislam/dockge:1   "/usr/bin/dumb-init …"   24 hours ago   Up 5 hours (healthy)   0.0.0.0:5001->5001/tcp, :::5001->5001/tcp   dockge-dockge-1

  이제 설치가 됐고,
  웹브라우저를 열어서 http://localhost:5001 를 주소창에 넣고 치면. 초기 인증 설정하고 로그인합니다.
  시커먼 화면이 뜨면 성공입니다.
  이제 여기서 어마무시하게 다양한 docker compose yaml 파일들을 넣고 생성만하면
  쉽게 도커를 가지고 놀 수있습니다.



4. 샘플 : filebrowser

  처음 샘플로, filebrowser 라는 클라우드 앱을 도커로 설치해 보겠습니다.
  https://filebrowser.org/
  dockge 메인화면에서 "+생성" 클릭하고.
  스택이름에 "filebrowser"라고 넣고,오른쪽 compose 파일 넣는 입력창에

---시작
# 초기인증번호는 : admin(admin)
version: "3"
services:
  filebrowser:
    image: hurlenko/filebrowser
    #user: ${UID}:${GID}
    ports:
      - 8080:8080
    volumes:
      - /opt/stacks/filebrowser/data:/data
      - /opt/stacks/filebrowser/data/config:/config
    environment:
      - FB_BASEURL=/filebrowser
    restart: always

---끝


  위 내용을 붙여 넣기 한후. 위 "배포" 를 클릭합니다.
  위에서 
  /opt/stacks/filebrowser/data:/data 이 부분에서 filebrowser/data 라는건
  자동으로 생성됩니다.
  스택이름을 firebrowser 로 해서 /opt/stacks 아래에 그 이름대로 디렉토리가 생성됩니다.
  아시다시피. 도커는 중지하면 모든 게 사라지므로 저장공간을 별도 볼륨으로 해서 
  지정합니다.
  위에서 8080(외부):8080(내부)은 ,  도커내부에서 8080 포트로 웹데몬이 열리고,
  이걸, 내 PC(외부) 에서 8080 포트로 전달해서 연다는 뜻입니다.
  만약 내 PC 에서 8888 로 웹브라우저에서 접속하려면 8888:8080 와 같이 하면 됩니다.
  일단,
  위에서 배포가 성공하고 나면,
  웹브라우저에서 http://localhost:8080 주소로 열면 filebrowser 인증창이 열립니다.
  초기 아이디는 admin, 비밀번호도 admin 입니다. 
  웹디스크 같은 프로그램입니다. 상당히 간편하고 직관적으로 쓸수있더군요.
  쉘에서 /opt/stacks 에 보면, filebrowser 라는 디렉토리가 있을겁니다.
  


 
5. uptime-kuma 설치 
  다음으로,, 이 dockge를 만든 프로그래머가 만든, 또 다른  유용한 웹기반 
  툴을 하나 테스트해 보겠습니다.
  dockge 메인화면에서 역시 "+생성" 을 클릭해서 
  스택이름에 "uptime-kuma" 라고 하고. 

---시작
version: "3"
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - /opt/stacks/uptime-kuma/data:/app/data
    ports:
      - 3001:3001
    restart: always
---끝
  
  위 내용을 붙여넣기 하고. 배포를 합니다.
  이번에는 포트를 3001 로 했고, 역시 영구저장 파일 위치를 
  /opt/stacks/uptime-kuma/data 로 볼륨을 정합니다. 역시 자동 생성됩니다.
  이렇게 하고, 웹브라우저로
  http://localhost:3001 로 접속해 보면,
  초기 인증 비번을 정하고, 로그인 할수 있습니다.
  
  이 uptime-kuma 는 관리할 서버가 여러대 있을때,
  이 서버들 상태를 원격에서  모니터링 하는 기능입니다. 
  로그인해서, 관리하는 웹서버나 각종 데몬을 포트 등을 정해서
  등록하면, 일정 시간마다 핑이나 기타 방법으로
  그 서버가 살아는있는지, 살았다면 잘 살아있는제 등을 쉽게 볼수 있습니다. 
  서버 관리자들한테 유용하겠더군요.


 
6. mysql8.0 DB 서버 

  이제는 좀 실전에 쓸만하고, 복잡한걸 테스트해 보겠습니다.
  mysql8.0 을 도커로 올려 보겟습니다. dockge 에서 "+생성" 을 눌러서 
  스택이름에 mysql8 을 넣고, 내용에 아래를 붙여 넣습니다.

---시작
version: "3"
services:
  mysql8:
    image: mysql:8.0
    platform: linux/x86_64
    container_name: mysql8
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: kwon1234
      MYSQL_DATABASE: nonots_db
      MYSQL_USER: nonots
      MYSQL_PASSWORD: kwon1234
      TZ: Asia/Seoul
    volumes:
      - /opt/stacks/mysql8/data:/var/lib/mysql
      - /opt/stacks/mysql8/config:/etc/mysql/conf.d
      - /opt/stacks/mysql8/init:/docker-entrypoint-initdb.d
---끝

  보면 알겠지만, 
  서비스 이름과, 컨테이너이름, 스택이름 mysql8 로 동일하게 하는게 좋습니다.
  나중에 이 db연결할때 서버 이름을 mysql8로 사용합니다. 암튼.
  위 설정에서 db 가 영구 저장될 곳 볼륨이
  /opt/stacks/mysql8 아래에 지정 합니다. (다른 데 원하는데 해도 됩니다.)
  mysql root 비번과, 사용자 id, 비번, db 등을 동시에 하나 생성합니다.
  이제 정상적으로 된건지 확인해 보면, 이건 웹브라우저로 접속하는게 아니라.
  3306포트로 DB 클라이언트로 해봐야 합니다.
  쉘에서 mysql명령어로 보면.

root@nonots-mainpc:~# mysql -uroot -pkwon1234 
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@nonots-mainpc:~# mysql -uroot -pkwon1234 -h localhost
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

root@nonots-mainpc:~# mysql -uroot -pkwon1234 -h 127.0.0.1
....
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit

  여기서 보는것처럼. 접속시 호스트를 localhost도 안되고 -h 127.0.0.1 로 하니 되더군요.
  그리고 지금까지 만든 도커를 보면.

root@nonots-mainpc:~# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED          STATUS                   PORTS                                                  NAMES
2ffb289a1e0f   mysql:8.0                "docker-entrypoint.s…"   7 minutes ago    Up 7 minutes             0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql8
547e649f5445   louislam/uptime-kuma:1   "/usr/bin/dumb-init …"   8 minutes ago    Up 8 minutes (healthy)   0.0.0.0:3001->3001/tcp, :::3001->3001/tcp              uptime-kuma
c1fa12f55a88   hurlenko/filebrowser     "/filebrowser --root…"   18 minutes ago   Up 18 minutes            0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              filebrowser-filebrowser-1
8fc7e11c7079   louislam/dockge:1        "/usr/bin/dumb-init …"   24 hours ago     Up 6 hours (healthy)     0.0.0.0:5001->5001/tcp, :::5001->5001/tcp              dockge-dockge-1

  와 같이 생성되어있는데 여기서 

root@nonots-mainpc:~# docker inspect mysql8 |grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.22.0.2",
root@nonots-mainpc:~# mysql -uroot -pkwon1234 -h 172.22.0.2  (성공)

  와 같이 mysql8 이름의 도커의 내부 할당된 사설 아이피 값을 볼수 있습니다.
  이 값은 다른 곳에서는 다 다를겁니다. 이 아이피로 mysql 에 연결해도 됩니다. 
  즉 내 pc 에서 127.0.0.1 와 172.22.0.2 두개의 아이피 값으로 연결 테스트가 됩니다. 

  그리고 또한, 유의할건, mysql8 을 설치시 compose파일에서 네트워크 정보를
  특별하게 넣지 않았으므로 디폴트 네트워크가 사용됩니다.
  이 이름은 mysql8_default 라고 자동으로 되어서 172.22.0/24 대역이 사용됩니다.
  이 네트워크를  아래에 보여줄  phpmyadmin 이나 wordpress 같은 외부 프로그램을 설치할 때
  사용할 수 있습니다.

root@nonots-mainpc:~# docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
43ad437fe429   bridge                bridge    local
7ee9e311fec7   dockge_default        bridge    local
708692c679b7   filebrowser_default   bridge    local
664ab805464d   host                  host      local
977ff3450bf1   mysql8_default        bridge    local <== 이부분
4c74f9289824   none                  null      local
59fff2d68d12   uptime-kuma_default   bridge    local


7. Phpmyadmin 설치
  이제 위에 설치한 mysql8 서버를 원격 접속해서 웹모드로 mysql 을 관리할수 있는
  phpmyadmin 을 설치해 보겠습니다.
  위 dockge 메인에서 "+생성"을 클릭해서. 스택이름에 "phpmyadmin" 을 넣고.

---시작
version: "3"
services:
  phpmyadmin:
    image: phpmyadmin:latest
    ports:
      - 8090:80
    environment:
      - PMA_ARBITRARY=1
    restart: unless-stopped
    networks:
      - mysql8_default
networks:
  mysql8_default:
    external: true
---끝
 
  위 내용을붙여 넣어서 배포를 합니다.
  여기서 PMA_ARBITRARY=1 를 반드시  넣어야 접속시 서버 이름을 입력할수 있습니다.
  그리고, 이전에 설치한 mysql8 의 도커에 원격 접속해야 하므로,
  mysql8 네크워크인 mysql8_default 라는 네트워크를 외부 네트워크로 불러와야합니다.


   이제 웹브라우저에서 http://localhost:8090 으로 접속해 봅니다.
  초기 화면에서 "서버" 란에 mysql8 이라는 이름으로 하고,
  루트 비번 역시 mysql8 생성할때 넣은 값 kwon1234 를 넣으면 로그인 됩니다.
  서버명에 mysqwl8 대신 위에서 확인한 도커 내부 가상아이피 172.22.0.2 를
  넣어도 됩니다.

  
8. 워드프레스 설치
  이제 mysql8 에 원격 접속하는 방법을 알았으니,
  워드프레스도 별도로 설치해 보겠습니다.
  워드프레스를 설치하기전에 위에서 설치한 phpmyadmin 에 root 로 접속해서
  워드프레스에서 사용할 db 와 사용자를 먼저 만들어 줍니다.

create database wordpress_db ;
create user wordpress@`%` identified by 'kwon1234' ;
grant all privileges on wordpress_db.* to wordpress@`%` with grant option;

  와 같이 wordpress 정보를 만듭니다. 만든후 쉘에서 확인합니다..

root@nonots-mainpc:~# mysql -uwordpress -pkwon1234 wordpress_db -h 127.0.0.1

  위 명령어가 성공하면 정상적으로 만들어 진겁니다.
  dockge 에서 "+생성" 을 눌러 스택이름에 "wordpress" 라고 넣고. 아래내용을 붙여넣습니다.

---시작
version: "3"
services:
  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8070:80
    environment:
      WORDPRESS_DB_HOST: mysql8
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: kwon1234
      WORDPRESS_DB_NAME: wordpress_db
    volumes:
      - /opt/stacks/wordpress/data:/var/www/html
    networks:
      - mysql8_default
networks:
  mysql8_default:
    external: true
---끝


  위에서 db 접속 정보를 정확하게 넣어 줍니다.
  역시, 네트워크는 mysql8_default 로 해줍니다. WORDPRESS_DB_HOST는 mysql8로 합니다.
  그리고 워프레스에 업로드된 파일등도 영구저장이 되어야 하므로
   볼륨을 /opt/stacks/wordpress/data 아래로 지정해 줍니다.
  배포를 하고 나면.
  이제 웹브라우저로 http://localhost:8070 으로 접속해서 워드프레스 설치과정을
  진행할수 있습니다.


  
9. Gnuboard 5 설치

  이제 마지막으로 대망의(?) 그누보드5를 설치해 보겠습니다.
  sir.kr 에서 그누보드 공식 compose.yaml 이 있는지 찾왔지만 못찾아서
  예전에 만들어 두었던걸 그대로 사용해 보겠습니다.
  https://sir.kr/g5_tip/13014
  https://hub.docker.com/repository/docker/nonots/gnudocker/general
  여기 php 7.4 기반의 아파치 웹서버 도커를 만들었는데,
  최신 버전으로 도커이미지를 다시 하려고 오랜만에 hub.docker.com 에  로그인해 봤더니.
  유료화가 된건지, 수정하는 방법을 못찾아서 일단 그대로 php7.4 기반으로
  하겠습니다.
  암튼,

create database gnuboard5_db ;
create user gnuboard5@`%` identified by 'kwon1234' ;
grant all privileges on gnuboard5_db.* to gnuboard5@`%` with grant option;

  이것도 워드프레스 처럼 별도 db 로 하려면,
  위와 같이 gnuboard5 라는 db 정보를 phpmyadmin 에서 생성합니다. 

root@nonots-mainpc:~# mysql -ugnuboard5 -pkwon1234 gnuboard5_db -h 127.0.0.1

  위 쉘 명령어로 성공하면 정상적으로 db 가 만들어 진겁니다.
  dockge 에서 "+생성" 으로 스택이름 gnuboard5 로 하고,

--- 시작
version: "3"
services:
  gnuboard5:
    image: nonots/gnudocker:v1
    container_name: gnuboard5
    ports:
      - "8060:80"
    restart: always
    volumes:
      - /opt/stacks/gnuboard5/html:/var/www/html
    networks:
      - mysql8_default
networks:
  mysql8_default:
    external: true
---끝

  위와 같이 붙여 넣고 배포를 클릭합니다.
  일단 생성을 완료합니다.
  역시 외부 mysql8 을 연결하기 위해서 mysql8_default
  외부 네트워크를 지정합니다.
  그누보드 데이타를 영구저장하기 위해서 볼륨을
  /opt/stacks/gnuboard5/html 로 연결했는데, 이렇게 한후 
  웹브라우저로 http://localhost:8060 으로 접속하기 전 몇가지 작업을 더해줍니다.  

  쉘에서 볼륨으로 이동한 후 
  git clone https://github.com/gnuboard/gnuboard5.git .  이 명령어로
  그누보드5 최신 소스를 설치합니다.
  git 명령어가 없다면 그냥 sir.kr 사이트에서 최신소스를 zip 압축파일로 
  다운받아서 /opt/stacks/gnuboard5/html 에 풀어주면 됩니다.
  그리고 data 디렉토리 만들고, 707 로 퍼미션 변경합니다.
  
root@nonots-mainpc:~# cd /opt/stacks/gnuboard5/html/

root@nonots-mainpc:/opt/stacks/gnuboard5/html# git clone https://github.com/gnuboard/gnuboard5.git .
'.'에 복제합니다...
remote: Enumerating objects: 89627, done.
remote: Counting objects: 100% (1229/1229), done.
remote: Compressing objects: 100% (517/517), done.
remote: Total 89627 (delta 687), reused 1097 (delta 624), pack-reused 88398
오브젝트를 받는 중: 100% (89627/89627), 66.06 MiB | 10.51 MiB/s, 완료.
델타를 알아내는 중: 100% (59531/59531), 완료.

root@nonots-mainpc:/opt/stacks/gnuboard5/html# mkdir data

root@nonots-mainpc:/opt/stacks/gnuboard5/html# chmod 707 data

  이렇게 한후,
  이제 웹브라우저로 http://localhost:8060  으로 접속합니다.
  그러면 그누보드 설치화면이 뜰겁니다.
  여기서 Host부분에 mysql8 이라고 넣고, 위에서 생성한 db 정보를 입력하면,
  정상적으로 그누보드5가 설치됩니다.
  [gnuboard]

  하고 보니 좀 어설프네요.
  워드프레스 처럼 소스와, db 정보를 한꺼번에 넣어서 하는.
  좀더 간단하고 세련된 도커 이미지와 compose 파일을 sir.kr 에서
  제공할 걸로 기대하겠습니다.

    (위에서 8080, 8070 8060 등등의 포트번호는, 중복충돌만 안되면 되니.
  원하는 걸로 바꾸어 생성해도 됩니다.)


10.  마무리
  빈약한 엉덩이가 아파옵니다. 세상이 어두워집니다.
  조용히 TV 틀고 먹거리를 챙깁니다.
  까치설날을 혼자 골방에서 자축하면서 자발없는 무상을 견뎌보려 합니다.
  새해 복 많이들 받으세요.