도커 컴포즈 (2)
포스트
취소

도커 컴포즈 (2)

파일 권한 조작

  • 파일 권한은 chmod 로 바꿀 수 있고, 숫자 방식과 문자 방식이 있음
    • chmod {numcode} {filename}
    • chmod [대상][연산자][권한] 파일
      • 대상: u(소유자), g(그룹), o(기타), a(모두)
      • 연산자: +(추가), (제거), =(설정)
      • 권한: r(읽기), w(쓰기), x(실행)
  • chown {소유자} {파일} : 소유자 변경
    • chown {소유자}:{그룹} {파일} : 소유자와 그룹 동시 변경 가능
  • chgrp {그룹} {파일} : 그룹만 변경
  • -R 로 재귀 변경 가능

압축과 아카이브

  • tar 명령어 기본

    옵션의미설명
    cCreate새 아카이브 생성
    xExtract아카이브에서 파일 풀기
    tList아카이브 내용 목록 보기
    zgzipgzip으로 압축/해제
    jbzip2bzip2로 압축/해제 (더 높은 압축률)
    fFile아카이브 파일명 지정 (필수)
    vVerbose처리 중인 파일명 표시
    -CDirectory풀기 대상 디렉토리 지정
  • 압축 안하고 뭉치기만 하기

    1
    2
    
    # 아카이브만 생성 (c: create, f: file)
    tar cf /factory/backup/factory-backup.tar /factory/line-A/
    
  • 압축도 하기

    1
    2
    
    # 아카이브 + gzip 압축 (czf: create, gzip, file)
    tar czf /factory/backup/factory-backup.tar.gz /factory/line-A/
    
  • 파일명 바꿔주기

    1
    2
    
    # 오늘 날짜를 파일명에 포함하여 백업
    tar czf /factory/backup/sensors-$(date +%Y%m%d).tar.gz /factory/line-A/sensors/
    
  • 압축 풀지 말고 구경만 하기

    1
    2
    
    # 아카이브 안에 뭐가 있는지 확인 (t: list)
    tar tf /factory/backup/sensors-$(date +%Y%m%d).tar.gz
    
  • 압축 풀기

    1
    2
    3
    4
    5
    
    # 복원 테스트 디렉토리 만들기
    mkdir -p /tmp/restore-test/
    
    # 지정 디렉토리에 풀기 (x: extract, -C: 대상 디렉토리)
    tar xzf /factory/backup/sensors-$(date +%Y%m%d).tar.gz -C /tmp/restore-test/
    
  • gzip만 써도 됨

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    # CSV 파일 하나를 gzip으로 압축
    cp /factory/line-A/sensors/temp-data.csv /tmp/temp-data.csv
    ls -lh /tmp/temp-data.csv
    
    # gzip 압축 (원본이 .gz로 대체됨!)
    gzip /tmp/temp-data.csv
    ls -lh /tmp/temp-data.csv.gz
    
    # 압축 해제 (원본으로 복원)
    gunzip /tmp/temp-data.csv.gz
    ls -lh /tmp/temp-data.csv
    
  • zip도 있어

    • 압축률이 조금 떨어지는 대신 윈도우에서 익숙하게 쓰던 그거임
    • 리눅스 권한은 보존되지 않을 수 있음
    • 부분 압축해제 가능
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # zip 설치 (컨테이너에 없을 수 있음)
    apt update && apt install -y zip unzip
    
    # zip으로 압축
    zip -r /factory/backup/factory-lineA.zip /factory/line-A/
    
    # 크기 비교: tar.gz vs zip
    ls -lh /factory/backup/factory-backup.tar.gz
    ls -lh /factory/backup/factory-lineA.zip
    

