반응형
 

Argo Workflows 설치 방법

Argo Workflows를 설치하기 위해서는 Kubernetes 클러스터가 필요합니다. 아래는 Argo Workflows를 설치하는 방법입니다.

1. Kubernetes 클러스터 준비

  • 로컬에서 Kubernetes를 실행하려면 minikube나 kind를 사용할 수 있습니다. 클라우드에서는 Google Kubernetes Engine(GKE), Amazon EKS, Azure AKS 등을 사용할 수 있습니다.

2. Argo Workflows 설치

kubectl 설치: Kubernetes 클러스터에 접근하기 위해 kubectl을 설치합니다.

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
 

Argo CLI 설치: Argo Workflows를 사용하기 위한 CLI를 설치합니다.

curl -sLO https://github.com/argoproj/argo-workflows/releases/latest/download/argo-linux-amd64
chmod +x argo-linux-amd64
sudo mv argo-linux-amd64 /usr/local/bin/argo

Argo Workflows 설치: Helm을 사용하여 Argo Workflows를 설치할 수 있습니다. Helm이 설치되어 있어야 합니다.

# Helm repository 추가
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

# Argo Workflows 설치
helm install argo argo/argo-workflows --namespace argo --create-namespace

UI 접근: Argo Workflows는 웹 UI를 제공합니다. 포트 포워딩을 통해 UI에 접근할 수 있습니다.이제 브라우저에서 http://localhost:2746로 접근하여 Argo UI를 확인할 수 있습니다.

kubectl port-forward svc/argo-ui -n argo 2746:2746

Argo Workflows 예제 설명

1. Hello World 예제

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: hello-world
  templates:
  - name: hello-world
    steps:
    - - name: say-hello
        template: hello

  - name: hello
    container:
      image: ubuntu:latest
      command: [bash, -c]
      args: ["echo Hello, World!"]
  • 예제 설명:
    • 이 워크플로우는 "Hello, World!"를 출력하는 간단한 작업을 수행합니다.
    • entrypoint에서 hello-world 템플릿을 시작으로 설정하고, steps를 통해 say-hello 작업을 정의합니다.
    • hello 템플릿에서는 Ubuntu 이미지를 사용해 echo 명령어를 실행합니다.

2. 데이터 생성 및 분석 예제

 
  • 예제 설명:
    • 이 워크플로우는 두 개의 작업을 수행합니다: 데이터 생성과 데이터 분석.
    • 첫 번째 작업(generate-data)은 1에서 100 사이의 무작위 숫자 10개를 생성하고 출력합니다.
    • 두 번째 작업(analyze-data)는 첫 번째 작업의 출력을 입력으로 받아 평균값을 계산합니다.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: data-processing-
spec:
  entrypoint: process-data
  templates:
  - name: process-data
    steps:
    - - name: step-1
        template: generate-data
    - - name: step-2
        template: analyze-data
        arguments:
          parameters:
          - name: input-data
            value: "{{steps.step-1.outputs.result}}"

  - name: generate-data
    script:
      image: python:3.8
      command: [python]
      source: |
        import random
        data = [random.randint(1, 100) for _ in range(10)]
        print(data)

  - name: analyze-data
    inputs:
      parameters:
      - name: input-data
    script:
      image: python:3.8
      command: [python]
      source: |
        input_data = {{inputs.parameters.input-data}}
        avg = sum(input_data) / len(input_data)
        print("Average:", avg)

3. 병렬 작업 예제

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: parallel-jobs-with-follow-up-
spec:
  entrypoint: run-jobs
  templates:
  - name: run-jobs
    steps:
    - - name: job-1
        template: process-job
        arguments:
          parameters:
          - name: job-name
            value: "Job 1"
    - - name: job-2
        template: process-job
        arguments:
          parameters:
          - name: job-name
            value: "Job 2"
    - - name: job-3
        template: process-job
        arguments:
          parameters:
          - name: job-name
            value: "Job 3"
    
    # 병렬 작업이 완료된 후 실행할 작업
    - - name: follow-up-job
        template: follow-up

  - name: process-job
    inputs:
      parameters:
      - name: job-name
    container:
      image: ubuntu:latest
      command: [bash, -c]
      args: ["echo Processing {{inputs.parameters.job-name}}"]

  - name: follow-up
    container:
      image: ubuntu:latest
      command: [bash, -c]
      args: ["echo All jobs completed, executing follow-up task."]
  • 예제 설명:
    • 이 워크플로우는 세 개의 작업을 병렬로 실행합니다: Job 1, Job 2, Job 3.
    • 각 작업은 process-job 템플릿을 참조하고, 각 작업 이름을 인자로 전달합니다.
    • 각 작업은 자신에게 할당된 이름을 출력합니다.
    • 병렬 작업이 모두 완료된 후 follow-up-job이라는 후속 작업이 실행됩니다. 이 작업은 follow-up 템플릿을 사용하여 "All jobs completed, executing follow-up task."라는 메시지를 출력합니다.

4. 조건부 실행 예제

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: conditional-execution-
spec:
  entrypoint: conditional-workflow
  templates:
  - name: conditional-workflow
    steps:
    - - name: check-condition
        template: evaluate-condition

    - - name: run-if-true
        template: true-branch
        when: "{{steps.check-condition.outputs.result}} == 'true'"

  - name: evaluate-condition
    script:
      image: python:3.8
      command: [python]
      source: |
        # Here, implement your logic to evaluate a condition
        condition_met = True
        print(condition_met)

  - name: true-branch
    container:
      image: ubuntu:latest
      command: [bash, -c]
      args: ["echo Condition is true, executing this branch."]
  • 예제 설명:
    • 이 워크플로우는 특정 조건을 평가한 후 그 결과에 따라 다음 작업을 실행합니다.
    • evaluate-condition 템플릿에서 조건을 평가하고 결과를 출력합니다.
    • when 절을 사용하여 조건이 참일 때만 run-if-true 작업이 실행됩니다.

5. 재시도 메커니즘 예제

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: retry-job-
spec:
  entrypoint: retry-example
  templates:
  - name: retry-example
    steps:
    - - name: failing-job
        template: fail-with-retry

  - name: fail-with-retry
    retryStrategy:
      limit: 3
    container:
      image: ubuntu:latest
      command: [bash, -c]
      args: ["exit 1"]  # Always fails for demonstration
  • 예제 설명:
    • 이 워크플로우는 실패할 작업을 정의하고, 최대 3회 재시도합니다.
    • retryStrategy를 설정하여, 작업이 실패할 경우 자동으로 재시도하도록 합니다.

