Docker


Docker

도커 소개

도커

  • 공식 홈페이지 : Docker
  • 리눅스에서 제공하는 컨테이너를 이용하여 애플리케이션을 묶어서 실행/배포
  • 기존 VM에 비해 오버헤드가 적음
  • 이미지 버전 관리가 쉬움
  • 각 컨테이너 사이의 독립적 동작 환경
  • 별도의 OS를 가상화 하지 않음. 직접 호스트 OS의 자원을 사용하여 VM에 비해 빠름

    VM vs Container
  • 리눅스 커널 기반으로 만들어진 컨테이너 가상화 기술이므로 Host OS로 리눅스 커널 필요함
  • 대표적인 Docker 전용 Linux 배포판
    • RHEL Atomic Host : kubernetes(컨테이너 운영툴) 설치됨, Cockpit(GUI 컨테이너 조작) 내장, RHEL subscription 구매해야 함
    • Core OS : 오픈소스중 가장 활발
  • 참고 : 마스코드 고래는 Moby Dock, 등에 실은 것은 컨테이너

도커의 기능

  • 주요기능 : 이미지 생성, 컨테이너 동작, 이미지 공유
  • 이미지
    • 실행파일, 라이브러리, 설정파일을 포함
    • 배포의 단위, 저장소에 pull/push
    • Docker Hub에서 공유
  • 컨테이너
    • 이미지를 실행한 형태
    • Docker는 컨테이너 단위로 실행함
    • 하나의 커널에서 여러개의 컨테이너 실행 가능

      Images and Containers

도커 컴포넌트

  • Docker Engine : 코어 기능 수행, Dockerfile을 통한 이미지 생성, 컴포넌트 구동, Docker 커맨드 실행
  • Docker Kinematic : GUI 툴, 이미지 관리, 컴포넌트 구동
  • Docker Registry : 이미지 공유
  • Docker Compose : 여러 컨테이너를 통합 관리
  • Docker Machine : 도커 실행환경을 커맨드로 생성하기 위한 툴
  • Docker Swarm : 여러 도커 호스트를 클러스터화 하기 위한 툴

    Docker Component

도커 동작구조

  • Linux namespace
    • 도커 컴포넌트는 리눅스 커널의 namespace 기능을 사용하여 독립적으로 실행
    • PID namespace : 프로세스 ID, 서로 다른 namespace의 프로세스는 서로 액세스 못함
    • Network namespace : IP, 포트, 라우팅 테이블 등을 namespace 별로 할당. 호스트에서 사용중인 포트도 컨테이너 안에서는 사용 가능
    • UID namespace : UID(User ID), GID(Group ID)를 namespace 안에서 독립적으로 사용
    • Mount namespace : 기기와 저장장치를 namespace 내의 파일 시스템 트리에 구성
    • UTS namespace : namespace 별로 독립적인 호스트명/도메인명 사용 가능
    • IPC namespace : 프로세스간 통신 오브젝트를 namespace별로 가질 수 있음
  • Linux cgroup
    • 도커 컨테이너들은 물리머신의 리소스를 공유한다. 이때 cgroup을 사용하여 리소스를 할당한다.
    • cpu(cpu 사용량 제한), memory(메모리와 스와프 사용량 제한), devices(디바이스 액세스 제어)
    • cgroup은 계층구조를 사용, 하위 cgroup은 상위 cgroup 설정된 제한을 넘을 수 없음
  • 네트워크
    • 각 컨테이너 마다 가상 NIC(vethxxx) 생기고, 172.17.0.0/16 subnet mask 인 private IP 할당됨.
    • 가상 bridge(docker0, 172.17.42.1) 생성됨 : 컨테이너의 가상 NIC가 연결됨, 물리NIC(eth0)와 통신, 컨테이너간 통신

도커

도커 명령어

  • docker <명령어>
  • 명령어 : start, stop, restart, pause, unpause, wait, kill, attach, exec ...

