본문 바로가기

Docker CLI 자주 사용되는 명령 (이전 완료)

자세한 사용법은 공식 문서에 자세히 나와있고, 여기서는 대략적인 사용법에 대해서만 다룬다.

공식 문서

 

Use the Docker command line

 

docs.docker.com

docker run 

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG…]


해당하는 이미지의 컨테이너 실행
이미지를 다운, 이미지의 컨테이너를 생성, 실행을 한번에 한다

  • -d : detached mode 백그라운드로 실행되게 한다
  • -p : 호스트와 컨테이너의 포트를 연결 (포워딩)
  • -v : 호스트와 컨테이너의 디렉토리를 연결
  • -e : 컨테이너 내에서 사용할 환경변수 설정
  • –name : 컨테이너 이름 설정
  • –rm : 프로세스 종료시 컨테이너 자동 제거
  • -it : -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 
    i, t 옵션 설명
  • –link : 컨테이너 연결 [컨테이너명:TAG]
    • 컨테이너간 통신시 사용된다 
      • cont1라는 이름의 컨테이너와, cont2라는 컨테이너간 통신을 하고자 한다면
      • cont2 컨테이너 실행시 --link cont1 옵션을 통해 cont1을 도메인 이름으로 사용이 가능하다.

예시

docker run -it --name jhubuntu -v /Users/kimjaehyeon/Documents/vol1:/appsdf:rw  ubuntu:16.04 /bin/bash
 
  • docker run : 컨테이너를 실행한다
  • -i : stdin 항시 대기
  • -t : tty 할당
    • -it : i 옵션과 t옵션은 컨테이너에 터미널입력을 위해 자주 같이 사용된다. 간단하게 터미널 입력을 위한 옵션이라 생각하면 된다.
  • —name jhubuntu : 컨테이너 이름은 jhubuntu로 하겠다
  • -v /Users/kimjaehyeon/Documents/vol1:/appsdf:rw
  • 로컬의 /Users/kimjaehyeon/Documents/vol1 디렉토리와 컨테이너의 /appsdf를 읽고 쓰기 모드로 마운트 하겠다 (ro : readOnly)즉 연결하겠다,
  • ubuntu:16.04 : 이미지는 ubuntu:16.04 버전으로 하겠다
  • /bin/bash : ubuntu 이미지 안의 /bin/bash를 실행하겠다 -> 이 부분이 명령 파라미터임 만약 이게 넘어가지 않으면 컨테이너에 내장된 CMD에서 default 명령을 실행함

docker attach 

docker attach <container>


실행중인 컨테이너에 로컬 표준 입력, 출력 및 오류 스트림 연결
이를 통해 명령이 터미널에서 직접 실행되는 것처럼 진행중인 출력을 보거나 대화식으로 제어할 수 있다. 

docker build 

docker build [OPTIONS] <Dockerfile Path>


Dockerfile 및 Docker 이미지를 빌드하는 명령이다