결론

Argo Workflows를 통해 Kubernetes 환경에서 복잡한 데이터 처리 및 분석 파이프라인을 효과적으로 관리할 수 있습니다. 위에서 설명한 설치 방법과 다양한 예제를 통해 Argo의 기본 기능을 이해하고, 필요에 맞게 파이프라인을 확장할 수 있습니다. 각 예제는 실제 사용 시나리오에 따라 조정할 수 있으며, 더 복잡한 작업 흐름을 생성하는 데 기초가 될 수 있습니다.

반응형

'Computer Science > linux' 카테고리의 다른 글

Docker Compose 사용하기  (0) 2024.09.20
Dockerfile 작성하기  (1) 2024.09.15
Docker 사용하기  (0) 2024.09.15
Slurm 설치  (0) 2024.06.05
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
반응형

Docker Compose 사용법과 예시: 효율적인 컨테이너 관리 도구

Docker는 애플리케이션을 컨테이너로 격리하여 실행하는 강력한 도구입니다. 여러 컨테이너로 구성된 애플리케이션을 쉽게 관리하고 실행하기 위해 Docker Compose라는 도구가 제공됩니다. Docker Compose는 여러 컨테이너의 설정을 YAML 파일로 정의하고, 한 번의 명령으로 손쉽게 컨테이너를 관리할 수 있습니다.

이번 글에서는 Docker Compose의 사용법, 예시 파일, 환경 변수 파일(.env) 사용법, 그리고 단일 이미지 vs. Docker Compose의 장단점에 대해 설명해 보겠습니다.


Docker Compose란?

Docker Compose는 여러 개의 Docker 컨테이너를 정의하고, 이 컨테이너들을 한 번에 실행하고 관리할 수 있는 도구입니다. **docker-compose.yml**이라는 설정 파일에 컨테이너 구성을 정의하고, docker-compose up 명령어로 전체 서비스를 실행할 수 있습니다. 이를 통해 개발자들은 복잡한 애플리케이션의 컨테이너를 일일이 실행할 필요 없이, 간편하게 일괄 관리할 수 있습니다.


Docker Compose 예시 파일

아래는 Node.js 애플리케이션MySQL 데이터베이스를 포함한 간단한 Docker Compose 파일의 예시입니다.

#docker-compose.yaml

version: '3'

services:
  web:
    image: node:14
    container_name: node_web
    volumes:
      - ./app:/usr/src/app
    working_dir: /usr/src/app
    command: npm start
    ports:
      - "3000:3000"
    env_file:
      - .env
    depends_on:
      - db

  db:
    image: mysql:5.7
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

설명:

  • version: Compose 파일의 버전을 지정합니다.
  • services: 컨테이너를 정의하는 부분으로, web과 db 두 개의 서비스가 있습니다.
    • web: Node.js 컨테이너를 정의하며, .env 파일을 사용하여 환경 변수를 설정합니다.
    • db: MySQL 데이터베이스 컨테이너로, 환경 변수로 데이터베이스 설정을 지정합니다.
  • volumes: 컨테이너의 데이터를 유지할 수 있는 볼륨을 정의하여, 컨테이너가 종료되더라도 데이터가 유지되도록 설정합니다.

환경 변수 파일 (.env) 사용법

환경 변수 파일을 사용하면 민감한 정보나 설정 값을 코드에서 분리할 수 있어 보안성과 가독성을 높일 수 있습니다. 예를 들어, .env 파일을 작성하여 다음과 같이 환경 변수를 설정할 수 있습니다:

#.env file
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=mydatabase
MYSQL_USER=user
MYSQL_PASSWORD=password

Compose 파일 내에서 env_file 지시어를 통해 이 파일을 참조함으로써, 환경 변수를 손쉽게 적용할 수 있습니다. 이는 유지보수를 용이하게 하고, 환경 설정을 보다 유연하게 관리할 수 있도록 도와줍니다.


Docker Compose 사용법

Docker Compose의 사용법은 매우 간단합니다. 아래는 기본적인 사용 명령어입니다.

Docker Compose 파일 작성: docker-compose.yml 파일을 작성합니다.

서비스 실행:이 명령어를 실행하면 docker-compose.yml에 정의된 모든 서비스가 실행됩니다.

docker-compose logs

백그라운드에서 실행:-d 옵션을 사용하면 컨테이너가 백그라운드에서 실행됩니다.

docker-compose down

서비스 중지:모든 서비스를 중지하고 컨테이너를 삭제합니다.

docker-compose up -d

로그 확인:각 컨테이너에서 발생하는 로그를 확인할 수 있습니다.

docker-compose up

Docker Compose의 장점

  1. 간편한 멀티 컨테이너 관리: 여러 컨테이너를 동시에 관리할 수 있어 복잡한 애플리케이션 구성도 쉽게 실행 가능합니다.
  2. YAML 파일을 통한 설정: docker-compose.yml 파일로 구성 요소를 쉽게 정의하고 관리할 수 있습니다.
  3. 환경 의존성 제거: 로컬 개발 환경에서도 쉽게 컨테이너를 실행할 수 있으며, 배포 환경에서도 동일한 설정을 사용할 수 있습니다.
  4. 컨테이너 간 의존성 관리: depends_on 옵션을 사용해 컨테이너 간 의존성을 쉽게 정의할 수 있어, 서비스 실행 순서를 보장합니다.
  5. 데이터 유지: 볼륨을 정의해 데이터를 영구적으로 저장할 수 있어 컨테이너 종료 후에도 데이터가 유지됩니다.

Docker Compose의 단점

  1. 복잡한 설정 관리: 많은 컨테이너와 설정이 포함된 경우, docker-compose.yml 파일이 복잡해질 수 있습니다.
  2. 성능 이슈: 다수의 컨테이너를 로컬에서 실행할 경우, 시스템 리소스를 많이 소모할 수 있습니다.
  3. 초기 설정 어려움: 도커와 Compose에 익숙하지 않은 사용자에게는 초기 설정 과정이 다소 어려울 수 있습니다.
  4. 네트워크 이슈: Docker Compose의 기본 네트워크 설정으로 인한 포트 충돌이 발생할 수 있으며, 복잡한 네트워크 설정이 필요한 경우 추가적인 조정이 필요합니다.

