자세한 사용법은 공식 문서에 자세히 나와있고, 여기서는 대략적인 사용법에 대해서만 다룬다.
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 : 컨테이너 내부 작업 디렉토리
이 명령어로 대화형 쉘을 실행할 수 있다. 이 명령은 해당 컨테이너에서 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 : 자세한 출력 억제
docker push
docker push [OPTIONS] name[:TAG]
이미지를 docker hub 또는 또는 다른 저장소로 push한다 (default는 dockerhub)
이미지 또는 repository 를 레지스트리로 push 하기 위해선
- push 하려는 계정으로 로그인
- repository가 <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
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 로 태그한다.