도커는 도커 명령어를 사용하여 조작한다.
도커 명령어는 일반적으로 아래의 형식을 취한다.
docker <상위 커맨드><하위 커맨드> <옵션> <대상> <인자>
| 요소 | 의미 | 필수 여부 | 예시 |
|---|---|---|---|
| 상위 커맨드 | 도커를 이루는 여러 카테고리 중 무엇을 명령의 대상으로 삼을 지 규정 | O(container 예외) | container, image, network, volume |
| 하위 커맨드 | 상위 커맨드를 대상으로 어떠한 동작을 할 지 규정 | O | ls, run, inspect, stop |
| 옵션 | 하위 커맨드의 세부적인 동작을 규정. | X | -i, -t, -d, --name, -p, -v |
| 대상 | 상위 커맨드 범위 내에서 정확히 어떤 대상을 명령의 대상으로 삼을 지 규정 | X | 컨테이너 이름, 이미지 이름, 네트워크 이름 등등 |
| 인자 | 대상에 전달할 값을 지정 | X | httpd |
상위 커맨드는 원칙적으로 삭제될 수 없으나 상위 커맨드가 container인 경우, 그리고 version 같은 특수한 커맨드를 사용하는 경우엔 예외로 한다.
상위 커맨드
들어가기에 앞서
- 대상이 id를 가지고 있을 경우, 대상의 이름 대신 id를 입력하여 커맨드를 입력할 수 있다. 보통 2~3 글자만 입력하여도 된다.
- 아래 서술에서 옵션, 인자에 대한 설명이 없는 커맨드는 옵션, 인자를 거의 활용하지 않거나, 아예 없는 커맨드이다.
container
run
컨테이너를 생성해 실행하는 커맨드이다. docker image pull, docker container create, docker container start의 기능을 하나로 합친 것과 같다. 현재 해당 이미지를 내려받은 상태가 아니라면 먼저 이미지를 내려받는다.
기본적으로 다음의 형식을 가진다.
docker run <옵션> <대상 : 컨테이너를 만드는데 사용할 이미지의 이름> <인자>
| 옵션 | 내용 |
|---|---|
--name <컨테이너 이름> | 컨테이너의 이름을 지정함 |
-p 호스트_포트번호:컨테이너_포트번호 | 컨테이너의 포트와 호스트의 포트를 연결함(포트 포워딩) |
-P | EXPOSE의 모든 포트를 호스트에 연결하도록 설정한다. -P 옵션은 EXPOSE로 노출된 포트를 호스트에서 사용 가능한 포트에 차례로 연결하므로 이 컨테이너가 호스트의 어떤 포트와 연결됐는지 확인할 필요가 있다. |
-v 호스트_디스크:컨테이너_디렉터리 | 볼륨을 마운트함 |
--net=네트워크_이름 | 컨테이너를 네트워크에 연결함 |
-e 환경변수_이름=값 | 환경 변수를 설정함 |
-d | 백그라운드로 실행함 |
-i | 컨테이너에 터미널(키보드)를 연결함 |
-t | 특수 키를 사용 가능하도록 함 |
-help | 사용 방법 안내 메세지를 출력함 |
--entrypoint <param> | ENTRYPOINT를 설정 |
-d를 붙이지 않고 컨테이너를 실행하면 실행된 컨테이너가 프로그램의 실행을 마칠 때까지 터미널의 제어를 차지하므로 그다음 명령을 입력할 수 없는 상태가 된다.
또한 -it 옵션을 붙이지 않으면 컨테이너 안의 파일 시스템에 접근할 수 없다.
docker run과 create의 차이
docker run = docker pull(이미지가 없을 때 한정) → docker create → docker start → docker attach(-it 옵션을 사용했을 때 한정)
docker create = docker pull(이미지가 없을 때 한정) → docker create
ps
컨테이너의 목록을 출력하는 커맨드.
docker ps는 현재 실행 중인 컨테이너의 목록을 출력한다.
docker ps -a는 모든 컨테이너의 목록을 출력한다.
docker ps -q는 컨테이너의 id만을 출력한다. 이를 이용하여
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
와 같이 모든 컨테이너를 정지 및 삭제할 수 있다.
cp
호스트의 파일을 컨테이너에, 또는 컨테이너의 파일을 호스트에 복사하기 위하여 사용하는 명령어.
아래와 같이 원본_경로 복사할_경로 순서로 인자를 기재하면 된다.
컨테이너로 파일을 복사하는 커맨드 사용 예(호스트 → 컨테이너)
docker cp 호스트_경로 컨테이너_이름:컨테이너_경로
호스트로 파일을 복사하는 커맨드 사용 예(컨테이너 → 호스트)
docker cp 컨테이너_이름:컨테이너_경로 호스트 경로
commit
기존에 존재하는 컨테이너를 이미지로 변환.
기존 컨테이너를 복제하거나 이동해야 할 때 편리하다.
docker commit <컨테이너_이름> <새로운 이미지 이름>
attach
컨테이너의 내부로 들어가는 명령어. docker exec -it <container id> /bin/bash 명령어와 유사하다.
docker attach <container_name>
이 명령어의 반대로, ctrl + P, Q로 컨테이너에서 빠져나올 수 있다. exit과 달리 컨테이너를 정지시키지 않고 빠져나올 수 있다는 장점이 있다.
그 외
| 커맨드 | 내용 | 형식 |
|---|---|---|
| stop | 컨테이너 정지 | docker stop <대상 : 컨테이너_이름> |
| rm | 컨테이너 삭제, 삭제 전에 stop으로 컨테이너를 정지해야 한다. -f 옵션을 부여하면 정지되지 않은 컨테이너도 삭제할 수 있다. | docker rm <대상 : 컨테이너_이름> |
| logs | 컨테이너의 log, error log 등을 출력 | docker logs <대상 : 컨테이너_이름> |
image
| 커맨드 | 내용 | 형식 |
|---|---|---|
| ls | 이미지 목록 출력 | docker image ls |
| rm | 이미지 삭제 | docker image rm <대상 : 삭제할 이미지 이름> |
이미지 버전과 이미지 이름
이미지를 대상으로 하는 명령어는 버전을 지정하지 않아도 아래와 같이 동작한다.
`docker run —name ubuntoCont -it ubuntu’
그러면 이미지의 최신 버전(latest tag)을 내려받는다.
하지만 특정 버전을 사용해야 할 때도 있다. 그런 경우에는 아래와 같은 형식으로 버전을 지정할 수 있다.
image:image_version
—filter
docker image --filter "label=..."은 특정 라벨만을 가진 이미지만들 출력한다.
network
| 커맨드 | 내용 | 형식 |
|---|---|---|
| connect | 네트워크에 컨테이너를 새로이 접속 | |
| disconnect | 네트워크에서 컨테이너의 접속을 끊음 | |
| inspect | 네트워크의 상세 정볼르 확인 | |
| ls | 네트워크의 목록을 확인 | |
| prune | 현재 아무 컨테이너도 접속하지 않은 네트워크를 모두 삭제 | |
| create | 네트워크 생성 | docker network create <대상 : 네트워크 이름> |
| rm | 지정한 네트워크를 삭제 | docker network rm <대상 : 네트워크 이름> |
volume
| 커맨드 | 내용 | 형식 |
|---|---|---|
| create | 볼륨을 새로이 생성 | docker volume create <볼륨 이름> |
| rm | 볼륨을 삭제 | docker volume rm <볼륨 이름> |
| inspect | 볼륨의 상세 정보를 출력 | |
| ls | 볼륨의 목록을 출력 | docker volume ls |
| prune | 현재 마운트되지 않은 볼륨을 모두 삭제 |
build
build는 도커의 일반적인 명령어와 달리 상위 커맨드와 하위 커맨드의 구분이 존재하지 않는 독립된 특수한 명령어이다.
Dockerfile과 재료 파일들이 들어 있는 재료 폴더를 대상으로 사용해 새로운 이미지를 만드는 명령어이다.
docker build -t <생성할 이미지 이름> <재료 폴더 경로>
-t 인자는 생성할 이미지의 이름을 지정하기 위한 옵션이다.
참고자료
그림과_실습으로_배우는_도커_쿠버네티스
#참고도서/시작하세요_도커_쿠버네티스