단일 Docker 이미지 vs. Docker Compose

단일 Docker 이미지 사용의 장점

  1. 간편한 배포: 하나의 이미지만 있으면 배포가 용이합니다.
  2. 단순한 설정: 단일 애플리케이션을 실행할 때 설정이 간단합니다.
  3. 리소스 관리: 리소스 소모가 상대적으로 적습니다.

단일 Docker 이미지 사용의 단점

  1. 확장성 부족: 여러 서비스나 데이터베이스와의 연결이 필요할 경우 복잡해질 수 있습니다.
  2. 환경 관리 어려움: 각 서비스의 환경 설정을 별도로 관리해야 합니다.

Docker Compose 사용의 장점

  1. 복잡한 애플리케이션 구성: 여러 서비스를 쉽게 연결하고 관리할 수 있습니다.
  2. 환경 설정 통합: 모든 서비스의 환경 설정을 하나의 YAML 파일로 관리할 수 있습니다.
  3. 서비스 간 의존성 처리: 서비스 간의 실행 순서를 관리할 수 있습니다.

Docker Compose 사용의 단점

  1. 복잡한 설정 관리: 설정이 많아질수록 YAML 파일이 복잡해질 수 있습니다.
  2. 성능 소모: 여러 컨테이너를 동시에 실행하면 시스템 리소스 사용량이 증가할 수 있습니다.

결론

Docker Compose는 여러 컨테이너로 이루어진 애플리케이션을 손쉽게 관리하고 실행할 수 있는 강력한 도구입니다. YAML 파일을 통한 설정 관리와 환경 변수 파일을 활용한 민감한 정보 보호로 개발 환경과 운영 환경에서의 일관성을 유지할 수 있습니다. 복잡한 컨테이너 의존성도 간단히 관리할 수 있으며, 다양한 프로젝트에 적용해 보시기 바랍니다.

Docker Compose를 통해 개발과 운영 환경에서의 생산성을 크게 향상시킬 수 있으므로, 효율적인 컨테이너 관리를 위한 도구로 적극 활용해 보세요!

반응형

'Computer Science > linux' 카테고리의 다른 글

Argo workflow 설치와 예제  (0) 2024.09.22
Dockerfile 작성하기  (1) 2024.09.15
Docker 사용하기  (0) 2024.09.15
Slurm 설치  (0) 2024.06.05
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
반응형

Dockerfile은 Docker 이미지를 빌드하기 위한 설정 파일입니다. 이 파일은 애플리케이션을 어떻게 컨테이너로 패키징할지 정의하는 스크립트입니다. Dockerfile을 통해 필요한 베이스 이미지부터 애플리케이션의 의존성 설치, 환경 변수 설정, 실행 명령어까지 정의할 수 있습니다. 아래는 Dockerfile을 작성하는 방법을 단계별로 설명합니다.


1. Dockerfile 기본 구조

Dockerfile의 기본적인 구성 요소는 다음과 같습니다:

  1. 베이스 이미지 설정: FROM 키워드를 사용하여 어떤 베이스 이미지를 사용할지 정의합니다.
  2. 의존성 설치: RUN 명령어로 애플리케이션이 실행되는 데 필요한 패키지나 의존성을 설치합니다.
  3. 작업 디렉토리 설정: WORKDIR 명령어로 애플리케이션을 실행할 디렉토리를 설정합니다.
  4. 파일 복사: COPY나 ADD 명령어로 호스트 시스템의 파일을 컨테이너로 복사합니다.
  5. 명령어 실행: CMD나 ENTRYPOINT 명령어로 컨테이너가 실행될 때 기본으로 실행할 명령을 설정합니다.

2. Dockerfile 작성 예제

1. 간단한 Node.js 애플리케이션의 Dockerfile 예제

# 1. 베이스 이미지 설정 (Node.js LTS 버전 사용)
FROM node:16

# 2. 애플리케이션의 작업 디렉토리 설정
WORKDIR /usr/src/app

# 3. 패키지 파일을 컨테이너로 복사
COPY package*.json ./

# 4. 의존성 설치
RUN npm install

# 5. 소스 코드를 컨테이너로 복사
COPY . .

# 6. 애플리케이션 실행 포트 설정
EXPOSE 8080

# 7. 컨테이너가 실행될 때 실행할 명령어
CMD ["npm", "start"]

이 Dockerfile은 다음 단계를 수행합니다:

  • 베이스 이미지 설정: Node.js 16 버전을 사용하는 이미지에서 시작.
  • 작업 디렉토리 설정: /usr/src/app 디렉토리를 컨테이너의 기본 작업 디렉토리로 지정.
  • 의존성 설치: package.json을 복사하고 npm install 명령어로 의존성을 설치.
  • 애플리케이션 복사: 현재 디렉토리의 파일을 컨테이너로 복사.
  • 포트 설정: 8080 포트를 컨테이너에서 노출.
  • 명령어 설정: 컨테이너가 실행되면 npm start로 애플리케이션을 시작.

2. Python Flask 애플리케이션 Dockerfile 예제

# 1. 베이스 이미지 설정
FROM python:3.9-slim

# 2. 환경 변수 설정
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 3. 작업 디렉토리 설정
WORKDIR /app

# 4. 의존성 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 5. 애플리케이션 소스 복사
COPY . .

# 6. 애플리케이션 실행 명령어
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]

이 Dockerfile은:

  • Python 3.9을 베이스 이미지로 사용하고 있습니다.
  • ENV 명령어로 환경 변수를 설정하여 Python 실행 시 캐시 파일을 기록하지 않게 설정.
  • requirements.txt 파일을 복사한 후 pip로 의존성을 설치.
  • 애플리케이션을 복사한 후 Flask 애플리케이션을 실행.

3. 주요 Dockerfile 명령어 설명

1. FROM

Dockerfile의 첫 번째 명령으로, 사용할 베이스 이미지를 지정합니다. 이 이미지는 모든 Dockerfile이 필수로 포함해야 합니다.

2. WORKDIR

작업 디렉토리를 설정합니다. 이후에 실행되는 모든 명령은 이 디렉토리에서 실행됩니다.

