Docker 정리
Docker 란?
2013년에 등장한 새로운 컨테이너 기반 가상화 도구
계층화된 파일 시스템을 사용해 가상화된 컨테이너의 변경사항을 추적 및 관리
컨테이너 특정 상태를 항상 보존해두고, 필요할 때 언제 어디서나 실행할 수 있도록 도와주는 도구
기존 가상머신
가상 머신은 격리된 환경을 구축해준다는 데서 매력적
실제 배포용으로 쓰기에는 성능 면에서 불리한 도구
운영체제 위에서 또 다른 운영체제를 통째로 돌리는 구조라 리소스를 비효율적으로 활용하게 됨
Docker
어느 플랫폼에서나 재현가능한 어플리케이션 컨테이너를 만들어주는 것을 목표함
LXC(리눅스 컨테이너)라는 개념에서 출발함으로써 특정 리눅스 배포판에서 사용 가능
가상 머신이라고 하기보다는 격리된 환경을 만들어주는 도구
컨테이너와 이미지의 차이와 Dockerfile 만든 법 등을 익히는게 중요함
Docker에서 말하는 장점들
- 유연성 (Flexible) : 가장 복잡한 애플리케이션조차도 컨테이너화할 수 있습니다.
- 경량 (Lightweight) : 컨테이너는 호스트 커널을 활용하고 공유합니다.
- 교환 가능 (Interchangeable) : 업데이트 및 업그레이드를 즉시 배포 할 수 있습니다.
- 휴대성 (Portable) : 로컬로 구축하고, 클라우드에 배치하고, 어디서나 실행할 수 있습니다.
- 확장성 (Scalable) : 컨테이너 복제본을 늘리고 자동으로 배포 할 수 있습니다.
- 스태킹 (Stackable) : 서비스를 세로 및 가로로 쌓을 수 있습니다.
Docker 제품군
Community Edition (CE)
Docker를 시작하고 컨테이너 기반 앱을 실험하려는 개발자 및 소규모 팀에 이상적 (무료)
두 가지 업데이트 채널을 가짐
- Stable : 분기마다 안정적인 업데이트 제공
- Edge : 매월 새 기능 제공
Enterprise Edition (EE)
업무용 응용 프로그램 제작, 배송 및 실행하는 엔터프라이즈 개발 및 IT팀을 위한 설계 (유료)
Docker CE와 EE 간 비교 이미지 (출처: Docker Docs, https://docs.docker.com/install/)
지원 플랫폼
Desktop
Cloud
Server
Docker EE
Docker CE
Docker 설치하기
OS requirements (18년 3월 22일 기준)
Docker CE는 아래 버전 중 하나의 64비트 버전이 필요함
- Artful 17.10 (Docker CE 17.11 Edge and higher only)
- Xenial 16.04 (LTS)
- Trusty 14.04 (LTS)
Docker CE는 Ubuntu에서 x86_64
, armhf
, s390x
(IBM Z), and ppc64le
(IBM Power) 아키텍쳐를 지원함
(ppc64le and s390x limitations: IBM Z 및 Power 아키텍쳐 패키지는 Ubuntu Xenial 이상만 사용 가능)
Docker CE 설치
- Docker repositories를 설정 후 설치
- DEB 패키지 다운로드 후 수동 설치
- 스크립트를 사용하여 설치
Docker Storage를 설정 후 설치 방법
## 패키지 업데이트
$ sudo apt-get update
...
## HTTPS를 통해 repository를 사용할 수 있도록 패키지 설치
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
...
## Docker 공식 GPG 키 추가
## Key fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 확인
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22
...
## stable repository 사용시 아래 커맨드 추가
## arch 값을 amd64, armhf, ppc64el, s390x 등으로 맞춰서 사용
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
...
## 패키지 업데이트
$ sudo apt-get update
...
## 옵션 1. Docker CE 최신 버전 설치
$ sudo apt-get install docker-ce
...
## 옵션 2. Docker CE 특정 버전 설치
$ apt-cache madison docker-ce
docker-ce | 17.12.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
$ sudo apt-get install docker-ce=<VERSION>
...
## hello-world 이미지를 실행하여 Docker CE가 올바르게 설치되었는지 확인
$ sudo docker run hello-world
다른 OS에서 Docker 설치
Docker 제거
Docker CE 제거
Docker CE 패키지 제거
$ sudo apt-get purge docker-ce
Image, Container, Volume, 사용자 정의 구성파일 등은 자동으로 제거 안됨.
모든 데이터를 삭제하려면 아래처럼 실행
$ sudo rm -rf /var/lib/docker
Docker Image
이미지는 추상적인 개념이며, 이미지를 기반으로 생성된 컨테이너가 실행됨
이미지는 코드, 런타임, 도서관, 환경 변수 및 구성 파일 등 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 실행 가능한 패키지
Docker Image 관련 명령어
docker images
현재 시스템에서 사용 가능한 이미지 리스트
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-world latest f2a91732366c 4 months ago 1.85kB
docker pull
이 명령어를 사용하면 docker.io의 공식 저장소에서 이미지를 다운로드
공식 저장소에 있는 이미지 정보들은 https://hub.docker.com/explore/에서 확인 가능
$ docker pull ubuntu
Pulling repository ubuntu
04180f9bd8a6: Download complete
1e548c932d40: Download complete
...
Docker Container
컨테이너는 기본적으로 리눅스에서 실행되며, 다른 컨테이너와 호스트 시스템의 커널을 공유
더 많은 메모리를 사용하지 않고 개별 프로세스를 실행하여 가볍게 만듬
Docker Container 관련 명령어
docker run
특정 이미지로 컨테이너 생성 및 실행
$ docker run -i -t ubuntu:12.04 /bin/bash
root@8bfd70fe7392:/#
docker ps
실행 중인 컨테이너들을 출력 (전체 볼때는 docker ps -a)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
0fae5858c9c0 ubuntu:12.04 /bin/bash 8 seconds ago Up 7 seconds
PORTS NAMES
sleepy_nobel
docker start <Container name/id>
생성되어 있는 컨테이너를 실행
$ docker start a37f1348c4c4
a37f1348c4c4
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
a37f1348c4c4 hello-world "/hello" 25 minutes ago Up 7 seconds
PORTS NAMES
sleepy_nobel
docker stop <Container name/id>
실행 중인 컨테이너를 정지
$ docker stop a37f1348c4c4
a37f1348c4c4
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
a37f1348c4c4 hello-world "/hello" 25 minutes ago Exited(0) 25 minutes ago
PORTS NAMES
sleepy_nobel
docker exec -it <Container name/id>
실행 중인 컨테이너에 진입시
쉘이 안떠있는 컨테이너일 경우 : docker exec -it <Container name/id> /bin/bash
$ docker attach e2af613
root@e2af61348652:/#
docker stop $(docker ps -a -q)
실행 중인 컨테이너들 전체 정지시
$ docker stop $(docker ps -a -q)
a37f1348c4c4
e2af6134a1s2
...
참고 자료
Docker 공식 문서 : https://docs.docker.com/
nacyout님의 "도커(Docker) 튜토리얼:깐 김에 배포까지" : http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/
(18년 3월 22일 기준 정리)
'IT > ETC' 카테고리의 다른 글
Copilot 리서칭 (1) | 2024.10.17 |
---|---|
[SonarQube] SonarQube & Jenkins 이야기 (0) | 2020.02.14 |
[SonarQube] SonarQube 도입기? (0) | 2020.02.07 |
Expert Beginner란... (0) | 2018.03.12 |
[Cloud9][Ruby on Rails] C9 생성 후 간단한 Ruby on Rails 페이지 만들기 (0) | 2017.12.29 |