DOCKER란?

92·2023년 1월 25일
0

DOCKER

목록 보기
1/4
post-thumbnail

0. 도커 설명

A. VM vs Docker

기존의 가상화 방식은 주로 OS를 가상화 하는 것

  • 우리에게 익숙한 VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다.
  • 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우 OS) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용이 힘들다는 단점이 있습니다.
  • 이를 개선하기 위해 프로세스를 격리 하는 방식이 등장하였고, 이 방식을 리눅스에서는 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다.
  • CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없다는 점을 장점으로 생각할 수 있습니다.

B. 이미지란?

도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념

  • 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.(Immutable).
  • 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장한다.
  • 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남는다.

C. 장점?

  • 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없습니다.
  • 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 되므로, 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버에도 가능합니다.
    → 수십, 수백, 수천대의 서버에 관리를 위해 쿠버네티스가 등장했습니다.

1. 설치

1.1 맥에서 설치 하는 과정
Install Docker on MAC
1.2 도커 명령어 정리 참고 글
docker 설치 및 관리(명령어)

A. Docker install (ubuntu 18.04 LTS)

  • 도커 사전설치

    # 시스템 최신으로 업데이트
    sudo apt update
    # 사전 설치
    sudo apt install apt-transport-https ca-certificates curl software-properties-common
  • 레퍼지토리 키 추가

    # Docker repository key add
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    # Docker repository add
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
  • 도커 설치

    # Docker 설치
    sudo apt install docker-ce
    # 버전 확인
    sudo docker version
  • 도커 설치 확인

    sudo systemctl start docker    ### docker 시작
    sudo systemctl stop docker     ### docker 종료 
    sudo systemctl status docker   ### docker 상태 확인

B. Docker Install(Centos)

  • 도커 설치
    >> yum -y update
    >> yum -y install docker docker-registry
    >> docker -v
  • 도커 서비스 실행
    >> sudo systemctl start docker
    >> sudo systemctl enable docker
    >> sudo systemctl status docker
  • 도커 생성 및 실행
    docker exec -it {image Name} /bin/bash

2. Docker 명령어

  • 참조 사이트 : https://gptjs409.github.io/infra/2019/11/02/docker-container-command.html

  • image pull

    docker pull [이미지 이름]
    #docker pull [image]  : 이미지 다운로드
  • image 확인

    docker images : '다운된 이미지 목록 확인'
  • Container Bash 접속

    docker exec -it {container ID} /bin/bash

    -it : interactive terminal 모드

    -it는 익숙하지만 -itu 0를 사용할때도 있습니다.
    ex. docker exec -itu 0 {컨테이너 이름} bash

    • u 0 는 sudo 권한을 컨테이너 내에서 사용할 수 있게 하는 설정입니다.
    • sudo 권한을 요구하는 과정이 많을 경우, 편의를 위해 꼭 sudo 권한을 사용할 수 있도록 설정할 수 있습니다.

    container 무중단으로 빠져나오기 → CTRL + P,Q

  • 컨네이너 실행/중지

    docker start [컨테이너 이름(ID)] : 컨테이너 실행
    docker stop [컨테이너 이름(ID)] : 컨테이너 중지
  • 컨테이너 확인

    # 실행 중
    docker ps
    # 종료된 컨테이너까지 확인 (all)
    docker ps -a 
    # 컨테이너 ID만 확인
    docker ps -q
    # 컨테이너 한번에 끄기
    docker stop $(docker ps -a -q)
  • 컨테이너 생성/접속

    docker run [image] : 컨테이너 생성 & 접속 
    # -it : 터미널 입력을 위한 옵션 + 컨테이너 안의 /bin/bash 실행
    _______________________________________________________
    자주 쓰는 옵션 docker run -p <host 포트 번호>:<컨테이너 포트 번호> -it --name [컨테이너 이름] [image] /bin/bash
    
    1. -i → interactive 사용자가 입출력을 할수 있는 상태
    2. -t → sudo ott 가상터미널 환경 에물레이션
    3. -d → 백그라운드 실행
    4. --name → 실행할때의 이름 설정
    5. -v → /bin/bash → 메인 실행 파일을 지정(컨테이너 실행 파일 지정) 
    
    EX) **docker run -i -t ubuntu:14.04 /bin/bash**
        호스트의 8080포트로 유입되는 트래픽은 컨테이너 내의 80번으로 유입
  • attach 와 run의 차이?

    docker attach [컨테이너 이름(ID)] : 실행중인 컨테이너 접속
    
    #docker start를 사용하고 bash로 접근하려면 
    : docker attach [docker image name]으로 bash에 접근한다.
    #ctrl + p, q bash를 빠져 나오는 명령어 
    #→ docker는 유지한채 빠져 나오는 명령어(shell bash 단축키)
    

    → start 와 run의 차이는 직접 들어가서 실행을 하느냐와 그냥 해당 파일만 실행시키느냐의 차이 정도 입니다.

    💡 run = pull + create + start
    run은 해당 이미지를 pull, 컨테이너를 create, start 명령을 함축한다고 생각하면 쉽습니다.

  • exec

    # 컨테이너에 특정 명령 실행
    docker exec [옵션] [컨테이너 이름(ID)] [명령] 
    # > 특정 명령 실행을 위한 명령어지만 접속도 가능
    _____________________________________________________
    EX) docker exec -it [컨테이너 이름(ID)] /bin/bash
    exec (docker exec [something]) : 해당 컨테이너의 bash, sh 실행
  • 이미지 생성

    docker commit [컨테이너 이름(ID)] [저장소이름]/[이미지 이름]:[태그] - 컨테이너 이미지화
    
    [옵션]
     -a, --author=””: 이미지를 생성한 사람의 정보를 설정
     -m, --message=””: 변경 사항에 대한 로그 메시지를 설정
     -p, --pause=true: 이미지를 생성하는 동안 컨테이너를 일시 정지
  • 컨테이너 삭제

    # stop 후 삭제할 것
    docker rm {컨테이너 ID}
    docker rm {이미지 ID}
  • 컨테이너 권한 주기

    sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
    sudo usermod -aG docker MEME # MEME 사용자에게 권한주기
  • docker Container 실행 (PORT, Volume 추가)

    docker run --name [container Name] \# 컨테이너 이름 설정
    -p 8899:8899 # 포트포워딩 설정 8899 -> 8899 -it \
    -v [OS SHARE PATH]:[DOCKER PATH][Image Name]# 볼륨설정
  • Docker inspect

    docker inspect {container Name}
    # -> docker file의 저장된 경로를 알 수 있음
    # var/lib/docker/overlay2/...
  • Docker cp(복사)

    # Container -> local
    docker cp gpu_test:/tf/data/ ~/data/
    # local -> Container
    docker cp ~/data/solution.txt gpu_test:/tf/data/
profile
{ "ME" : "DataEngineer, DataAnalyst" }

0개의 댓글