3. COPY

호스트 시스템의 파일을 컨테이너의 특정 경로로 복사합니다.

4. RUN

컨테이너가 빌드될 때 실행할 명령어를 지정합니다. 주로 패키지 설치, 파일 권한 설정 등 이미지 빌드 시 필요한 작업을 처리합니다.

5. CMD

컨테이너가 실행될 때 기본적으로 실행할 명령어를 설정합니다. 컨테이너가 시작할 때마다 이 명령어가 실행됩니다.

6. EXPOSE

컨테이너가 사용할 포트를 지정합니다. 실제 포트 매핑은 docker run 명령어에서 설정합니다.

7. ENTRYPOINT

CMD와 비슷하지만, 컨테이너 실행 시 항상 실행되며 주로 스크립트를 실행할 때 사용합니다. CMD는 추가 명령을 받을 수 있지만, ENTRYPOINT는 고정된 명령을 실행합니다.


4. Dockerfile을 사용하여 이미지 빌드하기

Dockerfile을 작성한 후, Docker 이미지를 빌드하려면 다음 명령어를 실행합니다:

docker build -t my_image_name .
  • -t 옵션은 이미지의 태그를 지정하는 데 사용됩니다.
  • .는 Dockerfile이 위치한 디렉토리를 의미합니다.

이미지 빌드가 완료되면 docker images 명령어로 빌드된 이미지를 확인할 수 있습니다.

docker images

5. 최적화된 Dockerfile 작성 팁

  1. 캐시 활용: RUN, COPY 명령어는 Docker 빌드 중 캐시가 사용됩니다. 의존성을 먼저 설치한 후, 애플리케이션 파일을 복사하면 소스 코드 변경 시에도 의존성 설치 단계는 캐시를 사용하게 되어 빌드 시간을 줄일 수 있습니다.
  2. 멀티스테이지 빌드: 애플리케이션 빌드와 런타임 환경을 분리하여 이미지 크기를 줄일 수 있습니다.
  3. 이미지 최소화: 불필요한 패키지를 설치하지 않거나, slim 버전과 같은 경량 이미지를 사용하여 이미지 크기를 최소화합니다.

Dockerfile을 통해 애플리케이션을 컨테이너화하고, 어디서나 동일한 환경에서 실행할 수 있는 이미지로 패키징할 수 있습니다. 이를 통해 배포 자동화와 일관된 개발 환경을 유지할 수 있습니다.

반응형

'Computer Science > linux' 카테고리의 다른 글

Argo workflow 설치와 예제  (0) 2024.09.22
Docker Compose 사용하기  (0) 2024.09.20
Docker 사용하기  (0) 2024.09.15
Slurm 설치  (0) 2024.06.05
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
반응형

Docker란?

Docker는 애플리케이션을 컨테이너로 패키징하여 실행할 수 있는 오픈 소스 플랫폼입니다. 컨테이너는 애플리케이션과 그 의존성을 함께 묶어 격리된 환경에서 실행되도록 합니다. 이를 통해 개발자는 애플리케이션을 어디서나 동일한 환경에서 실행할 수 있으며, 배포 및 관리를 단순화할 수 있습니다. Docker는 특히 가상 머신보다 더 가볍고 빠르게 애플리케이션을 실행할 수 있는 장점을 가지고 있어, 개발과 운영 환경에서 널리 사용되고 있습니다.

Docker의 주요 특징:

  • 컨테이너: 격리된 환경에서 애플리케이션을 실행할 수 있어, 다른 컨테이너나 시스템에 영향을 미치지 않음.
  • 이미지: 애플리케이션과 의존성을 포함한 패키지로, 한번 빌드하면 어디서나 동일한 환경에서 실행 가능.
  • 경량성: 가상 머신보다 적은 리소스를 사용하며, 더 빠른 배포 및 실행이 가능.

Docker의 장점

1. 애플리케이션의 이식성

Docker는 애플리케이션을 컨테이너화하여 운영 체제의 종류나 환경에 상관없이 동일하게 실행할 수 있습니다. 이를 통해 개발, 테스트, 프로덕션 환경 간에 애플리케이션의 이식성을 보장할 수 있습니다.

2. 빠르고 경량

컨테이너는 가상 머신에 비해 매우 가볍고 빠릅니다. 가상 머신은 각각 운영 체제를 포함하는 반면, Docker 컨테이너는 호스트 운영 체제의 커널을 공유하므로 시작 속도와 리소스 사용량이 적습니다.

3. 개발 및 배포의 일관성

Docker 이미지를 사용하면 애플리케이션을 어디서나 동일한 환경에서 실행할 수 있습니다. 개발자가 작성한 코드를 프로덕션 환경에 배포할 때, 환경 차이로 인한 문제를 최소화할 수 있습니다.

4. 버전 관리 및 롤백

Docker 이미지는 여러 레이어로 구성되며, 이미지의 버전을 관리할 수 있습니다. 이를 통해 쉽게 롤백하거나 특정 버전의 애플리케이션을 실행할 수 있습니다.

5. 확장성

Docker는 클러스터링 및 오케스트레이션 도구(Kubernetes 등)와 결합하여 대규모 애플리케이션을 쉽게 확장할 수 있습니다. 이를 통해 클라우드 환경에서의 자원 관리와 확장성을 극대화할 수 있습니다.

Docker의 단점

1. 복잡한 네트워킹 설정

Docker의 네트워킹은 복잡할 수 있으며, 특히 여러 컨테이너 간의 통신이나 클러스터링 환경에서는 네트워크 설정에 대한 깊은 이해가 필요합니다.

2. 컨테이너 보안 문제

Docker는 기본적으로 root 권한으로 실행되기 때문에, 보안 취약점이 발견되면 컨테이너 탈출 공격 등이 발생할 수 있습니다. 이를 방지하기 위해 rootless Docker나 보안 강화 설정이 필요합니다.

3. 상태 관리의 어려움

컨테이너는 기본적으로 비상태성(stateless)으로 설계되어 있습니다. 이를 사용하여 영속적인 데이터를 저장하거나 관리하는 것은 다소 복잡할 수 있으며, 적절한 볼륨 관리가 필요합니다.

 

1. Rootless Docker와 일반 Docker 차이 및 설치 방법