자주 사용하는 명령어

  • docker start my-container ▶ 컨테이너 실행
  • docker exec -it my-container /bin/bash ▶ 컨테이너의 shell 실행
  • docker logs -ft my-container ▶ 컨테이너의 로그 실행

도커 정보

  • docker version ▶ 도커 버전, GO 버전, OS, 아키텍처 등 확인
  • docker info ▶ 구동중인 컨테이어 수, 스토리지 드라이버 종류, Boot2Docker 버전 등 확인

매번 sudo 입력하여 실행 방지

  • sudo usermod -aG docker ${USER} ▶ ${USER}는 현재 사용자를 의미
  • sudo service docker restart

이미지

이미지 찾기

  • 이미지는 Docker 컨테이너의 템플릿이다.
  • 이미지 공유 : Docker Hub
  • 공식 이미지가 아니면 "사용자id/이미지" 형태임
  • tags : 이미지의 변경시, 특정 시점에 tag를 달아서 기록, 특정 태그를 지정하지 않으면 latest(마지막)
  • docker search <키워드> ▶ Docker Hub에서 이미지를 검색, STARS가 많을 수록 인기
  • docker search --stars=30 centos ▶ Docker Hub에서 별30개 이상인 centos 이미지 검색

이미지 가져오기

  • docker search redis ▶ redis 이미지 찾기
  • docker pull redis:latest ▶ redis 이미지 최신것 가져오기
  • docker images ▶ 로컬에 설치된 이미지 검색
  • docker rmi <이미지이름> ▶ 로컬에서 이미지 삭제

Docker Hub

  • Docker Hub
  • 이미지를 업로드/다운로드 가능
  • docker login ▶ 도커 허브에 로그인
  • docker logout ▶ 도커 허브에서 로그아웃
  • docker push kimstar/my-image ▶ 이미지를 올림
  • docker push kimstar/my-image:1.0 ▶ 태그 지정하여 이미지를 올림
  • docker pull kimstar/my-image ▶ 이미지를 받음
  • docker push ubuntu ▶ 공식이미지에 올릴 권한이 없어서 실패함

컨테이너

