[Docker] 도커, 도커 데몬, run 옵션

Coastby·2022년 10월 14일
0

LIKELION Back-End School

목록 보기
40/61

🐳 Docker

  • ‘environment disparity’를 해결해 준다 : 다른 환경에서도 구동하게 할 수 있다.
  • 하나의 서버에서 각기 다른 환경의 컨테이너를 설정할 수 있고, 독립되어 있어서 모듈식 관리가 가능하다.
  • By 2022, more than 75% of global organizations will be running containerized applications in production, up from less than 30% today. (by Gartner)
  • Kubernetes : 컨테이너가 많은 경우에 융요함
    • 컨테이너로 작업할 때 자동화해야할 것들을 대신해줌
    • 새로운 버전 배포 : 업데이트할 때 자동으로 하나씩 웹사이트 다운없이 업데이트를 해줌.
    • 컨테이너 자동 모니터링 : 서버가 죽으면 자동으로 재시작을 해줌. 컨테이너가 많으면 유용함
    • 컨테이너 사이즈 조정 : 갑자기 유저량이 증가할 경우 쿠버테티스가 자동으로 컨테이너를 자동으로 만들어서 니즈에 맞춰서 컨테이너를 준비해줌. 유저가 줄어들면 컨테이너도 줄어들음

💡 도커 데몬

💡 도커 데몬이란
도커 엔진은 외부에서 API 입력을 받아 도커 엔진의 기능을 수행하는데, 도커 프로세스가 실행되어 서버로서 입력을 받을 준비가 된 상태를 도커 데몬이라 한다.

도커의 구조

  • 서버
    • 실제로 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체, dockered 프로세스
  • 클라이언트
    • 도커 데몬 API를 이용할 수 있도록 CLI(command line interface)를 제공하는 것

클라이언트과 도커 데몬이 동작하는 과정

  1. 사용자가 docker 명령어를 입력 #CLI
  2. 클라이언트는 /var/run/docker.sock 유닉스 소켓을 사용하여 도커 데몬에게 명령어를 전달
  3. 도커 데몬은 이 명령어를 파싱하고 명령어에 해당하는 작업을 수행
  4. 수행 결과를 도커 클라이언트에게 반환하고 사용자에게 결과를 출력

✏️ Docker run 옵션 종류

  • -i, --interactive
    • 표준 입력(stdin)을 활성화하며, 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다.
    • 보통 이 옵션을 사용하여 Bash 에 명령을 입력합니다.
  • -t, --tty
    • TTY 모드(pseudo-TTY)를 사용합니다.
    • Bash를 사용하려면 이 옵션을 설정해야 합니다.
    • 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만, 셸이 표시되지 않습니다.
  • -it
    • -i 옵션과 -t 옵션은 같이 쓰이는 경우가 매우 많은데요. 이 두 옵션은 컨테이너를 종료하지 않은채로, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용합니다.
    • 따라서, -it 옵션은 특히 컨테이너의 쉘(shell)이나 CLI 도구를 사용할 때 매우 유용하게 사용됩니다.
  • --name
    • 컨테이너 이름을 설정합니다.
  • -d, --detach
    • Detached 모드입니다.
    • 보통 데몬 모드라고 부르며, 컨테이너가 백그라운드로 실행됩니다.
  • -p, --publish
    • 호스트와 컨테이너의 포트를 연결합니다. (포트포워딩)
    • <호스트 포트>:<컨테이너 포트>
      • p 80:80
  • --privileged
    • 컨테이너 안에서 호스트의 리눅스 커널 기능(Capability)을 모두 사용합니다.
    • 호스트의 주요 자원에 접근할 수 있습니다.
  • --rm
    • 프로세스 종료시 컨테이너 자동 제거
  • --restart
    • 컨테이너 종료 시, 재시작 정책을 설정합니다.
      • -restart="always"
  • -v, --volume
    • 데이터 볼륨을 설정입니다.
    • 호스트와 컨테이너의 디렉토리를 연결하여, 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장합니다. (마운트)
  • -u, --user
    • 컨테이너가 실행될 리눅스 사용자 계정 이름 또는 UID를 설정합니다.
      • -user root
  • -e, --env
    • 컨테이너 내에서 사용할 환경 변수를 설정합니다.
    • 보통 설정 값이나 비밀번호를 전달할 때 사용합니다.
      • e GRANT_SUDO=yes
  • --link
    • 컨테이너끼리 연결합니다.
    • [컨테이너명 : 별칭]
      • -link="db:db"
  • -h, --hostname
    • 컨테이너의 호스트 이름을 설정합니다.
  • -w, --workdir
    • 컨테이너 안의 프로세스가 실행될 디렉터리를 설정합니다.
  • -a, --attach
    • 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 를 연결합니다.
  • -c, --cpu-shares
    • CPU 자원 분배 설정입니다.
    • 기본 값은 1024이며, 각 값은 상대적으로 적용됩니다.
  • -m, --memory
    • 메모리 한계를 설정합니다.
    • <숫자><단위> 형식이며 단위는 b, k, m, g 를 사용할 수 있습니다
      • -memory=”100000b”
  • --gpus
    • 컨테이너에서 호스트의 NVIDIA GPU 를 사용할 수 있도록 설정합니다.
      • 호스트는 NVIDIA GPU 가 장착 된 Linux 서버여야하며,
      • NVIDIA driver 가 설치되어 있어야하고,
      • docker 19.03.5 버전 이상이어야합니다.
    • GPU 모두 사용하기
      • -gpus all
    • GPU 지정해서 사용하기
      • -gpus ‘”device=0,1”’
  • --security-opt
    • SELinux, AppArmor 옵션을 설정합니다.
      • -security-opt=”label:level:TopSecret”

참고 : https://wooono.tistory.com/348

profile
훈이야 화이팅

0개의 댓글