sudo systemctl enable docker
sudo systemctl start docker

1. 일반 Docker 설치 방법

Ubuntu에서 일반 Docker를 설치하려면 다음 단계를 따릅니다:

  • Docker 패키지 설치를 위한 필수 패키지를 먼저 설치합니다.
sudo systemctl enable docker
sudo systemctl start docker
  • Docker GPG 키를 추가한 후, Docker 공식 저장소를 설정합니다.
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • Docker 패키지를 설치합니다.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • Docker 설치 후, Docker 서비스를 활성화하고 시작합니다.
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

2. Docker 사용 시 그룹에 사용자 추가

Docker는 기본적으로 root 권한으로 실행되기 때문에, sudo 없이 Docker 명령어를 실행하려면 사용자를 docker 그룹에 추가해야 합니다. 다음 명령어를 실행하여 현재 사용자를 docker 그룹에 추가합니다.

sudo usermod -aG docker $USER

사용자를 docker 그룹에 추가한 후, 적용을 위해 로그아웃하고 다시 로그인합니다. 또는 아래 명령어를 실행하여 새로 추가된 그룹을 바로 적용할 수 있습니다.

newgrp docker

이제 sudo 없이 Docker 명령을 실행할 수 있습니다.

docker run hello-world

Rootless Docker 설치 방법

Rootless Docker는 root 권한 없이 컨테이너를 실행할 수 있도록 지원하는 도구입니다. 보안이 중요한 환경에서 주로 사용되며, 다음과 같이 설치할 수 있습니다:

  1. 일반 Docker를 먼저 설치하고,
  2. Rootless 설정을 활성화합니다.
dockerd-rootless-setuptool.sh install
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
systemctl --user start docker

Rootless Docker는 루트 권한 없이 실행되기 때문에 보안성 측면에서 매우 유리합니다. 특히 여러 사용자가 동일한 서버에서 컨테이너를 실행하거나, 루트 권한을 요구하지 않는 환경에서 적합합니다.


2. Docker 컨테이너에서 볼륨 권한 문제 해결

Docker 컨테이너에서 호스트 파일 시스템과 볼륨을 마운트할 때, 컨테이너가 생성한 파일은 기본적으로 root 권한으로 작성됩니다. 이로 인해 호스트 시스템에서 권한 문제가 발생할 수 있습니다.

문제 상황

  • 컨테이너에서 생성한 파일이 root 소유자로 설정되어, 호스트의 일반 사용자가 해당 파일을 수정하거나 삭제할 수 없습니다.

해결 방법

  • 컨테이너 실행 시 특정 사용자로 실행: --user 옵션을 사용하여 컨테이너 내부에서 파일을 생성하는 사용자의 권한을 설정할 수 있습니다. 이 방법은 호스트 시스템의 사용자와 권한을 맞추는 데 유용합니다.
docker run -v /host/path:/container/path --user $(id -u):$(id -g) my_container
  • 권한 수정: 컨테이너 내에서 chown 명령을 사용하여 마운트된 디렉토리의 소유권을 변경할 수 있습니다.
docker run -v /host/path:/container/path my_container bash -c "chown -R user:group /container/path && your_command"

이 방법을 통해 컨테이너 내에서 생성된 파일의 소유자를 호스트 시스템의 사용자와 일치시켜, 권한 문제를 해결할 수 있습니다.


3. Rootless Docker 사용이 적합한 상황

Rootless Docker는 다음과 같은 경우에 적합합니다:

보안이 중요한 환경

Rootless Docker는 root 권한을 사용하지 않기 때문에, 컨테이너 내부에서 발생하는 보안 문제가 호스트 시스템에 영향을 미치지 않습니다. 여러 사용자가 동일한 서버에서 컨테이너를 실행하거나, 멀티 테넌트 시스템을 운영하는 환경에서 유용합니다.

루트 권한을 얻기 어려운 환경

루트 권한을 얻을 수 없는 공유 서버나 클라우드 환경에서는 Rootless Docker를 사용하여 비루트 사용자로도 컨테이너를 실행할 수 있습니다.

컨테이너 격리 테스트

보안 취약성 테스트나 컨테이너의 격리성에 대한 테스트를 진행할 때도 Rootless Docker는 유용합니다. 루트 권한을 사용하지 않기 때문에, 더 높은 수준의 보안을 유지하면서 테스트를 수행할 수 있습니다.

 

Docker는 다양한 환경에서 애플리케이션을 손쉽게 배포하고 관리할 수 있는 도구이지만, 컨테이너와 호스트 시스템 간의 권한 문제는 종종 발생합니다. 특히 컨테이너 내부에서 생성된 파일의 권한 문제를 해결하거나, 보안이 중요한 환경에서 Rootless Docker를 사용하는 방법을 잘 이해하면, 보다 안전하고 효율적인 Docker 사용이 가능합니다.

반응형

'Computer Science > linux' 카테고리의 다른 글

Docker Compose 사용하기  (0) 2024.09.20
Dockerfile 작성하기  (1) 2024.09.15
Slurm 설치  (0) 2024.06.05
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
Docker와 MariaDB연결하기  (0) 2022.08.24
반응형

SLURM 이란

SLURM(Simplified Linux Utility for Resource Management)은 대규모 병렬 컴퓨팅 환경에서 작업 스케줄링과 리소스 관리를 위한 오픈 소스 클러스터 관리 시스템입니다. SLURM은 슈퍼컴퓨터와 대규모 클러스터에서 사용되며, 사용자가 제출한 작업을 효율적으로 스케줄링하고 자원을 배분하는 역할을 합니다. 주요 기능으로는 작업 큐잉, 우선순위 스케줄링, 자원 할당, 작업 모니터링 등이 있습니다.

SLURM 설치 방법

여기서는 SLURM을 설치하고 설정하는 절차를 단계별로 설명합니다.

설치를 위한 절차

1. 컨트롤 서버와 노드 서버를 결정

먼저, SLURM 클러스터에서 컨트롤 서버와 노드 서버를 결정합니다. 컨트롤 서버는 SLURM의 중앙 관리 노드로, 작업 스케줄링과 자원 관리를 담당합니다. 노드 서버는 실제로 작업이 실행되는 컴퓨팅 노드입니다.

2. MUNGE 설치 및 설정

