Archive

Docker - 설치 및 기본 명령어

|

Docker - 설치 및 기본 명령어


1. Docker 설치 [리눅스용]

  • AWS EC2 ubuntu 20.04를 기준으로 한다
  • 최신 패키지와 리스트 업데이트를 진행한다 sudo apt update
  • https 관련 패키지를 설치한다 sudo apt install apt-transport-https ca-certificates curl software-properties-common
  • docker repo 접근을 위한 GPG key 설정을 한다 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • docer repo 등록 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
  • sudo apt update로 docker repo까지 포함하여 최신 패키지 리스트 업데이트
  • docker 설치 sudo apt install docker-ce
  • docker 실행 확인 sudo systemctl status docker

  • 매번 sudo를 사용하면 귀찮으므로 docker group에 포함시킨다
  • 현 사용자(ubuntu) ID를 docker group 그룹에 포함 sudo usermod -aG docker ${USER}
  • 터미널 재접속
  • 현재 로그인된 ID가 docker group에 포함되어있는지 확인 id -nG
  • docker 그룹에 포함되어 있다면, sudo 없이 docker 명령어 사용이 가능하다

  • docker-compose 설치

    sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  • 위 1.28.2는 강의와 같은 환경을 위해 설정하였지만 최신버전은 docker compose늬 릴리즈노트를 보고 바꾸면 된다

  • 실행 권한 주기 sudo chmod +x /usr/local/bin/docker-compose

  • docker 버전 확인으로 설치가 잘 되었는지 확인 docker-compose --version


2. Docker 주요 명령어

  • sudo systemctl status docker : docker 실행중인지 확인

  • docker login : cli 사용을 위해 로그인 필요

  • docker search {검색명}:[태그명] : docker hub에서 image 검색
    • --limit=5 : 검색 결과를 5개로 추려서
    • [OFFICIAL] : 공식 이미지
    • 태그명 안붙이면 default로 :latest가 된다
  • docker pull {이미지명} : 해당 이미지를 다운로드

  • docker images : 다운로드 받은 이미지 리스트를 출력
    • -q : 리스트 중 IMAGE ID만 추려서 출력
  • docker image rm {이미지:태그} : 다운로드 받은 이미지 삭제
    • {IMAGE ID} 로도 삭제 가능, 겹치지 않는 앞부분만 적어도 됨
    • docker rmi 도 동일한 기능
  • docker create {이미지명} : 이미지로 컨테이너 생성
    • 이미지는 컨테이너로 생성해야 실행이 가능하다
    • –name {컨테이너이명} : 컨테이너명을 주고 컨테이너 생성
  • docker ps : 현재 실행중인 컨테이너 리스트 출력
    • -a : 실행중이지 않은 리스트까지 포함해서 출력
    • -q : 컨테이너 아이디만 출력
    • 하나의 이미지로 여러 컨테이너 생성 가능
  • docker rm {컨테이너명 or 컨테이너 ID} : 컨테이너 삭제
    • 이미지명을 적지 않도록 주의
  • docker start {컨테이너명} : 컨테이너 시작

  • docker run : 우분투 자체만 컨테이너를 만들 경우, 터미널 및 입력을 연결해주어야함

    • 우분투 컨테이너의 입력을 가상 터미널에 할당해주어, PC 상에서의 입력이 우분투 컨테이너 입력에 들어갈 수 있게 해줌

    • 우분투 컨테이너의 bash 쉘은 입력을 받을 수 있는 상태로, 종료되지 않고 실행중 상태가 됨

    • -i : 컨테이너 입력을 열어놓는 옵션

    • -t : 가상 터미널을 할당하는 옵션 (주로 -it 옵션 같이 사용)

    • --name : 컨테이너 이름을 설정하는 옵션

    • -d : 컨테이널르 백그라운드에서 실행하는 옵션

    • --rm : 컨테이너 종료 시 컨테이너를 자동으로 삭제하는 옵션

    • -p : 호스트와 컨테이너 포트를 연결하는 옵션

      • docker를 실행한 PC를 Host PC라고 한다

      • apache, nginx 등 웹서버 컨테이너 실행 시, Private IP가 할당되어 외부에서 접근이 불가능하다 (172.17.0.0 ~ 172.17.255.255)
      • 호스트 PC IP에 특정 port로 접근 시, 해당 port를 docker 컨테이너의 특정 Private IP의 특정 port로 변환해주는 것을 NAPT(Network Address Port Translation)라 하고 도커의 내부적인 기능이다
      • docker run -d -p 9999:80 --name mywebserver httpd Host PC의 9999 포트로 접속하면, 이를 mywebserver 컨테이너의 80 포트로 포트워딩을 해준다는 의미
    • -v : 호스트와 컨테이너 디렉토리를 연결하는 옵션

    • -it 옵션의 의미 :

      • pseudo tty(teletypewriter) : 리눅스에서 콘솔, 터미널을 의미
      • tty를 통해 리눅스에 키보드 입력을 전달할 수 있으며, 두번째 tty부터 가상의 tty라고 한다
      • docker 컨테이너에 표준 입력을 열어놓고, pseudo tty를 만들어 표준 입력을 pseudo tty에 연결
      • 따라서, 키보드 입력을 pseudo tty를 통해, 컨테이너의 표준 입력으로 전달할 수 있도록 해준다
    • pull + create + start를 run 명령어로 한방에 해결 가능

  • docker stop {ID 혹은 name} : 해당 컨테이너 종료 / restart로 재시작

  • docker pause {ID 혹은 name} : 해당 컨테이너 일시정지 / unpause로 일시정지 해제

  • docker system df : 사용하고 있는 이미지, 컨테이너 등 저장매체 현황 확인

    • ubuntu는 크기가 커서 초경량 시스템을 위한 리눅스 패키지인 alpine 태그가 붙은 이미지를 사용한다
    • ex) docker run httpd:alpine
  • docker container stats : 실행중인 컨테이너의 리소스 사용현황을 확인

  • docker exec {name} /bin/bash : 외부에서 컨테이너 진입 시 사용

    • alpine의 경우 /bin/sh
    • 터미널 여러개 키고 작업 시 사용하면 편리하며 attach로 접근하면 기존 실행한 터미널의 컨테이너는 꺼진다
  • docker attach {ID 혹은 name} : 백그라운드로 실행한다면 쉘 입력이 불가능하기 때문에 명령어로 해당 컨테이너에 연결하여 입력이 가능하도록 한다

  • docker stop $(docker ps -a -q) : 모든 컨테이너 중지

  • docker rm $(docker ps -a -q) : 모든 컨테이너 삭제

  • docker rmi -f $(docker images -q) : 모든 이미지 삭제



참고자료


인프런 - 풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]