글 작성자: 근삼이

도커란?

컨테이너 기반의 오픈소스 가상화 플랫폼 중, 가장 대중적으로 사용되고 있는 플랫폼.

컨테이너?

환경 관리 측면에서 현실세계의 컨테이너의 특징과 비교하여 비슷한 구석이 많음.

실제 컨테이너 VS Docker컨테이너

구분 실제 컨테이너 Docker 컨테이너
통일된 규격 내용이 무엇이든 동일한 규격의 상자 내용물에 관계없이 하나의 명령체계
편리한 이동 크레인을 통해 쉽게 옮기고, 쌓을 수 있음 Docker Hub등을 통해 쉽게 업.다운로드 가능
내용물 보호 내부의 물건들이 안전하게 보호됨 HOST의 환경에 컨테이너 내부가 영향받지x


Docker 공부에 도움이 되는 키워드

키워드 설명
Image 컨테이너가 실행되기 전 상태. 환경을 주고 받을 때 이미지 형태로 전달한다. 프로그램에 비유하면 실행파일
Container 이미지가 실행 된 형태. 프로그램에 비유하면 프로세스
Dockerfile 이미지를 정의 하는 명세
docker-compose From 이미지 To 컨테이너. 사용할 이미지, 사용할 네트워크, 노출시킬 포트, 실행할 명령어 등이 정의 된 명세
Image Registry 이미지를 공유하기 위한 외부 저장공간. 목적에 따라 Public, Private 형태로 구성할 수 있고, 대표적으로 Docker Hub가 있다.

 

왜 쓰는 걸까?

Docker와 같은 컨테이너 런타임들을 이용하는 이유와 장점에 대한 설명을 담은 PPT를 이전에 만들어놓은 것이 있어서 첨부하니, 참고하면 좋을듯 하다.

 

설치해 보자

본 문서는 CentOS 기준으로 설명이 되어 있다. 다른 운영체제는 공식문서를 참고할 것

기존 설치 삭제

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

필수 패키지 설치

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

Docker stable repo 설치

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Docker Engin (커뮤니티 버전) 설치

sudo yum install docker-ce docker-ce-cli containerd.io

계정 권한 추가

sudo usermod -aG docker <username>

도커 서비스 기동 & 자동 시작 설정

sudo systemctl start docker
sudo systemctl enable docker

설치 테스트

docker run --rm geunsam2/moo

Docker-Cli

Docker를 사용하기 위한 최소한의 커멘드와 가이드를 소개한다. 보다 상세한 예제와 모든 커멘드 메뉴얼을 참고하고 싶으면, Docker Document를 참고 바란다.

이미지 이름 형식

[Registry URL]/[NAMESAPCE]/<Image Name>[:tag]

[]로 표시된 항목들은 상황에 따라 생략할 수 있다. 다음 예제를 참고하자.

$ docker pull nginx
latest: Pulling from library/nginx
000eee12ec04: Pull complete
eb22865337de: Pull complete
bee5d581ef8b: Pull complete
Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
  • Registry URL 부분이 생략되면 DockerHub의 주소인 [docker.io](http://docker.io) 가 Default 값으로 잡힌다.
  • library 는 Docker Hub가 registry 주소로 지정을 경우의 Default NameSpace 이다. NameSpace 에는 일반적으로 사용자의 계정이름이 들어가며, 이미지의 저장 경로를 해당 사용자의 개인 이미지 저장소로 분기시긴다.
  • tag 부분이 생략되면 latest 값이 Default로 잡힌다.

LOGIN

docker login [Registry URL]

생략시, [docker.io](http://docker.io) 가 Default. 로그인 한 Registry에 관한 정보는 $HOME/.docker/config.json 에 기록된다.

PULL

docker pull <Image Name>

해당 이미지를 로컬저장소에 내려받는다. 이미지 이름 형식은 위 내용을 참고한다.

PUSH

docker push <Image Name>

로컬 저장소에 있는 이미지를 원격 저장소에 업로드 한다. 이미지 이름 형식은 위 내용을 참고한다.

IMAGES

docker images

로컬 저장소에 있는 이미지들의 목록을 확인한다.

RUN

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

run 명령어의 자세한 옵션들은 공식문서를 참고 바란다. 알아두어야 할 필수 옵션을 몇가지 소개한다.

  • -d : 컨테이너를 백그라운드에서 동작시킨다.
  • -it : 컨테이너와 통신할 수 있는 tty를 오픈하여 보여준다.
  • -p : 1996:80 포트포워딩
  • -v : 볼륨 마운드 Host volume : container [/root:/mnt/1]
  • --rm : 컨테이너 종료시 컨테이너 자동삭제
  • --name : 컨테이너에 별명을 달아준다.

STOP

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

컨테이너를 종료시킨다. 컨테이너의 종료 == 삭제 가 아니라는 점을 주의 하자.

PS

docker ps [OPTIONS]

ps 명령은 실행 중인 컨테이너 및 종료된 컨테이너들의 목록을 확인할 때 사용한다. 주로 -a 옵션을 많이 사용하며, 해당 옵션을 이용하면 종료된 컨테이너들도 목록으로 확인할 수 있다.

RM

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

컨테이너를 삭제할 때 사용한다.

RMI

docker rmi [OPTIONS] IMAGE [IMAGE...]

이미지를 삭제할 때 사용한다.

LOGS

docker logs [OPTIONS] CONTAINER

컨테이너 내부에서 발생하는 로그를 보여준다. 내부적인 서비스의 동작을 확인할 때 사용하며 -f 옵션을 통해 로그를 계속 화면에 출력시킬 수 있다.

INSPECT

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

도커 오브젝트 (네트워크, 이미지, 컨테이너 등)들의 저수준 레벨의 정보들을 출력한다. 디버깅 시 유용하게 사용할 수 있다.

EXEC

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

동작중인 컨테이너 내부로 명령을 전달한다. docker exec -it <컨테이너> /bin/bash 과 같은 구문을 통해 컨테이너와 통신할 수 있는 tty를 오픈하여 보여준다.

CP

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

컨테이너 외부에서 내부로 혹은, 컨테이너 내부에서 외부로 파일 또는 디렉토리를 복사한다.

COMMIT

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

컨테이너의 변경사항을 반영하여 새로운 이미지를 만든다.

BUILD

docker build [OPTIONS] PATH | URL | -

Dockerfile을 별도로 작성하여 Dockerfile에 명세된 내용을 기준으로 새로운 이미지를 빌드한다. Dockerfile에 관한 내용은 다음 포스팅에서 다룬다.

반응형