패키지 관리

  • apt 핵심 명령어

    명령어역할비유
    apt update패키지 목록 갱신앱스토어 새로고침
    apt install 패키지패키지 설치앱 다운로드 및 설치
    apt remove 패키지패키지 삭제앱 삭제
    apt autoremove불필요한 의존성 정리앱 캐시/잔여 파일 정리
    apt search 키워드패키지 검색앱스토어에서 검색
    apt show 패키지패키지 상세 정보앱 설명 보기
    apt list --installed설치된 패키지 목록설치된 앱 목록 보기
  • 이것저것 설치하기: apt install -y curl wget net-tools jq tree htop

    도구역할공장에서의 활용
    curlHTTP 요청 보내기REST API 호출, 센서 API 테스트
    wget파일 다운로드업데이트 파일, 펌웨어 다운로드
    net-tools네트워크 진단설비 네트워크 상태 확인
    jqJSON 처리센서 JSON 데이터 파싱
    tree디렉토리 구조 보기프로젝트 구조 파악
    htop시스템 모니터링서버 CPU/메모리 사용량 확인
  • curl로 외부 API 호출, 출력은 깔끔한 JSON으로 나온다

    1
    2
    
    # curl로 테스트 API 호출 (-s: silent 모드)
    curl -s https://httpbin.org/get | jq .
    
  • 디렉토리 구조 예쁘게 보기. 함 해보세요 딱 익숙한 그 모양 나옴

    1
    
    tree {폴더} -L 2
    
  • htop : 시스템 리소스 모니터링. 윈도우 작업 관리자 같은 거임.
  • 지금 열린 포트 확인

    1
    2
    
    # 열린 포트 확인 (-t: TCP, -l: listening, -n: 숫자 표시, -p: 프로세스)
    netstat -tlnp
    
  • 패키지 검색, 정보 보기

    1
    2
    3
    4
    5
    
    # MQTT 관련 패키지 검색
    apt search mqtt
    
    # 패키지 상세 정보 보기
    apt show curl
    
  • 패키지 삭제 후 정리

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # htop 삭제
    apt remove -y htop
    
    # 불필요한 의존성 정리
    apt autoremove -y
    
    # htop이 삭제되었는지 확인
    htop
    # bash: htop: command not found 나오면 삭제된거임
    

다양한 설치 방법

  • curl로 다운로드하기

    1
    2
    3
    4
    5
    6
    7
    
    # -f: 실패 시 에러 반환
    # -s: 진행 상황 숨기기
    # -S: 에러는 표시
    # -L: 리다이렉트 따라가기
    # -o: 저장할 파일명 지정
    curl -fsSL {from_url} -o {to_filename}
    ls -la {to_filename}
    
  • wget으로 똑같은 거 하기

    1
    2
    
    wget {from_url} -O {to_filename}
    ls -la {to_filename}
    
  • python 쓰기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    # Python과 pip 설치
    apt install -y python3 python3-pip
    
    # MQTT 클라이언트 설치 (스마트팩토리 핵심)
    pip3 install paho-mqtt --break-system-packages
    python3 -c "import paho.mqtt.client; print('MQTT 라이브러리 설치 성공')"
    
    # 시계열 DB 클라이언트 설치
    pip3 install influxdb-client --break-system-packages
    python3 -c "import influxdb_client; print('InfluxDB 클라이언트 설치 성공')"
    
  • node 설치

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # Node.js와 npm 설치
    apt install -y nodejs npm
    node --version
    npm --version
    
    # PM2 프로세스 매니저 설치 (전역)
    # -g: 전역(global) 설치 — 어디서든 사용 가능
    npm install -g pm2
    pm2 --version
    
  • 빌드 도구 설치

    1
    2
    3
    
    # build-essential = gcc, g++, make 등 컴파일에 필요한 도구 모음
    apt install -y build-essential
    gcc --version
    