MUNGE(Munge Uid 'N' Gid Emporium)는 SLURM에서 인증을 처리하는 데 사용됩니다. 모든 컨트롤 서버와 노드 서버에 MUNGE를 설치하고 설정합니다.

 

2.1. MUNGE 설치

모든 서버에서 MUNGE를 설치합니다.

sudo apt install -y munge libmunge-dev

 

2.2. MUNGE 키 생성 및 배포

컨트롤 서버에서 MUNGE 키를 생성하고, 모든 노드 서버로 배포합니다.

# 컨트롤 서버에서 MUNGE 키 생성 
sudo /usr/sbin/create-munge-key 
# MUNGE 키 파일을 모든 노드 서버로 복사 
sudo scp /etc/munge/munge.key user@node-server:/etc/munge/

 

2.3. MUNGE 키 파일 권한 설정

각 노드 서버에서 MUNGE 키 파일의 권한을 설정합니다.

sudo chown munge:munge /etc/munge/munge.key 
sudo chmod 400 /etc/munge/munge.key

 

2.4. MUNGE 데몬 시작 및 활성화

모든 서버에서 MUNGE 데몬을 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

sudo systemctl enable munge 
sudo systemctl start munge

3. SLURM 설치

3.1. 컨트롤 서버에 SLURM 설치

컨트롤 서버에서 SLURM 컨트롤 데몬(slurmctld)을 설치합니다.

sudo apt install -y slurm-wlm

 

3.2. 노드 서버에 SLURM 설치

모든 노드 서버에서 SLURM 데몬(slurmd)을 설치합니다. 컨트롤 서버에서도 작업을 실행하려면 SLURM 데몬도 함께 설치합니다.

sudo apt install -y slurmd

4. slurm.conf 설정

SLURM의 주요 설정 파일인 slurm.conf를 작성합니다. 이 파일은 클러스터의 구성과 동작을 정의합니다.

# slurm.conf file generated by configurator.html. 
# Put this file on all nodes of your cluster. 
# SLURM 컨트롤러 노드의 호스트 이름 
ControlMachine=controller 

# 인증 방법 설정 
AuthType=auth/munge 

# SLURM 데몬이 사용할 포트 설정 
SlurmdPort=6818 SlurmctldPort=6817 

# 상태 정보 저장 위치 설정 
StateSaveLocation=/var/spool/slurm-llnl/state 
SlurmdSpoolDir=/var/spool/slurmd 

# 프로세스 추적 방법 설정 
ProctrackType=proctrack/cgroup 

# 노드가 서비스로 돌아가는 방식을 제어 
ReturnToService=1 

# 스케줄링 메커니즘 설정 
SchedulerType=sched/backfill 

# SLURM 데몬의 로그 파일 위치 설정 
SlurmdLogFile=/var/log/slurmd.log 
SlurmctldLogFile=/var/log/slurmctld.log 

# SLURM 데몬의 PID 파일 위치 설정 
SlurmctldPidFile=/run/slurm/slurmctld.pid 
SlurmdPidFile=/run/slurm/slurmd.pid 

# 작업 자격 증명에 사용할 키 설정 
JobCredentialPrivateKey=/var/spool/slurm-llnl/cred_priv.pem 
JobCredentialPublicCertificate=/var/spool/slurm-llnl/cred_pub.pem 

# SLURM 데몬의 시간 초과 값 설정 
SlurmdTimeout=300 
SlurmctldTimeout=300 

# 노드 선택 메커니즘 설정 
SelectType=select/cons_tres 
SelectTypeParameters=CR_Core_Memory 

# 작업 관리 플러그인 설정 
TaskPlugin=task/affinity 

# 클러스터 이름 설정 
ClusterName=my_cluster 

# 클러스터의 노드 설정 
NodeName=node[1-4] CPUs=16 RealMemory=64000 State=UNKNOWN 

# 클러스터의 파티션 설정 
PartitionName=debug Nodes=node[1-4] Default=YES MaxTime=INFINITE State=UP

5. cgroup.conf 설정 (GPU 사용 시)

GPU 자원을 관리하려면 cgroup.conf 파일을 설정해야 합니다.

예제: cgroup.conf

CgroupAutomount=yes 
CgroupReleaseAgentDir="/etc/slurm-llnl/cgroup" 
ConstrainCores=yes 
ConstrainRAMSpace=yes 
ConstrainDevices=yes 
AllowedDevicesFile="/etc/slurm-llnl/cgroup_allowed_devices_file.conf"

 

예제: cgroup_allowed_devices_file.conf

/dev/nvidiactl 
/dev/nvidia-uvm 
/dev/nvidia0 
/dev/nvidia1 ...

6. 설정 파일 배포

작성한 slurm.conf와 cgroup.conf 파일을 모든 노드 서버로 배포합니다.

scp /etc/slurm-llnl/slurm.conf user@node-server:/etc/slurm-llnl/ 
scp /etc/slurm-llnl/cgroup.conf user@node-server:/etc/slurm-llnl/ 
scp /etc/slurm-llnl/cgroup_allowed_devices_file.conf user@node-server:/etc/slurm-llnl/

요약

이 포스트에서는 SLURM 설치 및 설정 절차를 다루었습니다. 다음은 간단한 요약입니다:

  1. 컨트롤 서버와 노드 서버를 결정.
  2. 모든 서버에 MUNGE 설치 및 설정.
  3. 컨트롤 서버에 slurmctld 설치, 노드 서버에 slurmd 설치.
  4. slurm.conf 설정 파일 작성.
  5. GPU 사용 시 cgroup.conf 설정 파일 작성.
  6. 설정 파일을 모든 서버에 배포.

이 단계를 통해 SLURM 클러스터를 구축하고 관리할 수 있습니다. SLURM을 통해 대규모 병렬 컴퓨팅 환경에서 효율적으로 작업을 스케줄링하고 자원을 관리할 수 있습니다.

 

주의할 점.

1. munge나 slurm을 실행할 때 로그 파일의 디렉토리가 생성되어 있지 않으면 에러가 날 수 있습니다.

2. 클러스터 노드의 CPU, Memory 등을 설정하기 위해서 $lscpu와 $free -m 명령어를 사용하여 노드의 자원 상태를 파악할 수 있습니다.

3. 설정 파일(slurm.conf, cgroup.conf, munge.key) 등이 노드 서버로 복사 된 이후에 서비스를 재시작하여야 합니다.

