문서 편집 역링크 PDF로 내보내기 Fold/unfold all 다음에 공유 ... Google+ Twitter LinkedIn Facebook Pinterest Telegram 목차 도커 Docs 도커는 왜 인기를 끌게 되었나? 컨테이너 기술 가상 머신과 도커 가상 머신의 등장 리눅스 컨테이너 도커의 특징 도커의 성능 도커 이미지와 컨테이너 도커 이미지 도커 컨테이너 도커의 이미지 처리 방식 서비스 운영 환경과 도커 지금까지의 서버 환경 클라우드 환경 Immutable Infrastructure Immutable Infrastructure의 장점 도커 요약 도커 설치하기 Windows 도커 사용해보기 도커 명령 search 명령으로 이미지 검색하기 pull 명령으로 이미지 받기 run 명령으로 컨테이너 생성하기 ps 명령으로 컨테이너 목록 확인하기 start 명령으로 컨테이너 시작하기 restart 명령으로 컨테이너 재시작하기 exec 명령으로 외부에서 컨테이너 안의 명령 실행하기 stop 명령으로 컨테이너 정지하기 rm 명령으로 컨테이너 삭제하기 rmi 명령으로 이미지 삭제하기 도커 이미지 생성하기 Dockerfile 작성하기 build 명령으로 이미지 생성하기 Links 출처 관련 문서 Comment OPEN 도커 Docs hadolint 도커 파일 가장 빨리 만나는 Docker 도커 무작정 따라하기 도커 커맨드 docker-compose 도커 실습 Docker Error 컨테이너 이미지 docker networking 도커는 왜 인기를 끌게 되었나? 복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행 할 수 있음 개발, 테스트, 서비스 환경을 하나로 통일하여 효율적으로 관리할 수 있음 컨테이너(이미지)를 전 세계 사람들과 공유 컨테이너 기술 컨테이너는 가상화보다 훨씬 가벼운 기술 가상 머신과 도커 가상 머신의 등장 컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도, 1960년 때에 가상화 개념이 처음 등장 리눅스 컨테이너 컨테이너 안에 가상 공간을 만들지만 실행 파일을 호스트에서 직접 실행 리눅스 커널의 cgroups와 namespaces가 제공하는 기술 도커의 특징 도커는 게스트 OS를 설치하지 않음 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치 이미지 용량이 크게 줄어듦 호스트와 OS 자원(시스템 콜)을 공유 도커는 이미지 생성과 배포에 특화 이미지 버전 관리또 제공하고 중앙 저장소에 이미지를 올리고 받을 수 있음 (push/pull) github 와 비슷한 형태로 도커 이미지를 공유하는 Docker Hub 제공 다양한 API를 제공하여 원하는 만큼 자동화가 가능하여 개발과 서버 운용에 매우 유용 도커의 성능 도커는 하드웨어 가상화 계층이 없음 메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상 머신에 비해 월등히 빠름 호스트와 도커 컨테이너 사이의 성능 차이가 크지 않음(오차 범위 안) 도커 이미지와 컨테이너 도커 이미지 이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태 저장소에 올리고 받는 건 이미지 (push/pull) 도커 컨테이너 컨테이너는 이미지를 실행한 상태 이미지로 여러 개의 컨테이너를 만들 수 있음 운영체제로 치면 이미지는 실행파일이고 컨테이너는 프로세스 도커의 이미지 처리 방식 유니온 파일 시스템 형식(aufs, btrfs, devicemapper) 도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성 컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행 docker hub 및 개인 저장소에서 이미지를 공유할 때 바뀐 부분만 주고 받음 서비스 운영 환경과 도커 지금까지의 서버 환경 물리 서버를 직접 운영 호스팅 또는 IDC 코로게이션 서비스 사용 서버 구입과 설치에 비용과 시간 소요 클라우드 환경 가상화가 발전하면서 클라우드 환경으로 변화 가상 서버를 임대하여 사용한 만큼만 요금 지불 Immutable Infrastructure Imuutable Infrastructure 라는 패러다임이 나옴 호스트 OS와 서비스 운영 환경(서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리 한 번 설정한 운영 환경은 변경하지 않는다(Immutable)는 개념 서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행 서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포 Immutable Infrastructure의 장점 편리한 관리 서비스 환경 이미지만 관리하면 됨 중앙 관리를 통한 체계적인 배포와 관리 이미지 생성에 버전 관리 시스템 활용 확장 이미지 하나로 서버를 계속 찍어낼 수 있음 클라우드 플랫폼의 자동 확장(Auto Scaling) 기능과 연동하여 손쉽게 서비스 확장 테스트 개발자 PC, 테스트 서버에서 이미지를 실행만 하면 서비스 운영 환경과 동일한 환경이 구성됨 테스트가 간편 가볍다 운영체제와 서비스 환경을 분리하여 가볍고(Lightweight) 어디서든 실행 가능한(Portable) 환경 제공 도커는 Immutable Infrastructure 를 구현한 프로젝트 도커 요약 고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고 이미지 저장과 배포(운반)을 의미 도커(Docker)는 부두 노동자를 뜻함. 컨테이너를 다루는 도커의 기능과 비슷함 도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술 도커 설치하기 Windows Windows 에서는 Boot2Docker 를 이용하여 Docker를 사용할 수 있음 다음 URL에서 docker-install.exe 파일을 받기 https://github.com/boot2docker/windows-installer/releases 파일 다운로드가 끝났으면 docker-install.exe 파일을 실행 설치 화면이 표시되면 Next 버튼을 클릭 도커 사용해보기 도커 명령 도커의 명령은 docker <명령> 형식 항상 root 권한으로 실행 search 명령으로 이미지 검색하기 docker search <이미지 이름> 도커는 Docker Hub(https://registry.hub.docker.com)를 통해 이미지를 공유하는 생태계가 구축되어 있음 유명 리눅스 배포한과 오픈 소스 프로젝트(Redis, Nginx 등)의 이미지를 모두 Docker Hub에서 구할 수 있음 이미지와 관련된 명령은 기본적으로 Docker Hub를 이용하도록 설정되어 있음 pull 명령으로 이미지 받기 docker pull <이미지 이름>:<태그> Docker hub 에서 우분투 이미지 받아보기 snippet.sh sudo docker pull ubuntu:latest run 명령으로 컨테이너 생성하기 docker run <옵션> <이미지 이름> <실행할 파일> 이미지를 컨테이너로 생서한 뒤 bash 쉘 실행해보기 snippet.sh sudo docker run -i -t --name hello ubuntu /bin/bash ubuntu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 안의 /bin/bash를 실행 -i(interactive), -t(pseudo-tty) 옵션을 사용하면 실행된 Bash 쉘에 입력 및 출력 가능 –name 옵션으로 컨테이너에 이름을 지정할 수 있음. 이름을 지정하지 않으면 도커가 자동으로 이름을 생성하여 지정 ps 명령으로 컨테이너 목록 확인하기 docker ps 모든 컨테이너 목록을 출력하기 snippet.bash sudo docker ps -a -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력됨 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력됨 start 명령으로 컨테이너 시작하기 docker start <컨테이너 이름> 방금 정지한 컨테이너를 다시 시작하기 snippet.bash sudo docker start hello restart 명령으로 컨테이너 재시작하기 docker restart <컨테이너 이름> os 재부팅하면 컨테이너를 다시 시작해보기 snippet.bash sudo docker restart hello exec 명령으로 외부에서 컨테이너 안의 명령 실행하기 docker exec <컨테이너 이름> <명령> <매개 변수> 현재 컨테이너가 /bin/bash로 실행된 상태 /bin/bash 를 통하지 않고 외부에서 컨테이너 안의 명령 실행해보기 snippet.bash sudo docker exec hello echo "Hello World" 컨테이너 이름 대신 컨테이너 id 를 사용해도 됨 컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없음 stop 명령으로 컨테이너 정지하기 docker stop <컨테이너 이름> rm 명령으로 컨테이너 삭제하기 docker rm <컨테이너 이름> 생성된 컨테이너를 삭제해보기 snippet.bash sudo docker rm hello rmi 명령으로 이미지 삭제하기 docker rmi <이미지 이름>:<태그> 이미지 삭제해보기 snippet.bash sudo docker rmi ubuntu:latest 도커 이미지 생성하기 Dockerfile 작성하기 도커 이미지 설정 파일 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 경로> 앞에서 작성한 Dockerfile 로 이미지 생성해보기 Dockerfile이 저장된 example 디렉터리에서 명령 실행 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 -d 옵션은 컨테이너를 백그라운드로 실행 -p 80:80 옵션으로 호스트의 80번 포트와 컨테이너의 80번 포트를 연결하고 외부에 노출 -v /root/data:/data 옵션으로 호스트의 /root/data 디렉터리를 컨테이너의 /data 디렉터리에 연결 만약 Boot2Docker 를 사용한다면, boot2Docker 는 가상 머신 안에 도커를 실행한 것이므로 호스트 IP 는 ngnix에 바로 접속할 수 없다. Links 도커 커맨드 레퍼런스, https://docs.docker.com/engine/reference/commandline/cli 도커 도큐먼트, https://docs.docker.com 출처 http://www.slideshare.net/pyrasis/docker-fordummies-44424016 http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book https://docs.google.com/document/d/1-yNddpgu71tbFaupqrOrQ23xv8SV_6Y_8OfokPuEQTk/edit docker,, 이미지,, 컨테이너 관련 문서 BlockChain CNM MicroService, 마이크로서비스 OSS Production Docker Image for Apache Airflow OPEN OPEN 컨테이너 인프라 환경 구축을 위한 쿠버네티스 & 도커 클러스터 아키텍처 파이썬 기반구조 Comment Please enable JavaScript to view the comments powered by Disqus.