이미지에서 컨테이너 생성

  • docker run -i -t --name <컨테이너명> -d <이미지명> ▶ 이미지에서 컨테이너 생성하여 실행
    • --name : 컨테이너 이름
    • -i : interactive (표준입출력 사용)
    • -t : tty (http://www.myservlab.com/144 참고)
    • -d : 이미지를 백그라운드로 실행 (detach 모드)
    • docker create 로 생성만 할 수도 있음
  • docker ps ▶ 현재 실행중인 컨테이너 목록
  • docker ps -a ▶ 정지된 컨테이너 포함하여 모든 컨테이너 목록

컨테이너 실행/중지

  • docker start <컨테이너명> ▶ 컨테이너 실행
  • docker stop <컨테이너명> ▶ 컨테이너 중지
  • docker restart <컨테이너명> ▶ 컨테이너 재실행
  • docker exec -it <컨테이너명> /bin/bash ▶ 컨테이너의 bash를 실행

컨테이너 삭제

  • docker rm <컨테이너명> ▶ 태그를 입력하지 않으면 모든 태그가 삭제됨
  • docker rm <컨테이너명>:<태그> ▶ 특정태그만 삭제

컨테이너 로그

  • doker logs -ft <컨테이너명> ▶ tail 처럼 로그 확인
    • f : follow log output
    • t : show timestamp

컨테이너 네트워크 설정

  • docker run -d -p 8080:80 <컨테이너명>
    • -p <호스트포트>:<컨테이너포트> : 호스트 8080포트를 컨테이너의 80으로 매핑
  • docker run --dns=192.168.1.1 <컨테이너명>
    • DNS를 설정
  • docker run -it --add-host=test.com:192.168.1.1 <컨테이너명>
    • --add-host=호스트명:IP
    • /etc/hosts 파일에 "192.168.1.1 test.com" 추가됨

컨테이너 리소스 설정

  • docker run -ti --c 512 ubuntu:16.04 /bin/bash
    • --c : --cpu-share, 기본값은 1024, 여러 컨테이너가 있으면 상대적으로 cpu를 사용
  • docker run -ti --m 300M ubuntu:16.04 /bin/bash
    • --m : --memory, 메모리 제한값, 최소 4M, 기본값은 memory 300M / swap 300M
  • docker run -ti --m 300M --memory-swap 1G ubuntu:16.04 /bin/bash
    • 메모리+swap 제한값, 위의 경우 memory 300M / swap 700M

컨테이너 디렉토리 공유

  • docker run -v /c/Users/kimstar/WebPage:/var/www/html httpd
    • 호스트 디렉토리(C:\Users\kimstar\WebPage)를 컨테이너 디렉토리(/var/www/html)와 공유

관리

이미지 관리 (load/save)

  • docker load < my_image.tar.gz ▶ 이미지 로드
  • docker save my_image:my_tag > my_image.tar.gz ▶ 이미지 저장

컨테이너 관리 (import/export)

  • cat my_container.tar.gz | docker import - my_image:mytag ▶ 컨테이너 로드
  • docker export my_container > my_container.tar.gz ▶ 컨테이너 저장
  • docker rename <old컨테이너명> <new컨테이너명> ▶ 컨테이너 이름 변경

컨테이너/이미지 정리

  • docker kill $(docker ps -q) ▶ 실행중인 모든 컨테이너를 죽임
  • docker rm $(docker ps -q) ▶ 모든 컨테이너를 삭제
  • docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm ▶ 오래된 컨테이너 죽임
  • docker rm -v $(docker ps -a -q -f status=exited) ▶ 정지된 컨테이너 삭제
  • docker rmi $(docker images -q -f dangling=true) ▶ 불필요 이미지 제거
  • docker volume rm $(docker volume ls -q dangling=true) ▶ 불필요 볼륨 제거

컨테이너 모니터링

  • docker stats <컨테이너명> ▶ 한개 컨테이너 상태
  • docker stats <컨테이너명1> <컨테이너명2> ▶ 2개 컨테이너 상태
  • docker stats $(docker ps -q) ▶ 모든 컨테이너 상태
  • docker stats $(docker ps --format '{{.Names}}') ▶ 이름순으로 모든 컨테이너 상태
  • docker ps -a -f ancestor=ubuntu ▶ ubuntu 이미지에서 만들어진 모든 컨테이너 찾기 (-f : 필터링)
  • docker ps -a -f exited=0 ▶ 종료코드 0인 모든 컨테이너 찾기
  • docker top <컨테이너명> ▶ 컨테이너에서 실행중인 프로세스 확인
  • docker port <컨테이너명> ▶ 컨테이너에서 사용하는 포트 확인

컨테이너 파일 복사

  • docker cp test:/etc/password /tmp/etc ▶ test컨테이너 파일을 호스트로 복사 (/etc/password를 /tmp/etc로 복사)
  • docker cp /tmp/etc test:/etc/password ▶ 호스트 파일을 test컨테이너로 복사 (/tmp/etc를 /etc/password로 복사)

컨테이너 파일 변경 확인

  • docker diff test ▶ test컨테이너의 변경된 파일 확인, A(파일추가), D(파일삭제), C(파일변경)

이미지 빌드

이미지 빌드하는 2가지 방법

  • docker commit ▶ 생성과정 추적안됨. 실수하기 쉬움.
  • Dockerfile을 사용하여 docker build ▶ 권장

1) commit 으로 이미지 빌드 실습

  • docker pull ubuntu ▶ 우분투 이미지 다운로드
  • docker run -it ubuntu /bin/bash ▶ 우분투 이미지를 실행하고 쉘실행
    • apt-get -yqq update ▶ 목록 업데이트
    • apt-get -y install apache2 ▶ apahce2 설치
    • exit ▶ 쉘 빠져나감
  • docker ps -a ▶ 설치한 컨테이너 확인
  • docker commit 컨테이너아이디 kimstar/apache2 ▶ 커밋하여 이미지 생성
  • docker images kimstar/apache2 ▶ 이미지 생성 확인
  • docker commit -m="new apache2 image" --author="kimstar" 컨테이너아이디 kimstar/apache2:webserver ▶ 태그 달아서 커밋
    • -m : 메시지
    • -a, --author="" : 작성자
  • docker inspect kimstar/apache2 ▶ 이미지 세부 정보확인
  • docker inspect kimstar/apache2 --format="{{ .Os}}" ▶ 이미지 세부 정보중 OS 확인