프로세스 관리

  • ps aux : 전체 프로세스 목록 보기

    260427-HAE-2-docker-2.png

    • grep 연계하여 검색 가능

      1
      2
      3
      4
      5
      
      # bash 프로세스만 찾기
      ps aux | grep bash
      
      # python 프로세스만 찾기
      ps aux | grep python
      
  • 명령어 끝에 & 를 붙이면 백그라운드로 실행되어 터미널을 점유하지 않음
  • jobs 로 지금 실행중인 백그라운드 작업들을 확인할 수 있음
  • 실시간 업데이트 tail

    1
    2
    
    # -f: follow 모드 — 새 내용이 추가되면 실시간으로 표시
    tail -f /factory/sensor-live.log
    
  • top : 실시간 작업관리자. q를 눌러 종료.
  • 특정 프로세스 종료하기

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 먼저 PID 확인
    ps aux | grep sensor-sim | grep -v grep
    
    # PID로 종료 (SIGTERM — 정상 종료 요청)
    kill PID번호
    
    # 프로세스가 안 죽으면 강제 종료 (SIGKILL)
    kill -9 PID번호
    
  • 터미널 종료해도 일은 계속 하기

    1
    2
    3
    4
    
    # nohup: 터미널이 닫혀도 프로세스 유지
    # > /dev/null 2>&1: 출력 버리기
    # &: 백그라운드 실행
    nohup /factory/sensor-sim.sh > /dev/null 2>&1 &
    

네트워크 기초

  • ip addr show : 컨테이너의 IP 주소 확인
  • ip route : 라우팅 확인
  • cat /etc/resolv.conf : DNS 설정 확인
  • 외부 네트워크 연결 테스트

    1
    2
    
    # 구글에 3번만 ping
    ping -c 3 google.com
    
  • HTTP 요청 자세히 보기

    1
    2
    
    # -v: verbose 모드 — 요청/응답 헤더까지 모두 표시
    curl -v http://httpbin.org/get
    
  • JSON 응답 파싱 (jq 활용)

    1
    2
    3
    4
    
    # -s: silent 모드 (진행 표시 숨기기)
    # jq가 설치되어 있어야 합니다 (Lesson 16에서 설치했다면 OK)
    apt install -y jq 2>/dev/null
    curl -s http://httpbin.org/headers | jq .
    
  • wget으로 curl이랑 똑같이 요청하기

    1
    2
    3
    
    # -q: quiet 모드
    # -O -: 파일 저장 대신 stdout으로 출력
    wget -q http://httpbin.org/get -O -
    
  • TCP 리스닝 포트 확인

    1
    2
    3
    4
    5
    
    # -t: TCP만
    # -l: 리스닝(대기 중) 상태만
    # -n: 포트 번호를 숫자로 표시
    # -p: 프로세스 정보 표시
    ss -tlnp
    
  • 호스트 이름 해석 확인

    1
    2
    3
    4
    5
    
    # /etc/hosts 파일 확인 — 로컬 DNS 역할
    cat /etc/hosts
    
    # hostname 확인
    hostname
    
  • curl로 API 요청 보내기

    1
    2
    3
    4
    5
    
    # 설비 상태 데이터를 POST로 전송하는 시뮬레이션
    curl -X POST http://httpbin.org/post \
      -H "Content-Type: application/json" \
      -d '{"equipment":"CNC-01","status":"running","temperature":72.5}' \
      -s | jq .
    
  • curl로 요청 보내서 응답 코드만 보기

    1
    2
    3
    4
    
    # -o /dev/null: 본문 버리기
    # -w "%{http_code}": 상태 코드만 출력
    curl -s -o /dev/null -w "%{http_code}" http://httpbin.org/get
    echo  # 줄바꿈
    

도커 허브가 뭔데요

  • 일단 레지스트리는 깃허브 같은 거임. 도커 이미지를 올려서 공유하는 곳. 레지스트리는 여러 종류가 있고, 기본적으로 쓰는 건 도커 허브.
  • 도커 허브에 올라온 이미지는 3종류로 나뉜다
    1. 도커 공식 이미지
    2. 검증된 퍼블리셔 이미지
    3. 아무나 올린 이미지
  • 도커 이미지 이름 포맷
    • [레지스트리]/[네임스페이스]/[리포지토리]:[태그]
  • 태그는 버전을 나타내긴 하는데, latest가 항상 최신이 아닐 수 있음. 사실 default에 더 가까운 의미임. 자동으로 갱신되지 않는다.
이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.

도커 컴포즈 (1)

웹 프로젝트