Docker-1 설치 및 기본 CLI 활용
도커란?
컨테이너 기반의 오픈소스 가상화 플랫폼 중, 가장 대중적으로 사용되고 있는 플랫폼.
컨테이너?
환경 관리 측면에서 현실세계의 컨테이너의 특징과 비교하여 비슷한 구석이 많음.
실제 컨테이너 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에 관한 내용은 다음 포스팅에서 다룬다.