2-1) Dockerfile 작성후 docker build로 이미지 만들기

  • Dockerfile
    • build시 설계도와 같음. git등 사용시 유용.
    • 첫줄부터 차례대로 실행.
    • 에러 발생 후 재실행시 에러지점부터 다시 시작 (캐쉬됨)
    • 이미지 빌드시 자동으로 캐시를 생성하고, 다른 이미지 빌드시 이를 사용한다.
    • 캐쉬 무시하려면 : docker build --no-cache
    • 명령어는 대소문자 구분없으나 보통 대문자 사용
    • "#" 으로 주석처리
  • Dockerfile 구성
    • 기반이 되는 이미지 (base image)
    • 컨테이너 안에서 실행되는 명령어
    • 환경변수 등의 설정
    • 컨테이너 안에서 실행되는 데몬 실행
  • .dockignore
    • 무시할 파일들 정의 (불필요파일, 보안)
    • context의 root(docker build를 실행하는 위치)에 위치
    • "#" 으로 주석처리
  • .dockignore 패턴
    • */temp* ▶ 서브디렉토리에서 temp로 시작하는 파일 및 디렉토리 제외
    • */*/temp* ▶ 2레벨 이하의 서브디렉토리에서 temp로 시작하는 파일 및 디렉토리 제외
    • **/*.java ▶ 깊이 상관없이 모든 java 파일 제외
    • temp? ▶ tempa, tempb 와 같은 파일 및 디렉토리

2-2) Dockerizing 실습 (SSH데몬용 컨테이너 만들기)

  • mkdir docker_build
  • cd docker_build
  • vi Dockerfile ▶ 내용은 아래 참조
  • docker build -t "kimstar/sshd:1.0" . ▶ Dockerfile로 이미지 빌드 수행. -t는 태그.
  • docker images ▶ 생성한 이미지 확인가능
  • docker history kimstar/sshd ▶ Dockerizing과정이 시간순으로 보임 (Dockerfile 역순)
  • docker run -d -P --name test_sshd kimstar/sshd ▶ 컨테이너 생성
  • docker port test_sshd 22 ▶ 22포트 외부 노출, 0.0.0.0:32768 이라고 출력되면 내부에서는 32768 포트를 사용함을 의미
  • docker inspect --format '{{ .NetworkSettings.IPAddress }}' test_sshd ▶ 컨테이너의 IP주소를 확인, 접속시 여기서 확인한 것을 사용
  • ssh root@localhost -p 32768 ▶ ssh 접속 (32768 포트)
  • docker run -d -p 22:22 -- name test_sshd2 kimstar/sshd ▶ 호스트포트(외부):내부컨테이너 포트(내부)
  • ssh root@localhost ▶ ssh 접속 (22 포트)
  • docker stop test_sshd test_sshd2 ▶ 컨테이너 중지
  • docker rm test_sshd test_sshd2 ▶ 컨테이너 삭제
  • Dockerfile 예제
FROM ubuntu:16.04 ▶ 사용할 이미지와 태그
MAINTAINER kimstar <abcedfg@gmail.com> ▶ 이미지 만든 사람 정보, 필수 아니지만 보통 입력