[OPTIONS]

  • -t : 이미지에 tag를 달 수 있다.
    [:TAG]를 지정하지 않으면 default 로 :latest가 된다. 
    사용법은 다음과 같다 : -t [username]/[repository][:TAG]
  • 유저 이름(올릴사람)을 지정하고/저장할 레파지토리(이미지 이름)과[TAG]를 설정한다.
    ex) `docker build -t jhkim/jhmariadb:v3 -> jhkim유저의 이름으로 jhmariadb 이미지를 v3 태그로 이미지를 만들겠다.
    한번에 한 repository(저장소) 가 아니라 여러 저장소에 태그하려면 -t 옵션을 한번 더 사용하면 된다.
  • -f : Dockerfile이라는 이름 대신 다른 이름의 Dockerfile을 사용한다.
    build는 default 로 경로에 있는 Dockerfile을 찾아서 빌드한다.
    -f 옵션으로 Dockerfile이 아닌 다른 파일을 찾아 빌드할 수 있다.

    현재 위치에서 Dockerfile2라는 파일을 빌드 하라는 명령이다.

docker commit 

docker commit [OPTIONS] <container> [REPOSITORY[:TAG]]


컨테이너의 변경 사항을 이미지 파일로 생성한다.

컨테이너를 커밋해 이미지로 만든 모습

 

docker container {command}

컨테이너 조작 명령이다.

start, stop, restart등 명령이 있다.

docker container | Docker Documentation

 

docker container

docker container: Manage containers.

docs.docker.com

docker cp 

컨테이너 내부에서 파일을 복사해 로컬 디렉토리에 붙여넣는다.
그 반대로 로컬의 파일을 컨테이너 내부로도 보낼 수 있다.

 

컨테이너 > 호스트

docker cp <container>:<path> <host path>

호스트 > 컨테이너 

docker cp <host path> <container>:<path>

 

docker create 

docker create [OPTIONS] <image> [COMMAND] [ARG…]


이미지로 새 컨테이너를 만드는 명령이다.

[OPTIONS]

  • -p : 해당 포트를 호스트에 게시(Listen port)
  • -rm : 컨테이너가 종료되면 자동 제거
  • -it : stdin 항시 대기, tty 할당
  • -v : 볼륨 바인딩
  • -e : 환경변수 지정, ex mariadb에서 root pw 지정) -e MYSQL_ROOT_PASSWORD=examplepassword

docker diff 

docker diff <container>


컨테이너가 실행되면서 변경된 파일 목록이다

A : 추가, C : 변경, D : 삭제

docker exec 

docker exec [OPTIONS] <container> <command> [ARG…]


실행중인 컨테이너에 새 명령을 실행한다.
기본 디렉토리에서 명령이 실행되며 WORKDIR 지시문으로 컨테이너 내 현재 디렉토리가 옮겨진 경우 그 디렉토리에서 명령이 실행된다. [OPTIONS]

  • -d : 백그라운드 실행
  • -e : 환경변수 설정
  • -i : stdin 열어두기
  • -t : tty 할당
  • -w : 컨테이너 내부 작업 디렉토리

ls 명령 사용
-it 옵션과, bash 명령 실행

이 명령어로 대화형 쉘을 실행할 수 있다. 이 명령은 해당 컨테이너에서 bash쉘을 실행해 표준 입출력을 통해 입출력을 할 수 있게 해주는것임.

특히 mariadb 같은 이미지의 경우, run을 할때 명령을 넣어주게 되면 기존 mariadb 데몬을 실행하는 entrypoint 명령이 변경되어 db데몬이 실행되지 않음. 그렇기 때문에 우선 실행시킨 후 exec 명령을 통해 bash쉘을 실행시키는 방법으로 해당 컨테이너에 접근한다.

docker history 

docker history [OPTIONS] <image>


이미지의 로그 확인
[OPTIONS]

docker image

docker image에 관한 명령들로,  list출력, tag 등 다양한 명령이 있음.

docker image | Docker Documentation

 

docker image

docker image: Manage images.

docs.docker.com

docker images 

docker images [OPTIONS] [REPOSITORY[:TAG]]


이미지를 나열한다
[OPTIONS]

  • -a : 모든 이미지 표시
  • –digests : 다이제스트 표시
  • -f : 출력 필터링
    mariadb repository만 검색


docker logs 

docker logs [OPTIONS] <container>


컨테이너의 로그 가져오기
[OPTIONS]

  • –tail : 끝에서부터 표시함
  • -t : 타임스탬프 표시
  • –until : 특정 시점 검색 ex) –until 2s : 2초동안 검색

docker pull 

docker pull [OPTIONS] NAME[:TAG|@DIGEST]


레지스트리에서 이미지, repository 가져오기
DIGEST : 불변 식별자
[OPTIONS]

  • -a : 태그 지정된 모든 이미지 다운로드
  • -q : 자세한 출력 억제

이미지의 DIGEST 확인

 

docker push 

docker push [OPTIONS] name[:TAG]

이미지를 docker hub 또는 또는 다른 저장소로 push한다 (default는 dockerhub)
이미지 또는 repository 를 레지스트리로 push 하기 위해선 

  1. push 하려는 계정으로 로그인
  2. repository가 <username>/<repository>[:TAG] 형태여야함

jhkimdocker/jhflaskv3:include_appfile => username/repository:tag형태

docker ps 

docker ps [OPTIONS] 현재 실행중인 컨테이너 목록을 보여준다
  • -a : 전체 리스트를 보여줌
  • -q : 컨테이너 아이디만 표시

docker ps -aq

-aq 옵션을 통해 생성된 컨테이너 아이디만 표시한다.

docker rm $(docker ps -aq) [-f]

이는 다음과 같이 사용하여 모든 컨테이너를 삭제할때 사용할 수 있다. (-f 는 실행중인 컨테이너까지 지운다)

 

 

docker rename 

docker rename <container> <new name>

 

컨테이너의 이름을 새로 바꾼다

docker restart 

docker restart [OPTIONS] <container> [container] [container] …


컨테이너를 재시작한다.
[OPTIONS]

  • -t [default=10] : 시간(s)만큼 기다린다

docker rm 

docker rm [OPTIONS] <container> [container, container, ...]


컨테이너를 삭제한다.
[OPTIONS]

  • -f –force : 실행중이여도 강제로 삭제한다
  • -l : 지정된 링크 제거
  • -v : 관련된 볼륨 제거
    • -v awesome:/foo -v /bar : foo는 유지되지만 bar은 제거된다.

컨테이너 모두 삭제

docker rm $(docker ps -aq) [-f]
 

docker rmi 

docker rmi [OPTIONS] <image> [image, image, ...]


[이미지 id]에 해당하는 이미지 삭제
[OPTIONS]

  • -f : 중복 있을때
  • —-no-prune : 태그가 지정되지 않은 부모를 삭제하지 마라

이미지 모두 삭제

docker rmi $(docker images -a)

docker save 

docker save [OPTIONS] images [image, image, ...]


이미지를 .tar 파일로 빼낸다.
[OPTIONS]

  • -o : STDOUT대신 파일에 쓰기(파일 이름 설정) -o <.tar파일이름> <파일로 만들 이미지>
docker save mysql > mysql.tar         
docker save -o mysql2.tar mysql
 
docker search [OPTIONS] <term>


docker hub에서 이미지를 검색한다.
[OPTIONS]

  • -f : 제공된 조건으로 출력 필터링
  • —-limit [default=25]: 최대 검색 결과수
  • —-no-trunc : 출력을 자르지 마라
  • —-format : 포멧을 지정한다
    • .Name : 이미지 이름
    • .Description : 설명
    • StarCount : 별의 수
    • IsOfficial : 이미지가 공식정인 경우 “OK”
    • IsAutomated : 이미지 빌드가 자동화 된 경우 “OK”

 

docker search —-format" :  -> " mysql

이런식으로 쓰면 출력 형태가 지정된다.

 

docker search -f stars=3 mysql​

별이 3개 이상인 mysql 이미지를 검색 예시

docker start 

docker start [OPTIONS] <container> [container, container, ...]


하나이상의 컨테이너 시작. [OPTIONS]

  • -a, —-attach : STDOUT, STDERR 연결 및 신호 전달
  • -i, —-interactive : STDIN 첨부

docker stats 

docker stats [OPTIONS] [container…]


컨테이너 리소스 사용 통계의 라이브 스트림 표시.
[OPTIONS]

  • -a, --all : 모든 컨테이너 표시
  • --no-stream : 스트리밍 통계 비활성화 하고 첫번째 결과만 가져옴
  • --no-trunc : 출력 자르지 마시오
  • --format : 포멧 지정
    • .Container : 컨테이너 이름 또는 ID (사용자 입력)
    • .Name : 컨테이너 이름
    • .ID : 컨테이너 ID
    • .CPUPerc : CPU 비율
    • .MemUsage : 메모리 사용량
    • .NetIO : 네트워크 IO
    • .BlockIO : IO 차단
    • .MemPerc : 메모리 백분율 (Windows에서는 사용할 수 없음)
    • .PIDs : PID 수 (Windows에서는 사용할 수 없음)
 
 
docker stats --all --format "{{.Container}}\t{{.CPUPerc}}"

 

docker stop 

docker stop [OPTIONS] <container> [container…]


컨테이너를 중지시킨다
[OPTIONS]

  • -t [default=10] : 시간(s) 만큼 기다렸다 중지한다

docker tag 

docker tag <srcimage>[:TAG] <targetimage>[:TAG]


source 이미지를 참조하는 태그를 만든다.
build의 -t 옵션과 유사하고 이미 만들어져 있는 이미지에 태그를 할 때 사용한다.

 
docker tag 0e5574283393 jhkim/test:0.1

ID가 0e5574283393인 로컬 이미지를  jhkim 의   test 저장소에   0.1 로 태그한다.