업데이트:

4 분 소요

개요

도커는 git 만큼은 아니더라도 그에 비슷하게 꼭 알아야 하는 개발을 도와주는 소프트웨어로 잘 알려져있다. 이 전에 조금 접해보았지만, 다시 공부하는 마음으로 정리했다.

docker는 여기서 다운로드 받을 수 있다.

Docker?

Docker enables you to separate your applications from your infrastructure so
you can deliver software quickly. With Docker, you can manage your infrastructure
in the same ways you manage your applications.(도커는 어플리케이션으로부터 환경을 분리시킬 수 있고 그 어플리케이션을 관리하는 것과 같이 환경을 구성할 수 있다고 한다.)  

Docker를 개발 환경을 이미지와 컨테이너를 통해 어플리케이션과 환경을 분리시켜 개발자가 개발에 집중할 수 있도록 도와준다.

docker에 대한 좀 더 자세한 설명은 얄팍한 코딩사전을 보면 쉽고 간단하게 이해할 수 있다.

영상 내용을 간략하게 말하자면 docker는 버전이 명시되어있는 개발 환경 설계도를 이미지 라는 곳에 저장하고, 이 이미지를 토대로 컨테이너라는 환경을 구성한다.

설계도에 따라 구성하므로 같은 환경의 버전 차이로 인한 충돌이 방지되고, 설계도에 따라 알아서 환경을 구성하기 때문에 쉽사리 환경을 구성해준다.

이는 OS 위 가상 환경을 설치하는 것과는 다르다. 가상 환경을 통해 관리하게 되면, 가상 환경의 안정성을 위해 일정 컴퓨터 자원을 할당 하게 되는데, 이렇게 된다면 컴퓨터 자원의 유연한 활용이 불가능해진다.

이에 반해 컨테이너는 가상환경과 달리 본래 있던 컴퓨터 자원을 공유하기 때문에 자원을 효율적으로 사용할 수 있다.

아래는 docker의 사용법이다.

명령어

docker의 명령어는 적지 않다. 따라서 주로 사용된다고 생각하는 것들을 위주로 정리했다.
CLI환경을 선호하기 때문에 기준은 CLI이다.
또한 명령어는 자주쓰는 것을 기준으로 정리했다.

기본 명령어

docker -v

base command인 docker에 -v 옵션을 통해 버전을 확인할 수 있다.

Image

이미지 다운로드, pull

dcoker pull [OPTION] NAME[:TAG|@DIGEST]

docker pull 커맨드를 이용해 원하는 이미지를 다운받을 수 있다.
version에 관한 명시가 없을 경우 가장 최신버전으로 pull한다.
OPTION으로는 아래와 같이 입력될 수 있다.

  • --all-tage, -a 태그된 모든 이미지를 다운받는다.
  • --disable-content-trust 이미지 검증을 건너띈다. default 값은 true이다.
  • --platform 서버가 multi-platform을 수용할 수 있다면 platform으로 지정한다.
  • --quiet, q 출력을 내지않고 실행한다.

DIGEST는 어떤 원본 데이터(메시지라고 부른다.)가 Hash 함수를 지나고 난 결과 값을 부르는 말이다.
이 digest 값으로도 pull을 할 수 있다.

이미지 리스트, images

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

images 커맨드는 pull 되어있는 모든 image의 list를 보여준다.
OPTION 은 아래와 같다.

  • --all, -a 모든 이미지를 보여준다.(default는 중간 이미지를 보여주지 않는다.)
  • --digests digests를 보여준다.
  • --filter, -f 주어진 조건대로 결과를 필터링한다.
  • --format Go 템플릿을 이용해 양식에 맞춰 출력한다.

--filter 옵션을 준 경우 옵션 뒤에 패턴을 줄 수 있고 --format 옵션을 준 경우 아래와 같이 포맷을 줄 수 있다.

images_format.png.png

이미지 삭제, rmi

docker rmi [image_name]

rmi 커맨드로 image를 삭제할 수 있다.
pull 커맨드와 마찬가지로 버전을 명시하지 않은 경우 가장 최신버전을 삭제한다.
images와 함께 사용한다면 아래와 같이 원하는 이미지를 삭제할 수 있다.

docker rmi $(docker images -f "dangling=true" -q)
------------------------------------------
8abc22fbb042
48e5f45168b9
bf747efa0e2f
980fe10e5736
dea752e4e117
511136ea3c5a

Container

컨테이너 생성, create

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]  

create 커맨드를 통해 컨테이너를 생성할 수 있다.
OPTION 인자로는 여기서 확인할 수 있다. 수가 많으니 필요한 기능을 골라써야하겠다.

컨테이너 실행, run

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