RUN apt-get update && apt-get install -y openssh-server  ▶ apt-get 실행
RUN mkdir /var/run/sshd  ▶ 디렉토리 생성
RUN echo 'root:newpassword' | chpasswd ▶ root 새로운 암호 설정
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile" ▶ 환경변수 설정
RUN echo "export VISIBLE=now" >> /etc/profile ▶ 프로파일에 추가

EXPOSE 22 ▶ SSH 포트(22) 노출
CMD ["/usr/sbin/sshd", "-D"] ▶ 이미지 빌드후 컨테이너로 만들때 실행할 내용, ssh를 데몬으로 띄워라.

Dockerfile 명령어

Dockerfile 명령어

명령어설명
FROM베이스 이미지 지정
MAINTAINERDockfile 생성자
RUN명령어 실행
CMD데몬 실행
LABEL라벨 설정
EXPOSE포트 export
ENV환경변수 설정
ADD파일/디렉토리 추가
COPY파일 복사
VOLUME볼륨 마운트
ENTRYPOINT데몬실행
USER사용자 설정
WORKDIR작업디렉토리 설정
ONBUILDbuild 완료후 실행할 명령어

ENV

  • 환경변수 key/value 설정
  • ${A:-B} : A가 있으면 A, 없으면 B
  • ${A:+B} : A가 있으면 B, 없으면 empty
FROM ubuntu:16.04
ENV foo /bar
WORKDIR ${foo}
ADD .$foo
  • ENV 실행시마다 Docker 이미지 생기므로 줄이는것이 좋다.
ENV myName="kim star" \
    myNickName=kimstar

RUN (이미지 생성시 실행)

  • 문법
    • RUN ["명령어", "param1", "param2"] ▶ Exec형태
    • RUN 명령어 param1 param2 ▶ shell 형태 (/bin/sh 을 거쳐 실행됨)
  • 텍스트 파일 생성 팁 : RUN echo "hello" > /aaa/bbb/text.txt
  • RUN 실행시 이미지 새로 생김
    • 이미지는 기존 이미지 레이어에 쌓임
    • Boot2Docker에서의 AUFS는 127개까지 관리할 수 있음
    • 명령어를 줄이는 것이 좋음
# 3번 실행
RUN yum -y install httpd
RUN yum -y install php
RUN yum -y install php-mbstring

#1번 실행
RUN yum -y install httpd php php-mbstring

#1번 실행
RUN yum -y install\
           httpd\
           php\
           php-mbstring

CMD (컨테이너 구동시 실행)

  • Docker 파일에는 하나의 CMD만 가능 (여러개 있으면 마지막것만 실행)
  • 문법
    • CMD ["명령어", "param1", "param2"] ▶ Exec형태
    • CMD 명령어 param1 param2 ▶ shell 형태
    • CMD ["param1", "param2"] ▶ ENTRYPOINT 사용
  • CMD vs RUN
    • RUN은 build때 각 명령을 실행하고 commit
    • CMD는 build때 실행안되며, 컨테이너를 run할때 실행됨
FROM centos:latest

# httpd 설치 - 이미지 생성시 실행
RUN ["yum", "install", "-y", "httpd"]

# httpd 실행 - 컨테이너 구동시 실행
CMD ["/usr/sbin/httpd", "-D", "FORGROUND"]

ENTRYPOINT

  • Docker 파일에는 하나의 ENTRYPOINT만 가능 (여러개 있으면 마지막것만 실행)
  • 문법
    • ENTRYPOINT ["명령어", "param1", "param2"] ▶ Exec형태
    • ENTRYPOINT 명령어 param1 param2 ▶ shell 형태
  • 오버라이드
    • build 시점(docker run 실행시)에 Dockerfile의 CMD 설정은 오버라이드 가능하다
    • 실행시 옵션을 바꿔서 run 할때 유용
    • 구축담당자가 임의의 데몬 실행으로 변경하지 못하게 하려면 CMD 대신 ENTRYPOINT 사용할것
