Docker 명령어

권유진·2023년 1월 12일
0

Docker

목록 보기
2/2

Docker 명령어

컨테이너 실행

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  • 자주 사용하는 옵션
    • -d: detached mode (백그라운드 모드)
    • -p: 호스트와 컨테이너의 포트를 연결 (포워딩)
    • -v: 호스트와 디렉토리를 연결 (마운트)
    • -e: 컨테이너 내에서 사용할 환경변수 설정
    • -name: 컨테이너 이름 설정
    • -rm: 프로세스 종료 시 컨테이너 자동 제거
    • -it: -i-t를 동시에 사용한 것 (터미널 입력을 위한 옵션)
      • -i: 컨테이너의 입출력을 키보드와 화면을 통해 연결
      • -t: 텍스트 기반 터미널 실행
    • -link: 컨테이너 연결 [컨테이너명:별칭]
  • run 명령어 사용 시, 사용할 이미지가 저장되어 있는 지 확인하고 없으면 다운로드 한 후 컨테이너를 생성하고 시작
    • docker run ubuntu:16.04
    • ubuntu 16.04 컨테이너 생성
    • 위 코드의 경우 무엇을 수행할 지를 전달하지 않아 컨테이너가 생성되자마자 종료
  • /bin/bash 명령어를 입력해 컨테이너 실행
    • docker run --rm -it ubuntu:16.04 /bin/bash
    • 컨테이너 내부에 들어가기 위해 bash 쉘을 실행하고 키보드 입력을 위해 -it 옵션 부여
    • 프로세스가 종료되면 컨테이너가 자동 삭제되도록 --rm 옵션 추가
    • 이후에 exit 로 bash 쉘 및 컨테이너 동시에 종료 가능
  • redis container: redis는 메모리 기반의 다양한 기능을 가진 스토리지
    • docker run -d -p 1234:6379 redis
    • -d: 백그라운드 모드로 실행
    • -p: 포트 지정
      • 호스트 포트(1234)를 컨테이너 포트(6379)로 연결
      • localhost의 1234 포트로 접속하면 redis 사용 가능
  • MySQL container
    • docker run -d -p 3306:3306 \
          -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
          --name mysql \
          mysql:5.7
    • -e: 환경변수 설정
    • --name: 컨테이너 이름 지정 (지정하지 않을 시, 랜덤 생성됨)
  • tensorflow
    • docker run -d -p 8888:8888 -p 6006:6006 teamlab/pydata-tensorflow:0.1
    • 위 이미지는 python, numpy, scipy, pandas, jupyter, sklearn, gensim, BeautifulSoup4, tensorflow가 설치되어 있음

기본 명령어

  • 컨테이너 목록 확인
    • docker ps [OPTIONS]
    • -a 옵션 추가 시, 실행했다가 종료한 컨테이너도 보임
  • 컨테이너 중지
    • docker stop [OPTIONS] CONTAINER [CONTAINER...]
    • 컨테이너 중지 (여러 개를 중지 희망 시, 띄어쓰기로 구분하여 입력)
    • container의 ID를 입력해야 하지만, 앞부분의 일부만 입력해도 됨 (겹치지 않는다면)
  • 컨테이너 제거
    • docker rm [OPTIONS] CONTAINER [CONTAINER ...]
  • 중지된 컨테이너 ID를 가져와 한번에 삭제하는 방법
    • docker rm -v $(docker ps -a -q -f status=exited)
  • 이미지 목록 확인
    • docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 이미지 다운로드
    • docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    • docker pull ubuntu:14.04
    • pull은 최신버전으로 다시 다운로드
  • 이미지 삭제
    • docker rmi [OPTIONS] IMAGE [IMAGE...]
    • images 명령어를 통해 얻은 이미지 ID를 입력하면 삭제됨
    • 컨테이너가 실행 중인 이미지는 삭제되지 않음

컨테이너 둘러보기

  • 컨테이너 로그 보기
    • docker logs [OPTIONS] CONTAINER
    • 아무 옵션을 주지 않을 경우 전체 로그를 전부 출력
      • --tail 옵션 부여 시, 마지막 10줄만 출력
      • -f 옵션 사용 시, 실시간으로 로그 생성되는 것 확인
    • 도커는 로그를 표준 스트림 중 stdout, stderr 를 수집
      • 따라서, 컨테이너에서 실행되는 프로그램의 로그 설정을 표준 출력으로 바꿔야 함
  • 컨테이너 명령어 실행
    • docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    • run은 컨테이너를 새로 만들어서 실행
    • exec은 실행 중인 컨테이너에 명령어를 내림
  • 컨테이너 이름 변경
    • docker rename [OLD NAME] [NEW NAME]
  • 종료 상태의 컨테이너 시작
    • docker start [CONTAINER]
  • 컨테이너 접속
    • docker attach [CONTAINER]
  • 컨테이너 내부로 외부 파일 복사
    • docker cp [FILE NAME] [CONTAINER]:[PATH]
  • 컨테이너 파일로 백업
    • docker export [CONTAINER] > [FILE NAME].tar
  • 컨테이너 로드
    • docker import [FILE NAME] [IMAGE NAME]:[TAG NAME]

컨테이너 업데이트

  • 컨테이너 업데이트 과정
    1. 새 버전의 이미지 다운(pull)
    2. 기존 컨테이너 삭제(stop, rm)
    3. 새 컨테이너 실행(run)
  • 기존 컨테이너 삭제 시, 컨테이너에서 생성된 파일이 모두 사라짐
    • 이를 방지하기 위해서는 외부 스토리지에 저장해야 함
    • 또는 데이터 볼륨을 컨테이너에 추가해 사용해야 함
      • 해당 디렉토리는 컨테이너와 별도로 저장
      • 컨테이너를 삭제해도 데이터가 지워지지 않음

호스트 디렉토리 마운트

  • docker run -d -p 3306:3306 \
    	-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
        --name mysql \
        -v /my/own/datadir:/var/lib/mysql # 이 부분이 데이터 볼륨 설정하는 부분
        mysql:5.7
  • 호스트의 /my/own/datadir 를 컨테이너의 /var/lib/mysql 디렉토리로 마운트
    • 모든 파일은 호스트의 /my/own/datadir 디렉토리에 저장
    • 컨테이너 업데이트 후, 이 폴더에 다시 마운트하면 그대로 데이터 사용 가능
  • 호스트의 디렉토리를 특정 프로그램이 설치된 컨테이너의 디렉토리에 마운트
    • 그대로 명령어 실행 시, 로컬에 개발 환경을 구축하지 않고 도커 컨테이너를 개발환경으로 사용 가능

Docker Compose

  • 컨테이너 조합이 많아지고 여러 설정이 추가되면 명령어가 금방 복잡해짐
  • 이를 쉽게 관리하기 위해 YAML 방식의 설정파일을 이용해 Docker Compose 툴 제공

이미지 생성

docker build [OPTIONS] PATH | URL | -
  • -t: 생성할 이미지 이름을 지정하는 옵션
  • PATH에 Dockerfile을 만든 디렉토리 입력

Reference

  1. 초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기
  2. 초보를 위한 도커 안내서 - 이미지 만들고 배포하기
profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글