run 커맨드를 사용해 컨테이너를 실행할 수 있다.
옵션은 여기서 확인할 수 있으며 자주사용되는 옵션은 다음과 같다.

  • -d 백그라운드 모드로 실행한다.
  • -p 포워딩. 호스트와 컨테이너의 포트를 연결한다.
  • -v 마운트. 호스트와 컨테이너의 디렉토리를 연결한다.
  • -e 컨테이너 내에서 사용할 환경변수를 설정한다.
  • -name 컨테이너의 이름을 설정한다.
  • -rm 프로세스를 종료했을 때 컨테이너를 자동으로 삭제한다.
  • -link 다른 컨테이너로의 링크를 추가한다.
  • -i attached 되지 않은 상태에서도 STDIN을 열어놓는다.
  • -t pseudo-TTY를 할당한다.
  • -it 위 두 옵션을 함께 사용할 수 있다.

컨테이너 중지, stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]  

stop 명령어로 컨테이너를 중지시킬 수 있다.
옵션에는 다음이 가능하다.

  • --time, -t 프로세스를 종료하기전 중지시킬 시간을 정할 수 있다.(default 값은 10이다.)

컨테이너 종료, kill

 docker kill [OPTIONS] CONTAINER [CONTAINER...]  

kill 커맨드로 컨테이너를 종료시킬 수 있다.
옵션은 아래와 같다.

  • --signal, -s 컨테이너를 종료시키기 위한 신호를 보낼 수 있다.

컨테이너 삭제, rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]

rm 커맨드로 컨테이너를 삭제할 수 있으며 옵션은 다음과 같이 줄 수 있다.

  • --force, -f 강제로 삭제한다.
  • --link, -l 특정된 링크를 삭제한다.
  • --volumes, -v 삭제하려는 컨테이너와 연관된 익명의 볼륨을 제거한다.

컨테이너 확인, ps

docker ps [OPTIONS]

ps 커맨드를 이용해 현재 컨테이너를 확인한다. 아래는 옵션이다.

  • --all, -a 모든 컨테이너 를 보여준다. (default 값으로는 현재 실행중인 컨테이너만 보여준다.)
  • --filter, -f 주어진 조건에 맞게 결과를 필터링한다.
  • --format 주어진 양식에 맞게 결과를 낸다.
  • --last, -n 가장 오래전에 만들어진 n개를 보여준다.
  • --latest, -l 가장 최근에 만들어진 컨테이너를 보여준다.
  • --no-trunc 결과를 줄이지 않는다.
  • --quite, -q 결과를 보여주지 않는다.
  • --size, -s 파일의 크기를 보여준다.

이 중 -a옵션은 빈번하게 사용되므로 까먹지 않도록 해야한다.

컨테이너 로그, logs

docker logs [OPTIONS] CONTAINER

logs 커맨드를 통해 컨테이너의 로그를 살펴볼 수 있다.
옵션은 다음과 같다.

  • --details 추가적인 세부사항을 보여준다.
  • --follow, -f 로그를 켜놓은 상태에서 로그가 실시간으로 갱신된다. 가장 흔하게 사용되는 옵션이다.
  • --since 타임스탬프 이후로부터의 로그를 보여준다.
  • --tail, -n 끝에서 부터 n개의 로그를 보여준다.
  • --timestamp, -t 타임스탬프를 보여준다.
  • --until 타임스탬프 이전으로부터의 로그를 보여준다.

컨테이너 명령어 실행, exec

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

exec 커맨드를 통해 컨테이너의 로그를 fetch할 수 있다. 옵션은 다음과 같다.

  • --detach, -d 백그라운드로 명령어를 실행한다.
  • --detach-keys detaching된 컨테이너에 키를 오버라이드한다.
  • --env, -e 컨테이너에서 사용할 환경 변수를 설정한다.
  • --env-file 환경 변수가 들어있는 파일을 읽는다.
  • --interactive, -i attach 되어있지 않아도 STDIN을 열어둔다.
  • --previleged 커맨드에 확장된 특권을 준다.
  • --tty, -t pseudo-TTY를 할당한다.
  • --user, -u 작동시킬 유저 이름이나 UID를 입력할 수 있다.
  • --workdir, -u 컨테이너안에 작동하고 있는 디렉토리를 보여준다.

이 외에도 더욱 많은 명령어가 있다. 더욱 많은 명령어를 사용하게 될 때 쯤, 추가적인 게시를 할 예정이다.

참고문서

Docker docs
https://docs.docker.com/get-started/overview/

docker 명령어
https://www.yalco.kr/36_docker/
https://docs.docker.com/reference/
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html

docker images 활용
https://velog.io/@soonbee/docker-image를-삭제하는-다양한-방법들

카테고리:

업데이트:

댓글남기기