FROM centos:latest
ENTRYPOINT ["top"]
CMD ["-d","10"]

# docker run <이미지>      : top -d 10
# docker run <이미지> -d 2 : top -d 2

ONBUILD

  • build 후 생성된 이미지로를 base image로 다른 이미지 build시 실행할 명령어
  • 관리자가 base image 배포하고 별도의 파일을 추가할때 유용
    1. 관리자는 base image 생성을 위한 Dockerfile에 "ONBUILD ADD website.tar /var/www/html" 추가하여 이미지 생성
    2. 개발자는 필요한 website.tar 생성
    3. 개발자는 관리자가 생성한 base image를 사용한 Dockerfile 파일로 자신의 이미지 생성한다. build시 website.tar 파일을 통해 /var/www/html 에 파일이 추가된다.

WORKDIR

  • 명령을 실행할 디렉토리
    • RUN, CMD, ENTRYPOINT, COPY, ADD
  • 상대/절대경로 가능
  • 경로가 없으면 생성됨

USER

  • 명령을 실행할 유저를 지정
    • RUN, CMD, ENTRYPOINT
  • 미지정시 root

VOLUME

  • VOLUME으로 지정한 디렉토리는 다른 컨테이너에서 마운트할 수 있는 볼륨이 된다.

ADD

  • 호스트의 파일/디렉토리를 이미지 안에 추가
  • 문법
    • ADD <호스트파일경로> <이미지파일경로>
    • ADD ["호스트파일경로", "이미지파일경로"]
  • ADD hom* /mydir/
  • ADD hom?.txt /mydir/
  • ADD http://example.com/foo.zip /mydir/bar.zip
    • 가져온 파일의 권한은 600
    • 압축이 풀리지는 않는다.
    • 인증(로그인 등)이 필요하면 불가
    • 인증 필요시 RUN 명령에서 w g e t 또는 c u r l 등으로 인증하여 사용
  • ADD foo.tar.gz /mydir/ ▶ 압축을 풀어서 넣음
  • ADD ../test /mydir/ ▶ docker build를 실행하는 디렉토리 외부에서 복사 불가

COPY

  • ADD와 유사, 압축/url 불가
  • COPY hom* /mydir/
  • COPY hom?.txt /mydir/

LABEL

  • 이미지 정보를 포함시킬때
  • key=value 형식
  • docker inspect --format="{{ .Config.Labels}} <이미지명> ▶ 생성한 이미지의 정보 확인시 노출

EXPOSE

  • 실행중인 컨테이너가 listen할 포트를 정의
  • 다른 컨테이너와의 link에 사용

Docker Compose

Docker Compose

Docker Compose

  • 개요
    • 컨테이너가 많을때, 동일한 호스트에서 여러 컨테이너를 한번에 올리거나 내릴 수 있음.
    • CI 환경에서 활용
    • Docker Compose 명령어
    • Docker Compose 배포
    • windows용 docker toolbox에는 포함되어 있지 않음
    • docker-compose --version ▶ 버전 확인
    • docker-compose.yml 파일에 정의
  • 명령어
    • docker-compose up -d ▶ 백그라운드 실행
    • docker-compose down ▶ 모두 중지
    • docker-compose restart ▶ 모두 재실행
    • docker-compose restart serverA ▶ serverA 컨테이너만 재실행
    • docker-compose rm ▶ 모든 컨테이너만 삭제
    • docker-compose scale serverA=10 serverB=10 ▶ 생성할 컴포넌트 갯수 지정
    • docker-compose ps ▶ 컨테이너 목록 확인
    • docker-compose logs ▶ 컨테이너 로그 확인
    • docker-compose run serverA /bin/bash ▶ serverA에서 명령어 실행