반응형

'Computer Science > linux' 카테고리의 다른 글

Dockerfile 작성하기  (1) 2024.09.15
Docker 사용하기  (0) 2024.09.15
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
Docker와 MariaDB연결하기  (0) 2022.08.24
centos 8에 slurm 설치하기  (0) 2022.05.11
반응형

 

LDAP(Lightweight Directory Access Protocol)은 디렉토리 서비스를 제공하기 위한 애플리케이션 프로토콜입니다. 주로 네트워크 상에서 사용자, 그룹, 장치 등의 정보를 중앙에서 관리하고, 검색 및 수정할 수 있도록 설계되었습니다. 이를 통해 여러 시스템 간에 인증 및 권한 부여를 일관되게 수행할 수 있습니다. LDAP는 효율적인 디렉토리 데이터베이스로서, 기업 환경에서 사용자 계정 관리 및 조직의 구조화를 돕습니다.

 

 

LDAP(Lightweight Directory Access Protocol)의 여러 기능 중 하나는 사용자 계정을 구축하는 것입니다. 기본 개념은 LDAP 서버에 조직 및 사용자에 대한 구조화된 정보를 저장하고, LDAP 클라이언트에서 접속 요청이 오면 LDAP 서버에서 사용자 인증을 처리하는 것입니다. 이를 통해 여러 서버의 계정을 중앙에서 관리할 수 있습니다. LDAP 서버는 사용자의 인증, 권한 부여, 계정 정보 등의 중앙 집중화된 관리를 가능하게 합니다. 여러 서버와 애플리케이션이 LDAP 서버와 통신하여 사용자를 인증하고, 권한을 부여받으며, 필요한 계정 정보를 가져올 수 있습니다.

 

1. OpenLDAP 서버 설치

sudo apt-get install slapd ldap-utils

 

LDAP 서버로 사용할 서버에 접속해서 관련 라이브러리를 설치합니다.

 

2. OpenLDAP 서버 초기 구성

sudo dpkg-reconfigure slapd

 

 

이 명령어를 실행하면 몇 가지 설정 질문이 나타납니다:

  • DNS 도메인 이름: 예를 들어 example.com
  • 조직 이름: 예를 들어 Example Inc
  • 관리자 비밀번호 설정
  • 데이터베이스 파일을 삭제할지 여부: 기본값을 유지 (No)
  • Move old database: 기본값을 유지 (Yes)
  • 데이터베이스를 만들 수 있는 허용된 세션 수: 기본값을 유지 (No)

 

3. LDAP 디렉토리 구조 설정

LDAP 디렉토리 구조를 설정하려면 LDIF (LDAP Data Interchange Format) 파일을 사용합니다. 다음은 기본 디렉토리 구조를 설정하는 예입니다:

 

#base.ldif
# 조직의 루트 엔트리
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Organization
dc: example

# 사용자 조직 단위
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

# 그룹 조직 단위
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

# IT 부서 조직 단위
dn: ou=IT,ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: IT

# HR 부서 조직 단위
dn: ou=HR,ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: HR

# 관리자 계정
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
userPassword: {SSHA}PASSWORD_HASH

 

각 항목의 설명

  1. dn (Distinguished Name):
    • LDAP 디렉토리에서 엔트리를 고유하게 식별하는 이름입니다. 디렉토리 트리의 경로를 나타냅니다.
    • 예: dn: dc=example,dc=com은 도메인 구성 요소가 example과 com인 루트 엔트리를 의미합니다.
  2. objectClass:
    • 엔트리의 유형을 정의합니다. 각 objectClass는 엔트리가 가질 수 있는 속성을 정의합니다.
    • top: 모든 LDAP 엔트리가 상속하는 최상위 클래스입니다.
    • dcObject: 도메인 구성 요소를 나타내는 클래스입니다.
    • organization: 조직을 나타내는 클래스입니다.
    • organizationalUnit: 조직 단위를 나타내는 클래스입니다.
  3. 조직 정보:
    • o: 조직의 이름을 나타냅니다.
    • dc: 도메인 구성 요소를 나타냅니다.
    • 예: o: Example Organization, dc: example
  4. 조직 단위:
    • ou: 조직 단위의 이름을 나타냅니다.
    • 예: ou: users, ou: groups

 

PASSWORD_HASH 값은 아래 명령어로 생성한 다음에 붙여넣으면 됩니다.

slappasswd

 

 

base.ldif는 조직 구조에 따라 계층적 설계도 가능합니다.

# 조직의 루트 엔트리
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example org
dc: example

# 사용자 조직 단위
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

# 그룹 조직 단위
dn: ou=groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

# AI부문 조직 단위
dn: ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: AI

# AI 연구개발 부서 조직 단위
dn: ou=RnD,ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: RnD

# AI 전략기획 부서 조직 단위
dn: ou=SnP,ou=AI,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: SnP

# 관리자 계정
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
userPassword: {SSHA}PASSWORD_HASH

 

작성한 base.ldif 파일을 적용시킵니다.

sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f base.ldif

 

4. 사용자 및 그룹 추가

이제 새로운 사용자를 추가합니다.

#add_rnd_user.ldif
# 그룹 객체 생성
dn: cn=johndoe,ou=RnD,ou=AI,dc=example,dc=com
objectClass: top
objectClass: posixGroup
cn: johndoe
gidNumber: 5001

# 사용자 객체 생성
dn: uid=johndoe,ou=RnD,ou=AI,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: John Doe
sn: Doe
uid: johndoe
uidNumber: 10001
gidNumber: 5001
homeDirectory: /home/johndoe
loginShell: /bin/bash
userPassword: {SSHA}PASSWORD_HASH
mail: johndoe@example.com

 

ldif 파일을 ldap 서버에 적용시킵니다.

sudo ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f add_rnd_user.ldif

 

 

 

잘 적용되었는지 확인해 봅시다.

ldapsearch -x -LLL -b "dc=example,dc=com" "(objectClass=*)"

 

 

새로운 사용자가 생길때마다 add_user를 진행하면 되고 HASH값을 받아서 직접 사용자 계정을 생성해도 되지만 기본 비밀번호로 생성하고 사용자에게 직접 변경하도록 합니다.

 

사용자가 자신의 비밀번호를 변경하려면 아래처럼 작성합니다.

