도커도커 명령어를 사용하여 조작한다.

도커 명령어는 일반적으로 아래의 형식을 취한다.

docker <상위 커맨드><하위 커맨드> <옵션> <대상> <인자>

요소의미필수 여부예시
상위 커맨드도커를 이루는 여러 카테고리 중 무엇을 명령의 대상으로 삼을 지 규정O(container 예외)container, image, network, volume
하위 커맨드상위 커맨드를 대상으로 어떠한 동작을 할 지 규정Ols, run, inspect, stop
옵션하위 커맨드의 세부적인 동작을 규정.X-i, -t, -d, --name, -p, -v
대상상위 커맨드 범위 내에서 정확히 어떤 대상을 명령의 대상으로 삼을 지 규정X컨테이너 이름, 이미지 이름, 네트워크 이름 등등
인자대상에 전달할 값을 지정Xhttpd

상위 커맨드는 원칙적으로 삭제될 수 없으나 상위 커맨드가 container인 경우, 그리고 version 같은 특수한 커맨드를 사용하는 경우엔 예외로 한다.

상위 커맨드

들어가기에 앞서

  1. 대상이 id를 가지고 있을 경우, 대상의 이름 대신 id를 입력하여 커맨드를 입력할 수 있다. 보통 2~3 글자만 입력하여도 된다.
  2. 아래 서술에서 옵션, 인자에 대한 설명이 없는 커맨드는 옵션, 인자를 거의 활용하지 않거나, 아예 없는 커맨드이다.

container

run

컨테이너를 생성해 실행하는 커맨드이다. docker image pull, docker container create, docker container start의 기능을 하나로 합친 것과 같다. 현재 해당 이미지를 내려받은 상태가 아니라면 먼저 이미지를 내려받는다.

기본적으로 다음의 형식을 가진다.

docker run <옵션> <대상 : 컨테이너를 만드는데 사용할 이미지의 이름> <인자>

옵션내용
--name <컨테이너 이름>컨테이너의 이름을 지정함
-p 호스트_포트번호:컨테이너_포트번호컨테이너의 포트와 호스트의 포트를 연결함(포트 포워딩)
-PEXPOSE의 모든 포트를 호스트에 연결하도록 설정한다. -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 인자는 생성할 이미지의 이름을 지정하기 위한 옵션이다.


참고자료

그림과_실습으로_배우는_도커_쿠버네티스
#참고도서/시작하세요_도커_쿠버네티스