serverA:
   image: httpd

serverB:
   image: mysql

docker-compose.yml

  • 파일 설정
    • 참고 :
    • image : 사용할 이미지 설정
    • dockerfile : 사용할 dockerfile 설정
    • links : 다른 컨테이너와 링크. /etc/hosts 설정됨.
    • volumes : 마운트할 볼륨
    • ports : 사용할 포트
    • dns : 사용할 dns 주소
    • command : 컨테이너에서 실행할 명령어
    • environment : 환경변수 지정
    • env_file : 환경변수 저장한 파일
  • YAML
    • 들여쓰기(탭X,공백O)로 계층 표기
    • 배열앞에 "- "를 붙임
    • 주석은 #을 사용
    • 공식사이트

워드프레스 실습

version: '2'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

멀티호스트 환경

클러스터링

  • 클러스터링 : 가용성을 위해 시스템이 정지하지 않도록 여러대의 서버와 하드웨어를 1대처럼 묶는 기술
  • Docker 컴포넌트 비교
    • Dokcer Compose : 1대의 호스트에서 여러 컨테이너 관리
    • Docker Swarm : 여러 호스트에서 여러 컨테이너를 클러스터링
    • Docker Machine : 여러 호스트에서 실행환경을 구축
  • 아직은 마이너 버전이므로 운영에서의 사용은 고려 필요

Docker Machine

  • 참고 : Docker Machine / github
  • Docker 실행환경을 커맨드로 생성하여 관리
  • docker-machine create --driver <드라이버명> <생성할도커머신명> ▶ 실행환경 생성
  • 드라이버명 목록 : AWS, Azure, Hyper-V, OpenStack 등
  • docker-machine ls ▶ 관리하는 실행환경 목록
  • docker-machine status <머신명> ▶ 머신의 상태 확인
  • docker-machine ssh <머신명> ▶ SSH 접속
  • docker-machine env --shell cmd <머신명> ▶ cmd(windows환경)를 실행하여 환경변수를 설정
  • docker-machine start <머신명> ▶ start/stop/restart/kill
  • docker-machine scp <머신명>:<파일경로> . ▶ 현재 디렉토리에 머신의 파일을 SCP(Secure Copy Protocol)로 다운로드
  • docker-machine rm -f <머신명> ▶ 실행환경 삭제
  • docker-machine ip <머신명> ▶ IP확인
  • docker-machine inspect <머신명> ▶ 실행환경의 상세정보 확인(CPU, Memory...)

Docker Swarm

  • 참고 : Docker Swarm
  • 클러스터 환경을 구축
  • docker run swarm create ▶ 클러스터 구축을 위한 토큰 발행
  • docker-machine create -d vitualbox --swarm --swarm-master --swarm-discoverty token://<토큰> master ▶마스터 노드 구축
  • docker-machine create -d vitualbox --swarm --swarm-discoverty token://<토큰> node01 ▶ node01 구축
  • docker-machine create -d vitualbox --swarm --swarm-discoverty token://<토큰> node02 ▶ node02 구축
  • docker-machine ls ▶ 클러스터링 노드 확인
  • eval "$(docker-machine env --shell bash --swarm master)" ▶ master 노드의 쉘 접속
  • docker info ▶ 노드 정보 확인

AWS에서 Docker 사용

  • 참고 : Docker for AWS Setup & Prerequisites
  • AWS에서의 Docker 지원
    • Amazon EC2 : EC2 가상서버에 Docker, Docker Machine, Docker Swarm 설치 가능 ▶ 세세한 설정시 사용
    • Amazon ECS : Amazon EC2 Continer Service, EC2를 사용하여 Docker 클러스터링을 위한 관리형 서비스 ▶ 추천
    • Elastic Beanstalk : PasS, Docker를 사용하여 애플리케이션 개발~운영까지 지원 ▶ 단기간 애플리케이션 개발에 유리

광고

댓글 남기기