glusterFS 설치

glusterFS 는 노드 볼륨을 상호 동기화 하기 위한 도구

주요 작업 내용

  • 각 노드에 gluster 서버 기동
  • 노드 간 클러스터링 설정
  • 동기화 할 볼륨 생성
  • 각 노드에 사용할 경로에 볼륨 마운트

1. 노드별 gluster Server 생성

  • 기존 도커 중지
    • docker stop gluster-server
  • 도커 실행

docker run –rm \
-v glusterfs-lib:/var/lib/glusterd:z \
-v glusterfs-fs:/gluster/fs \
-d –privileged=true –net=host \
–restart on-failure –name gluster-server gluster/gluster-centos

2. gluster Server (컨테이너) 작업

한 컨테이너에서 실행

docker exec -it $(docker ps -q -f name=gluster) bash

노드간 클러스터링 설정

  • export replica=클러스터링 노드수
    • export node0=노드1 IP
    • export node1=노드2 IP
  • 클러스터링 노드 등록 (접속한 노드는 등록하지 않아도 됨)
    • gluster peer probe ${node0}
    • gluster peer probe ${node1}
  • 클러스터링 등록/연결 상태 조회
    • gluster peer status

볼륨 생성

  • 볼륨 삭제
    • gluster volume stop gVol
    • gluster volume delete gVol
  • 볼륨 생성
    • gluster volume create gVol replica ${replica} transport tcp ${node0}:/gluster/fs ${node1}:/gluster/fs force
  • 볼륨 설정
    • gluster volume set gVol network.ping-timeout 1
    • gluster volume set gVol ctime off
  • 볼륨 사용
    • gluster volume start gVol
  • 상태 조회
    • gluster volume info gVol
    • gluster volume status gVol

3. 노드별 볼륨 마운트

gluster client 설치 (glusterfs 파일시스템 사용을 위함)

  • 우분투
    • apt install glusterfs-client
  • centos
    • yum install glusterfs-client

볼륨 마운트

  • 마운트 제거
    • umount ${GVOL_HOME}
  • 마운트 생성
    • mount -t glusterfs localhost:/gVol /data/test
  • 상태 확인
    • mount |grep gVol
  • 권한 설정
    • chmod -R 777 ${GVOL_HOME}



Docker 관리 : Portainer 설치

Docker 관리 컨테이너 중, 본인이 사용이 편리하다고 판단한 portainer 설치 docker-compose 내용을 공유합니다.

  • 시놀로지 폴더에 docker-compose.yml 파일을 아래와 같이 작성
  • 제어판 > 작업 스케줄러에서 “생성 > 트리거된 작업 >사용자 정의 스크립트” 를 선택한다.
  • 작업명을 쓰고, 작업 설정 > 실행명령을 작성한다.
    • docker-compose -f [파일경로/파일명] up -d
    • 파일경로는 시스템의 full 경로 필요
    • 예) /volume1/디렉토리/파일명
  • 작업 스케줄러에서 실행하면 잠시 후 실행된다.
  • 웹에서 실행 확인
    • http://[NAS서버]:[공유포트]
  • 처음 접속 시, 관리자 아이디/패스워드를 생성한다.
  • 다음으로 관리할 endpoint를 등록한다.
    • 로컬 docker 를 관리하므로, docker 를 선택한다.
# docker-compose.yml 파일
version: '2'

volumes:
  portainer_data:

services:

  portainer:
    # 이미지
    image: portainer/portainer-ce:2.5.0
    restart: always
    ports:
      # 웹접근 포트
      - 39005:9000
    environment:

      # 시간설정
      TZ: Asia/Seoul
    volumes:
      - portainer_data:/data
      - /var/run/docker.sock:/var/run/docker.sock



도커 이미지 옮기기

docker hub를 이용하지 않고, docker image를 배포하기 위해서는 기존 docker image를 복제하여 remote 서버에서 사용할 수 있어야 한다. 이를 위해서 docker는 3가지 방법을 제공하고 있는데, 각각의 특징 및 활용방법을 확인해 본다.

[Save]

1. 특징

– 원본 image를 그대로 복제하여 file로 export

2. 활용

– 인터넷 접속이 어려운 상황에서 image를 직접 배포하는 용도

– import, commit과 차이 없음

3. example

> docker save ubuntu | gzip > ubuntu-golden.tar.gz

> zcat ubuntu-golden.tar.gz | docker load

[export]

1. 특징

– 현재 구동중인 container의 상태(파일/폴더추가, log 등)를 그대로 복제

– 원본 image와 다른 현재 운영상태를 image로 export

2. 활용

– 현재 운영상태를 그대로 유지하여 container를 확장하는 경우

3. 고려사항

– Dockerfile이 유지되지 않아, 새로운 설정을 추가하기 어려움.

4. example

> docker export <containerid> | gzip > mariadb-10-1.tar.gz

> zcat mariadb-10-1.tar.gz | docker import – mariadb:10.1

5. Troubleshooting

– export -> import -> docker run을 실행하면, 아래 에러 발생 “docker: Error response from daemon: No command specified.”

– export는 변경된 filesystem만 export하지, Dockerfile의 ENV, CMD, ENTRYPOINT등을 반영하지 못함.

– 해결

* save 명령어를 사용

* import시에 실행할 명령어를 옵션으로 추가할 수 있으나, save -> load를 이용하여 처리하는 것이 안정적일 것 같다.

[commit]

1. 특징

– 실행중인 container를 image로 저장

– export와 다른 점은 실행결과가 새로운 image를 생성하는 것.

– save/export는 모두 image를 file로 생성.

– 새로운 image를 생성하면서 -c 옵션으로 CMD, ENV등의 명령어를 적용할 수 있음.

2. 활용

– 일반적인 상황에서는 대부분 export를 많이 사용.

– commit은 임시 container에서 작업한 내용을 다른 곳에서 활용하고자 할때, 작업 내용이 사라지지 않도록 image로 저장하는 용도? (추측..)

3. example

> docker commit –change “ENV DEBUG true” c3f279d17e0a svendowideit/testimage:version3

[출처] [docker] import vs save vs commit|작성자 freepsw