목차

도커

Docs

도커는 왜 인기를 끌게 되었나?

컨테이너 기술

컨테이너는 가상화보다 훨씬 가벼운 기술

가상 머신과 도커

가상 머신의 등장

컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도, 1960년 때에 가상화 개념이 처음 등장

리눅스 컨테이너

도커의 특징

도커는 게스트 OS를 설치하지 않음

도커는 이미지 생성배포에 특화

이미지 버전 관리또 제공하고 중앙 저장소이미지를 올리고 받을 수 있음 (push/pull)

github 와 비슷한 형태로 도커 이미지를 공유하는 Docker Hub 제공

다양한 API를 제공하여 원하는 만큼 자동화가 가능하여 개발과 서버 운용에 매우 유용

도커의 성능

도커는 하드웨어 가상화 계층이 없음

도커 이미지와 컨테이너

도커 이미지

이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태

저장소에 올리고 받는 건 이미지 (push/pull)

도커 컨테이너

컨테이너는 이미지를 실행한 상태

이미지로 여러 개의 컨테이너를 만들 수 있음

운영체제로 치면 이미지는 실행파일이고 컨테이너는 프로세스

도커의 이미지 처리 방식

유니온 파일 시스템 형식(aufs, btrfs, devicemapper)

도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성

컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행

docker hub 및 개인 저장소에서 이미지를 공유할 때 바뀐 부분만 주고 받음

서비스 운영 환경과 도커

지금까지의 서버 환경

클라우드 환경

가상화가 발전하면서 클라우드 환경으로 변화

가상 서버를 임대하여 사용한 만큼만 요금 지불

Immutable Infrastructure

Imuutable Infrastructure 라는 패러다임이 나옴

호스트 OS서비스 운영 환경(서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리

한 번 설정한 운영 환경은 변경하지 않는다(Immutable)는 개념

서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행

서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포

Immutable Infrastructure의 장점

편리한 관리

확장

테스트

가볍다

도커는 Immutable Infrastructure 를 구현한 프로젝트

도커 요약

고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고 이미지 저장과 배포(운반)을 의미

도커(Docker)는 부두 노동자를 뜻함. 컨테이너를 다루는 도커의 기능과 비슷함

도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술

도커 설치하기

Windows

도커 사용해보기

도커 명령

search 명령으로 이미지 검색하기

docker search <이미지 이름>

pull 명령으로 이미지 받기

docker pull <이미지 이름>:<태그>

snippet.sh
sudo docker pull ubuntu:latest

run 명령으로 컨테이너 생성하기

docker run <옵션> <이미지 이름> <실행할 파일>

snippet.sh
sudo docker run -i -t --name hello ubuntu /bin/bash

ps 명령으로 컨테이너 목록 확인하기

docker ps

snippet.bash
sudo docker ps -a

start 명령으로 컨테이너 시작하기

docker start <컨테이너 이름>

snippet.bash
sudo docker start hello

restart 명령으로 컨테이너 재시작하기

docker restart <컨테이너 이름>

snippet.bash
sudo docker restart hello

exec 명령으로 외부에서 컨테이너 안의 명령 실행하기

docker exec <컨테이너 이름> <명령> <매개 변수>

snippet.bash
sudo docker exec hello echo "Hello World"

stop 명령으로 컨테이너 정지하기

docker stop <컨테이너 이름>

rm 명령으로 컨테이너 삭제하기

docker rm <컨테이너 이름>

snippet.bash
sudo docker rm hello

rmi 명령으로 이미지 삭제하기

docker rmi <이미지 이름>:<태그>

snippet.bash
sudo docker rmi ubuntu:latest

도커 이미지 생성하기

Dockerfile 작성하기

먼저 example 디렉터리를 생성한 뒤 example 디렉터리로 이동하기

snippet.bash
mkdir example
cd example
snippet.bash
FROM ubuntu:14.04
MAINTAINER Foo Bar <foo@bar.com>
 
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
 
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
 
WORKDIR /etc/nginx
 
CMD ["nginx"]
 
EXPOSE 80
EXPOSE 443

build 명령으로 이미지 생성하기

docker build <옵션> <Dockerfile 경로>

snippet.bash
sudo docker build --tag hello:0.1

앞에서 생성한 이미지를 실행해보기

snippet.bash
sudo docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1

만약 Boot2Docker 를 사용한다면, boot2Docker 는 가상 머신 안에 도커를 실행한 것이므로 호스트 IP 는 ngnix에 바로 접속할 수 없다.

출처