ldappasswd -x -D "uid=username,ou=users,dc=example,dc=com" -W

 

 

조직의 구조를 나누고 여기에 따른 각각의 권한을 가지도록 할 수도 있습니다. (나중에 추가)


LDAP 서버에서의 설정은 끝났습니다. 이제 이 설정을 적용할 LDAP 클라이언트 서버에서 이어서 작업합니다.


 

5. LDAP 클라이언트 설정

이 설정은 모든 클라이언트에서 각각 진행합니다.

 

LDAP 클라이언트 서버에서 libnss-ldaplibpam-ldap 패키지를 설치합니다:

sudo apt-get install -y libnss-ldap libpam-ldap ldap-utils nscd

 

이후에 파일을 수정해도 되지만, 설치 과정에서 나오는 ldap 주소 등을 정확하게 입력하면 수고를 줄일 수 있습니다.

 

nscd를 데몬으로 실행합니다.

sudo systemctl enable nscd
sudo systemctl start nscd

 

환경 설정 -

클라이언트에서 처음 로그인 한다면 홈 폴더가 없기 때문에 생성하는 설정을 추가합니다. 

#/etc/pam.d/common-session
session optional pam_mkhomedir.so skel=/etc/skel umask=0077

계정이 있는지 ldap에서 확인하는 작업을 추가합니ㅏㄷ.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files systemd ldap
group:          files systemd ldap
shadow:         files ldap
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

 

먼저 로컬 계정이 있는지 확인하고 없으면 ldap를 확인하는 설정입니다.

 

 

 

설정이 잘 적용되었다면 아래 명령어로 호스트에서 가져온 정보가 포함되어있는지 확인합니다.

getent passwd
getent group
반응형

'Computer Science > linux' 카테고리의 다른 글

Docker 사용하기  (0) 2024.09.15
Slurm 설치  (0) 2024.06.05
Docker와 MariaDB연결하기  (0) 2022.08.24
centos 8에 slurm 설치하기  (0) 2022.05.11
conda 채널 추가  (0) 2022.02.22
반응형

Docker에서 MariaDB컨테이너 띄우기.

 

1. MariaDB 저장용 Volumne 컨테이너 만들기

Docker create -it -v /var/lib/mysql --name maria_vol busybox

MariaDB의 데이터베이스 저장은 /var/lib/mysql 아래에 저장되는데 Host 데이터와 직접 연결하는 것은 안정적이지 않기 때문에 volumn 컨테이너를 새롭게 만들어서 붙인다.

 

2. MariaDB 이미지 생성

docker pull mariadb

 

3. MariaDB run

docker run -d --name mymaria --volumes-from maria_vol -e MYSQL_ROOT_PASSWORD=1111 -p 3306:3306 mariadb

mymaria 라는 이름의 컨테이너를 생성했다.

 

이 컨테이너 안에서 데이터를 관리하면 된다!

반응형

'Computer Science > linux' 카테고리의 다른 글

Slurm 설치  (0) 2024.06.05
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
centos 8에 slurm 설치하기  (0) 2022.05.11
conda 채널 추가  (0) 2022.02.22
conda proxy 에러 해결방법  (0) 2022.02.07
반응형

 

#2022-05-27 재작성

single node 기준. (서버와 노드가 하나의 컴퓨터)

 

 

slurm, munge 데몬 설치.

sudo dnf install slurm slurm-slurmd slurm-slurmctld munge

slurm 계정 및 그룹 생성. 

groupadd -g 900 slurm
useradd  -m -c "SLURM workload manager" -d /var/lib/slurm -u 900 -g slurm -s /sbin/nologin slurm

sudo chown slurm:slurm -R /var/spool/slurm/

munge key 생성

sudo /usr/sbin/create-munge-key -r

필요에 따라 conf 파일을 수정해야함. 위치는 /etc/slurm/slurm.conf

SlurmUser=slurm
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdLogFile=/var/log/slurmd.log

로그 파일의 수정 권한을 SlurmUser가 가지고 있어야함.

 

foreground에서 slurmctld 데몬 실행해서 에러가 나오는지 확인.

sudo slurmctld -D

 

정상적으로 작동되는지 확인.

sudo systemctl start slurmctld
sudo systemctl enable slurmctld
sudo systemctl status slurmctld
반응형

'Computer Science > linux' 카테고리의 다른 글

사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17
Docker와 MariaDB연결하기  (0) 2022.08.24
conda 채널 추가  (0) 2022.02.22
conda proxy 에러 해결방법  (0) 2022.02.07
Jupyter notebook 설정  (0) 2020.11.03
반응형

conda 설치 후 채널을 추가해야 최신 버전의 프로그램을 갱신해서 쓸 수 있다.

 

conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge

 

반응형

'Computer Science > linux' 카테고리의 다른 글

Docker와 MariaDB연결하기  (0) 2022.08.24
centos 8에 slurm 설치하기  (0) 2022.05.11
conda proxy 에러 해결방법  (0) 2022.02.07
Jupyter notebook 설정  (0) 2020.11.03
Centos yum repo 변경  (0) 2020.08.03
반응형

anaconda의 버전 업데이트 후 아래와 같은 에러 발생

Collecting package metadata (current_repodata.json): failed

ProxyError: Conda cannot proceed due to an error in your proxy configuration.
Check for typos and other configuration errors in any '.netrc' file in your home directory,
any environment variables ending in '_PROXY', and any other system-wide proxy
configuration settings.

 

https://github.com/conda/conda/issues/9497 페이지에서 확인해보니 urllib3 의 버전 변경으로 인한 문제로 보임.

 

conda config --set ssl_verify False

위 명령어를 작성하면 .condarc 파일이 home directory 밑에 생성되는데 파일을 아래와 같이 수정한다

 

ssl_verify: False
proxy_servers:
  https: http://[PROXY]:[PORT]/

 

https: https: 에서 https: http로의 변경.

반응형

'Computer Science > linux' 카테고리의 다른 글

centos 8에 slurm 설치하기  (0) 2022.05.11
conda 채널 추가  (0) 2022.02.22
Jupyter notebook 설정  (0) 2020.11.03
Centos yum repo 변경  (0) 2020.08.03
github로 스크립트 관리하기 AtoZ  (0) 2020.07.29

+ Recent posts