도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!

도커 무작정 따라하기 - 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다! 도커의 기본 개념부터 설치와 사용 방법까지 설명합니다. <

  1. pyrasis
    도커 무작정 따라하기
    - 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!

    도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
    <
    Transcript Header:
    도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
    Transcript Body:
    • 1. 도커 무작정 따라하기 무작정 따라하기는 ㈜도서출판 길벗의 등록상표입니다. PYRASIS.COM 이재홍 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다! Version 1.0.3, 2015.2.9
    • 2. 이재홍 문서 이용 조건 2 교육 등의 비영리 목적으로만 사용해야 합니다. 사내 교육은 상관 없습니다. 회비, 참가비 등을 받는다면 영리 목적에 해당하므로 이 문서를 이용할 수 없습니다. 회비, 참가비를 받지 않는다 하더라도 마케팅 목적으로 진행되는 행사에는 이 문서를 사용할 수 없습니다.
    • 3. 이재홍 만든 사람 및 슬라이드 소개 3 이재홍 웹사이트: http://pyrasis.com 저서:  가장 빨리 만나는 도커(Docker)  아마존 웹 서비스를 다루는 기술  윈도우 프로젝트 필수 유틸리티: Subversion, Trac, CruiseControl.NET 이 슬라이드는 가장 빨리 만나는 도커의 내용을 요약한 슬라이드입니다. 가장 빨리 만나는 도커의 책 내용은 모두 웹사이트에 공개되어 있습니다.
    • 4. 이재홍 도커는 2013년 3월 Docker, Inc에서 출시한 오픈 소스 컨테이너 프로젝트 현재 전세계적으로 큰 인기를 끌고 있음 도커란 무엇인가? 도커 5
    • 5. 이재홍 AWS, Google Cloud Platform, Microsoft Azure 등의 클라우드 서비스에서 공식 지원 도커란 무엇인가? 도커 6
    • 6. 이재홍 도커란 무엇인가? 도커 도커는 왜 인기를 끌게 되었나?
    • 7. 이재홍 도커란 무엇인가? 도커 복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행할 수 있음
    • 8. 이재홍 도커란 무엇인가? 도커 개발, 테스트, 서비스 환경을 하나로 통일하여 효율적으로 관리할 수 있기 때문!
    • 9. 이재홍 도커란 무엇인가? 도커 컨테이너(이미지)를 전 세계 사람들과 공유
    • 10. 이재홍 도커란 무엇인가? 도커 그건 어떻게 가능하죠?
    • 11. 이재홍 도커란 무엇인가? 도커 리눅스 커널에서 제공하는 컨테이너 기술을 이용
    • 12. 이재홍 도커란 무엇인가? 도커 GitHub와 비슷한 방식의 Docker Hub 제공!
    • 13. 이재홍 도커란 무엇인가? 도커 그런데 컨테이너 기술이 뭐죠?
    • 14. 이재홍 도커란 무엇인가? 도커 컨테이너는 가상화보다 훨씬 가벼운 기술!
    • 15. 이재홍 도커란 무엇인가? 도커 그럼 먼저 먼저 가상화부터...
    • 16. 가상 머신과 도커
    • 17. 이재홍 컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도 1960년 대에 가상화 개념이 처음 등장 가상 머신의 등장 가상 머신과 도커 18
    • 18. 이재홍 컴퓨터 성능이 급격히 좋아지면서 PC에서도 흔히 사용 맥에서 인터넷 뱅킹을 한다던지… 가상 머신의 등장 가상 머신과 도커 19
    • 19. 이재홍 서버 성능은 더욱 더 좋아졌음 가상 머신의 등장 가상 머신과 도커 20
    • 20. 이재홍 그러다 보니 대부분의 시간을 서버가 놀고 있어 -_-; 가상 머신의 등장 가상 머신과 도커 21
    • 21. 이재홍 서버에 가상 머신을 여러 개 띄워서 일을 더 시키자! 가상 머신의 등장 가상 머신과 도커 22
    • 22. 이재홍 그리고 IT 기술이 보편화되면서 서버도 많아졌음 가상 머신의 등장 가상 머신과 도커 23
    • 23. 이재홍 서버 자체를 가상 머신에 집어넣어서 돌리자 가상 머신의 등장 가상 머신과 도커 24
    • 24. 이재홍 가상 머신에 각종 서버 프로그램, DB 등을 설치하여 애플리케이션이나 웹사이트를 실행 가상 머신의 등장 가상 머신과 도커 25
    • 25. 이재홍 미리 구축한 가상 머신 이미지를 여러 서버에 복사하여 실행하면 이미지 하나로 서버를 계속 만들어낼 수 있음 가상 머신의 등장 가상 머신과 도커 26
    • 26. 이재홍 가상화 기술을 이용하여 서버를 임대해주는 서비스가 클라우드 서비스 가상 머신의 등장 가상 머신과 도커 27
    • 27. 이재홍 그런데 가상 머신은 좀 문제가 있어 가상 머신의 문제점 가상 머신과 도커 28
    • 28. 이재홍 컴퓨터를 통째로 만들어내다 보니… 각종 성능 손실이 발생 가상 머신의 문제점 가상 머신과 도커 29
    • 29. 이재홍 인텔과 AMD는 CPU 안에 가상화 기능을 넣기 시작 가상 머신의 문제점 가상 머신과 도커 30
    • 30. 이재홍 그래도 느려… 가상 머신의 문제점 가상 머신과 도커 31
    • 31. 이재홍 호스트와 커널을 공유하는 반가상화 기술이 등장 가상 머신의 문제점 가상 머신과 도커 32
    • 32. 이재홍 이러나 저러나 가상 머신은… 가상 머신의 문제점 가상 머신과 도커 33
    • 33. 이재홍 가상 머신의 문제점 가상 머신과 도커 34 가상 머신은 완전한 컴퓨터 항상 게스트 OS를 설치해야 함 애플리케이션 A 애플리케이션 B 하이퍼바이저(Hypervisor) 실행 파일/라이브러리 게스트 OS 실행 파일/라이브러리 게스트 OS 호스트 OS 서버 https://www.docker.com/whatisdocker/
    • 34. 이재홍 가상 머신의 문제점 가상 머신과 도커 35 이미지 안에 OS가 포함되기 때문에 이미지 용량이 커짐 네트워크로 가상화 이미지를 주고 받는 건 꽤 부담스러움
    • 35. 이재홍 가상 머신의 문제점 가상 머신과 도커 36 오픈소스 가상화 소프트웨어는 OS 가상화에 만 주력  배포와 관리 기능이 부족
    • 36. 이재홍 가상 머신의 문제점 가상 머신과 도커 37 가상 머신의 성능 문제가 있다 보니 리눅스 컨테이너가 나옴
    • 37. 이재홍 컨테이너 안에 가상 공간을 만들지만 실행 파일을 호스트에서 직접 실행 리눅스 컨테이너 가상 머신과 도커 38
    • 38. 이재홍 이건 리눅스 커널의 cgroups와 namespaces가 제공하는 기술 리눅스 컨테이너 가상 머신과 도커 39
    • 39. 이재홍 가상화가 아닌 격리 리눅스 컨테이너 가상 머신과 도커 40
    • 40. 이재홍 도커는 리눅스 컨테이너를 사용!  초기에는 LXC(LinuX Container)를 기반으로 구현  버전 0.9부터는 LXC를 대신하는 libcontainer를 개발하여 사용  실행 옵션으로 선택 가능 리눅스 커널 LXC cgroups namespaces 도커 libvirt systemd-nspawn libcontainer http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer 리눅스 컨테이너 가상 머신과 도커 41
    • 41. 도커의 특징
    • 42. 이재홍 도커는 게스트 OS를 설치하지 않음 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치 이미지 용량이 크게 줄어듦 호스트와 OS 자원(시스템 콜)을 공유 애플리케이션 A 애플리케이션 B 실행 파일/라이브러리 실행 파일/라이브러리 호스트 OS 서버 https://www.docker.com/whatisdocker/ 도커 엔진 도커의 특징 도커의 특징 43
    • 43. 이재홍 호스트 도커 컨테이너 1 0.9945CPU 1 0.9826메모리 쓰기 1 1.0025메모리 읽기 0.9811디스크 I/O 1 0.9626네트워크 1 도커는 하드웨어 가상화 계층이 없음  메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상 머신에 비해 월등히 빠름  호스트와 도커 컨테이너 사이의 성능 차이가 크지 않음(오차 범위 안) 도커 1.1.2에서 우분투 14.04 호스트와 우분투 14.04 컨테이너 성능 측정 도커의 성능 도커의 특징 44
    • 44. 이재홍 도커의 특징 도커의 특징 45 그리고 도커는 이미지 생성과 배포에 특화
    • 45. 이재홍 도커의 특징 도커의 특징 46 이미지 버전 관리도 제공하고 중앙 저장소에 이미지를 올리고 받을 수 있음 (push/pull)
    • 46. 이재홍 도커의 특징 도커의 특징 47 GitHub와 비슷한 형태로 도커 이미지를 공유하는 Docker Hub 제공 (GitHub 처럼 유료 저장소도 제공)
    • 47. 이재홍 도커의 특징 도커의 특징 48 다양한 API를 제공하여 원하는 만큼 자동화 가능 개발과 서버 운영에 매우 유용!
    • 48. 이재홍 그런데 이미지와 컨테이너는 뭐가 다른 거지? 가상 머신의 문제점 가상 머신과 도커 49
    • 49. 도커 이미지와 컨테이너
    • 50. 이재홍 도커 이미지 도커 이미지와 컨테이너 51 이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태
    • 51. 이재홍 도커 이미지 도커 이미지와 컨테이너 52 저장소에 올리고 받는건 이미지 (push/pull)
    • 52. 이재홍 도커 컨테이너 도커 이미지와 컨테이너 53 컨테이너는 이미지를 실행한 상태!
    • 53. 이재홍 도커 컨테이너 도커 이미지와 컨테이너 54 이미지로 여러 개의 컨테이너를 만들 수 있음
    • 54. 이재홍 도커 컨테이너 도커 이미지와 컨테이너 55 운영체제로 치면 이미지는 실행파일이고 컨테이너는 프로세스
    • 55. 이재홍 도커의 이미지 처리 방식 도커 이미지와 컨테이너 56 도커는 이미지의 바뀐 부분을 어떻게 관리하나?
    • 56. 이재홍 도커의 이미지 처리 방식 도커 이미지와 컨테이너 57 유니온 파일 시스템 형식 (aufs, btrfs, devicemapper)
    • 57. 이재홍 실행 파일/라이브러리 실행 파일/라이브러리 바뀐 부분 바뀐 부분 애플리케이션 A 베이스 이미지 도커 엔진 애플리케이션 A’ 애플리케이션 A’’ 애플리케이션 A + 바뀐 부분 애플리케이션 A 도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성 컨테이너로 실행할 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행 도커의 이미지 처리 방식 도커 이미지와 컨테이너 58 http://www.slideshare.net/dotCloud/why-docker
    • 58. 이재홍 도커의 이미지 처리 방식 도커 이미지와 컨테이너 59 Docker Hub 및 개인 저장소에서 이미지를 공유할 때 바뀐 부분만 주고 받음
    • 59. 이재홍 각 이미지는 의존 관계 형성 도커의 이미지 처리 방식 도커 이미지와 컨테이너 60
    • 60. 서비스 운영 환경과 도커
    • 61. 이재홍 지금까지의 서버 환경 서비스 운영 환경과 도커 62 지금까지는 물리 서버를 직접 운영 했음
    • 62. 이재홍 지금까지의 서버 환경 서비스 운영 환경과 도커 63 호스팅 또는 IDC 코로케이션 서비스 사용
    • 63. 이재홍 지금까지의 서버 환경 서비스 운영 환경과 도커 64 서버 구입과 설치에 돈이 많이 들고 시간이 오래 걸림
    • 64. 이재홍 클라우드 환경 서비스 운영 환경과 도커 65 가상화가 발전하면서 클라우드 환경으로 변화
    • 65. 이재홍 클라우드 환경 서비스 운영 환경과 도커 66 가상 서버를 임대하여 사용한 만큼만 요금 지불
    • 66. 이재홍 클라우드 환경 서비스 운영 환경과 도커 67 클릭 몇 번 만으로 가상 서버를 생성
    • 67. 이재홍 클라우드 환경 서비스 운영 환경과 도커 68 이젠 자동으로 서버를 추가하고 삭제하기까지…
    • 68. 이재홍 클라우드 환경 서비스 운영 환경과 도커 69 서버 대수가 많아지면서 사람이 일일이 세팅하기 힘들어짐
    • 69. 이재홍 클라우드 환경 서비스 운영 환경과 도커 70 이제 서버 세팅과 배포는 어떻게?
    • 70. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 71 Immutable Infrastructure라는 패러다임이 나옴
    • 71. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 72 호스트 OS와 서비스 운영 환경 (서버 프로그램, 소스 코드, 컴파일 된 바이너리)을 분리
    • 72. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 73 한 번 설정한 운영 환경은 변경하지 않는다(Immutable)는 개념
    • 73. 이재홍 서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행 소스 코드 rev. 10 운영체제 서버 서비스 운영 환경 이미지 생성 배포 및 실행 소스 코드 rev. 11 소스 코드 rev. 12 소스 코드 rev. 12 운영체제 서버 소스 코드 rev. 12 Immutable Infrastructure 서비스 운영 환경과 도커 74
    • 74. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 75 서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포
    • 75. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 76 클라우드 플랫폼에서 서버를 쓰고 버리는 것과 같이 Immutable Infrastructure도 서비스 운영 환경 이미지를 한 번 쓰고 버림
    • 76. 이재홍  서비스 환경 이미지만 관리하면 됨  중앙 관리를 통한 체계적인 배포와 관리  이미지 생성에 버전 관리 시스템 활용 편리한 관리  이미지 하나로 서버를 계속 찍어낼 수 있음  클라우드 플랫폼의 자동 확장(Auto Scaling) 기능과 연동하여 손쉽게 서비스 확장 확장  개발자 PC, 테스트 서버에서 이미지를 실행만 하면 서비스 운영 환경과 동일한 환경이 구성됨  테스트가 간편 테스트  운영체제와 서비스 환경을 분리하여 가볍고(Lightweight) 어디서든 실행 가능한(Portable) 환경 제공 가볍다 Immutable Infrastructure의 장점 서비스 운영 환경과 도커 77
    • 77. 이재홍 Immutable Infrastructure 서비스 운영 환경과 도커 78 도커는 Immutable Infrastructure를 구현한 프로젝트
    • 78. 도커 요약
    • 79. 이재홍 로고로 알아보는 도커 도커 요약 80 도커 고래 로고 많이들 보셨죠?
    • 80. 이재홍 로고로 알아보는 도커 도커 요약 81 컨테이너를 싣고 다니는 고래
    • 81. 이재홍 로고로 알아보는 도커 도커 요약 82 고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고 이미지 저장과 배포(운반)을 의미
    • 82. 이재홍 로고로 알아보는 도커 도커 요약 83 도커(Docker)는 부두 노동자를 뜻함 컨테이너를 다루는 도커의 기능과 비슷함
    • 83. 이재홍 도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술 Build Ship Run 도커를 요약하면 도커 요약 84
    • 84. 도커 설치하기
    • 85. 이재홍 도커 설치하기 도커 설치하기 86 이제 자신의 컴퓨터에서 명령을 실행하여 직접 도커를 설치하고 사용해봅니다.
    • 86. 이재홍  도커는 리눅스 배포판 종류를 자동으로 인식하여 도커 패키지를 설치해주는 스크립트를 제공 $ sudo wget –qO- https://get.docker.com/ | sh get.docket.com 스크립트로 도커를 설치하면 hello-world 이미지도 자동 설치됨. Hello-world 이미지는 사용하지 않을 것이므로 모두 삭제 $ sudo docker rm `sudo docker ps -aq` $ sudo docker rmi hello-world 자동 설치 스크립트 도커 설치하기: 리눅스 87
    • 87. 이재홍  자동 설치 스크립트를 사용하지 않고 우분투에서 직접 설치하기. 버전은 14.04 LTS 64비트 기준 $ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker /usr/bin/docker.io 실행 파일을 /usr/local/bin/docker로 링크하여 사용 우분투 도커 설치하기: 리눅스 88
    • 88. 이재홍  자동 설치 스크립트를 사용하지 않고 레드햇 엔터프라이즈 리눅스(RHEL)와 CentOS에서 패키지로 직접 설치하기  RHEL과 CentOS 6 패키지 저장소에는 docker-io가 없으므로 EPEL(Fedora Extra Packages For Enterprise Linux) 저장소를 사용할 수 있도록 설정 $ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo yum install docker-io CentOS 6 RedHat Enterprise Linux, CentOS 도커 설치하기: 리눅스 89
    • 89. 이재홍  AWS EC2에 설치되는 Amazon Linux(RHEL 기반)는 EPEL 저장소를 바로 사용할 수 있으므로 epel-release-6-8.noarch.rpm을 설치하지 않아도 됨  CentOS 7에서는 docker 패키지를 설치 $ sudo yum install docker CentOS 7 $ sudo service docker start Docker 서비스 실행하기 $ sudo chkconfig docker on 부팅했을 때 자동으로 실행하기 RedHat Enterprise Linux, CentOS 도커 설치하기: 리눅스 90
    • 90. 이재홍  배포판 버전이 오래되었거나, CentOS 같이 버전업이 보수적인 배포판에서는 도커 패키지 버전이 낮은 경우가 있음  배포판 별 패키지가 아닌 빌드 된 바이너리를 직접 사용하는 방법 $ sudo service docker stop $ sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O $(type -P docker) $ sudo service docker start 이미 패키지로 설치했을 때 최신 바이너리 사용하기 도커 설치하기: 리눅스 91
    • 91. 이재홍 $ wget https://get.docker.com/builds/Linux/x86_64/docker-latest $ chmod +x docker-latest $ sudo mv docker-latest /usr/local/bin/docker $ sudo /usr/local/bin/docker -d 새로 설치할 때 URL을 docker-latest로 지정하면 가장 최신 버전을 받고, docker-1.3.0처럼 지정하면 특정 버전을 받음 최신 바이너리 사용하기 도커 설치하기: 리눅스 92
    • 92. 이재홍  Mac OS X에서는 Boot2Docker를 이용하여 도커를 사용할 수 있음  다음 URL에서 .pkg 파일을 받기 https://github.com/boot2docker/osx-installer/releases Mac OS X 도커 설치하기 93
    • 93. 이재홍  파일 다운로드가 끝났으면 .pkg 파일 실행  설치화면이 표시되면 계속 버튼을 클릭 Mac OS X 도커 설치하기 94
    • 94. 이재홍  기본 위치에 설치 Mac OS X 도커 설치하기 95
    • 95. 이재홍  암호 입력창이 표시되면 관리자 암호를 입력하고 소프트웨어 설치 버튼을 클릭 1 2 Mac OS X 도커 설치하기 96
    • 96. 이재홍  설치가 완료되었으면 닫기 버튼 클릭 Mac OS X 도커 설치하기 97
    • 97. 이재홍  Finder를 실행하고 응용 프로그램에서 boot2docker를 실행 1 2 Mac OS X 도커 설치하기 98
    • 98. 이재홍  boot2docker를 실행하면 터미널 창이 실행됨  잠시 기다리면 자동으로 boot2docker.iso를 이용하여 가상 머신이 생성되고, 가상 머신에 접속됨(Boot2Docker는 내부족으로 VirtualBox가 함께 설치됨) Mac OS X 도커 설치하기 99
    • 99. 이재홍  Windows에서는 Boot2Docker를 이용하여 Docker를 사용할 수 있음  다음 URL에서 docker-install.exe 파일을 받기 https://github.com/boot2docker/windows-installer/releases Windows 도커 설치하기 100
    • 100. 이재홍  파일 다운로드가 끝났으면 docker-install.exe 파일을 실행  설치 화면이 표시되면 Next 버튼을 클릭 Windows 도커 설치하기 101
    • 101. 이재홍  기본 위치에 설치  Next 버튼 클릭 Windows 도커 설치하기 102
    • 102. 이재홍  설치할 요소 선택  Boot2Docker Management script and ISO: Boot2Docker를 설치할 것이므로 반드시 선택  VirtualBox: VirtualBox를 설치하지 않았다면 이 부분을 선택  MSYS-git UNIX tools: Windows용 Git을 설치하지 않았다면 이 부분을 선택  선택이 완료되었으면 Next 버튼을 클릭 Windows 도커 설치하기 103
    • 103. 이재홍  시작 메뉴에 등록할 이름 설정  기본 값 그대로 사용하고 Next 버튼을 클릭 Windows 도커 설치하기 104
    • 104. 이재홍  Boot2Docker 경로를 환경 변수에 등록할지 설정  기본값 그대로 사용하고, Next 버튼을 클릭 Windows 도커 설치하기 105
    • 105. 이재홍  Install 버튼을 클릭하여 Boot2Docker를 설치 Windows 도커 설치하기 106
    • 106. 이재홍  설치가 완료되면 Finish 버튼을 클릭 Windows 도커 설치하기 107
    • 107. 이재홍  설치가 끝난 뒤 바탕화면에 생성된 Boot2Docker Start 아이콘을 더블 클릭. 만약 실행 파일 선택 창이 나오면 Git Bash의 sh.exe를 선택  명령 프롬프트 창이 표시된 뒤 잠시 기다리면 자동으로 boot2docker.iso를 이용하여 가상 머신이 생성되고, 가상 머신에 접속됨. 중간에 VirtualBox 관리가 권한 요청 창이 나오면 예(Y) 버튼을 클릭 Windows 도커 설치하기 108
    • 108. 도커 사용해보기
    • 109. 이재홍 도커의 명령은 docker 형식 예) docker run, docker push 항상 root 권한으로 실행 docker + 도커 명령 도커 사용해보기 110
    • 110. 이재홍 도커 사용해보기 도커 사용해보기 111 앞으로 나오는 모든 명령을 차례대로 입력하면서 실습을 진행합니다.
    • 111. 이재홍 docker search $ sudo docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Official Ubuntu base image 383 stackbrew/ubuntu Official Ubuntu base image 40 crashsystems/gitlab-docker A trusted, regularly updated build of GitL... 19 [OK] dockerfile/ubuntu Trusted Ubuntu (http://www.ubuntu.com/) Bu... 15 [OK] ubuntu-upstart Upstart is an event-based replacement for ... 7 cmfatih/phantomjs PhantomJS [ phantomjs 1.9.7, casperjs 1.1.... 5 [OK] dockerfile/ubuntu-desktop Trusted Ubuntu Desktop (LXDE) (http://lxde... 5 [OK] lukasz/docker-scala Dockerfile for installing Scala 2.10.3, Ja... 5 [OK] litaio/ruby Ubuntu 14.04 with Ruby 2.1.2 compiled from... 5 [OK]  Docker Hub에서 이미지 검색해보기  보통 ubuntu, centos, redis 등 OS나 프로그램 이름을 가진 이미지가 공식 이미지  나머지는 사용자들이 만들어서 공개한 이미지 search 명령으로 이미지 검색하기 도커 사용해보기 112
    • 112. 이재홍 도커는 Docker Hub(https://registry.hub.docker.com)를 통해 이미지를 공유하는 생태계가 구축되어 있음 유명 리눅스 배포판과 오픈 소스 프로젝트(Redis, Nginx 등)의 이미지를 모두 Docker Hub에서 구할 수 있음 이미지와 관련된 명령은 기본적으로 Docker Hub를 이용하도록 설정되어 있음 search 명령으로 이미지 검색하기 도커 사용해보기 113
    • 113. 이재홍  Docker Hub에서 이미지를 검색한 뒤 해당 이미지의 Tags 탭에서 이미지의 버전을 볼 수 있음 search 명령으로 이미지 검색하기 도커 사용해보기 114
    • 114. 이재홍  sudo를 매번 입력하지 않으려면? $ sudo su # 처음부터 root 계정으로 로그인하거나 sudo su 명령을 사용하여 root 계정으로 전환 $ sudo usermod -aG docker ${USER} $ sudo service docker restart 또는, 현재 계정을 docker 그룹에 포함(docker 그룹은 root 권한과 동일하므로 꼭 필요한 계정만 포함) 현재 계정에서 로그아웃한 뒤 다시 로그인 sudo 입력하지 않기 도커 사용해보기 115
    • 115. 이재홍 docker pull :  Docker Hub에서 우분투 이미지 받아보기  이미지 이름 뒤에 latest를 설정하면 최신 버전을 받음  ubuntu:14.04, ubuntu:12.10처럼 태그를 지정할 수 있음  이미지 이름에서 pyrasis/ubuntu처럼 / 앞에 사용자명을 지정하면 해당 사용자가 올린 이미지를 받음(공식 이미지는 사용자명이 붙지 않음)  호스트에 설치된 리눅스 배포판과 도커 이미지의 배포판 종류는 달라도 됨. 즉 CentOS에서 우분투 컨테이너를 실행할 수 있음 $ sudo docker pull ubuntu:latest pull 명령으로 이미지 받기 도커 사용해보기 116
    • 116. 이재홍 docker images  모든 이미지를 출력해보기 docker images ubuntu처럼 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력됨 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED V IRTUAL SIZE ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB images 명령으로 이미지 목록 출력하기 도커 사용해보기 117
    • 117. 이재홍 docker run  이미지를 컨테이너로 생성한 뒤 Bash 셸 실행해보기 ubuntu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 않의 /bin/bash를 실행 -i(interactive), -t(Pseudo-tty) 옵션을 사용하면 실행된 Bash 셸에 입력 및 출력 가능 --name 옵션으로 컨테이너에 이름을 지정할 수 있음. 이름을 지정하지 않으면 도커가 자동으로 이름을 생성하여 지정 $ sudo docker run -i -t --name hello ubuntu /bin/bash run 명령으로 컨테이너 생성하기 도커 사용해보기 118
    • 118. 이재홍 cd, ls 명령으로 컨테이너 내부를 둘러본 뒤 exit를 입력하여 Bash 셸에서 빠져 나오기 우분투 이미지에서 /bin/bash 실행 파일을 실행했기 때문에 여기서 빠져나오면 컨테이너가 정지(stop)됨 run 명령으로 컨테이너 생성하기 도커 사용해보기 119
    • 119. 이재홍 $ sudo service docker restart # /etc/sysconfig/docker # # Other arguments to pass to the docker daemon process # These will be parsed by the sysv initscript and appended # to the arguments list passed to docker –d other_args="--selinux-enabled --exec-driver=lxc" unable to remount sys readonly: unable to mount sys as readonly max retries reached 참고 CentOS에서 다음과 같은 에러가 발생한다면 /etc/sysconfig/docker 파일에서 다음과 같이 –-exec-driver=lxc를 추가 Docker 서비스 재시작 run 명령으로 컨테이너 생성하기 도커 사용해보기 120
    • 120. 이재홍 docker ps  모든 컨테이너 목록을 출력하기  -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력됨  옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력됨 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6338ce52d07c ubuntu:latest /bin/bash 4 seconds ago Exited (0) Less than a second ago hello 현재 컨테이너는 정지된 상태. 앞에서 컨테이너를 생성할 때 이름을 hello로 지정했으므로 컨테이너 목록에서도 hello로 표시 ps 명령으로 컨테이너 목록 확인하기 도커 사용해보기 121
    • 121. 이재홍 docker start  방금 정지한 컨터이너를 다시 시작하기 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨 $ sudo docker start hello $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6338ce52d07c ubuntu:latest /bin/bash 15 minutes ago Up 3 seconds hello  컨테이너를 시작했으면 컨테이너 목록 출력해보기 hello 컨테이너가 시작되었음 start 명령으로 컨테이너 시작하기 도커 사용해보기 122
    • 122. 이재홍 docker restart  OS 재부팅처럼 컨테이너를 다시 시작해보기 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨 $ sudo docker restart hello restart 명령으로 컨테이너 재시작하기 도커 사용해보기 123
    • 123. 이재홍 docker attach  방금 시작한 컨테이너에 접속해보기  명령을 실행한 뒤 엔터를 한 번 더 입력하면 Bash 셸이 표시됨  컨테이너 이름 대신 컨테이너 ID를 사용해도 됨  여기서는 /bin/bash를 실행했기 때문에 명령을 자유롭게 입력할 수 있음. 단 DB나 서버 애플리케이션을 실행하면 입력은 할 수 없고 출력만 보게됨  Bash 셸에서 exit 또는 Ctrl+D를 입력하면 컨테이너가 정지됨 $ sudo docker attach hello root@6338ce52d07c:/# 여기서는 Ctrl+P, Ctrl+Q를 차례대로 입력하여 컨테이너를 정지하지 않고, 빠져 나오기 attach 명령으로 컨테이너에 접속하기 도커 사용해보기 124
    • 124. 이재홍 docker exec  현재 컨테이너가 /bin/bash로 실행된 상태  /bin/bash를 통하지 않고 외부에서 컨테이너 안의 명령 실행해보기  컨테이너 이름 대신 컨테이너 ID를 사용해도 됨  컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없음 $ sudo docker exec hello echo "Hello World" Hello World 컨테이너 안의 echo 명령을 실행하고 매개 변수로 "Hello World"를 지정했기 때문에 Hello World가 출력됨  docker exec 명령은 이미 실행된 컨테이너에 apt-get, yum 명령으로 패키지를 설치하거나 각종 데몬을 실행할 때 활용 exec 명령으로 외부에서 컨테이너 안의 명령 실행하기 도커 사용해보기 125
    • 125. 이재홍 docker stop  먼저 실행된 컨테이너 목록 출력하기 $ sudo docker stop hello hello 컨테이너를 정지했기 때문에 아무것도 나오지 않음 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6338ce52d07c ubuntu:latest /bin/bash 51 minutes ago Up 2 minutes hello  컨테이너 정지해보기(컨테이너 이름 대신 컨테이너 ID도 사용해도 됨)  실행된 컨테이너 목록을 출력해보기 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES stop 명령으로 컨테이너 정지하기 도커 사용해보기 126
    • 126. 이재홍 docker rm  생성된 컨테이너를 삭제해보기 $ sudo docker rm hello hello 컨테이너를 삭제했기 때문에 아무것도 나오지 않음  모든 컨테이너 목록을 출력해보기 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 컨테이너 이름 대신 컨테이너 ID를 사용해도 됨 rm 명령으로 컨테이너 삭제하기 도커 사용해보기 127
    • 127. 이재홍 docker rmi :  이미지 삭제해보기 $ sudo docker rmi ubuntu:latest ubuntu 이미지를 삭제했기 때문에 아무것도 나오지 않음  이미지 목록을 출력해보기 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE  이미지 이름 대신 이미지 ID를 사용해도 됨  docker rmi ubuntu처럼 이미지 이름만 지정하면 태그는 다르지만 ubuntu 이름을 가진 모든 이미지가 삭제됨 rmi 명령으로 이미지 삭제하기 도커 사용해보기 128
    • 128. 도커 이미지 생성하기
    • 129. 이재홍 Dockerfile 도커 이미지 설정 파일 Dockerfile에 설정된 대로 이미지를 생성하게 됨 Dockerfile 작성하기 도커 이미지 생성하기 130
    • 130. 이재홍  먼저 example 디렉터리를 생성한 뒤 example 디렉터리로 이동하기 ~$ mkdir example ~$ cd example Dockerfile 작성하기 도커 이미지 생성하기 131
    • 131. 이재홍  다음 내용을 example 디렉터리 아래에 Dockerfile로 저장하기  우분투 14.04를 기반으로 nginx 서버를 설치한 도커 이미지를 생성하는 예제 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 example/Dockerfile # 어떤 이미지를 기반으로 할지 설정. : 형식 # 메인테이너 정보 # RUN으로 셸 스크립트 혹은 명령 실행 # 이미지 생성 중에는 사용자 입력을 받을 수 없으므로 apt-get install에서 –y 옵션 사용 # 호스트와 공유할 디렉터리 목록 # 다음 CMD에서 설정한 실행 파일이 실행될 디렉터리 # 컨테이너가 시작되었을 때 실행할 실행 파일 또는 스크립트 # 호스트와 연결할 포트 번호 Dockerfile 작성하기 도커 이미지 생성하기 132 https://github.com/pyrasis/dockerbook/blob/master/Chapter04/Dockerfile
    • 132. 이재홍 docker build  앞에서 작성한 Dockerfile로 이미지 생성해보기  Dockerfile이 저장된 example 디렉터리에서 명령 실행 ~/example$ sudo docker build --tag hello:0.1 . hello:0.1 이미지가 생성됨  --tag 옵션으로 이미지 이름과 태그를 설정할 수 있음  이미지 이름만 설정하면 태그는 latest로 설정됨  잠시 기다리면 이미지가 생성됨. 이미지 목록 출력해보기 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 e54ca5efa2e9 Less than a second ago 276.1 MB ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB hello 0.1 2031ee0736e8 9 minutes ago 298.4 MB build 명령으로 이미지 생성하기 도커 이미지 생성하기 133
    • 133. 이재홍  앞에서 생성한 이미지를 실행해보기 $ 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 디렉터리에 연결 build 명령으로 이미지 생성하기 도커 이미지 생성하기 134
    • 134. 이재홍  실행된 컨테이너 목록을 출력해보기 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c06a0bebab6 hello:0.1 nginx 10 minutes ago Up 10 minutes 443/tcp, 0.0.0.0:80-> 80/tcp hello-nginx hello-nginx 컨테이너가 실행되었음 웹 브라우저를 실행하고 http:// :80으로 접속하면 Welcome to nginx! 페이지가 표시됨 build 명령으로 이미지 생성하기 도커 이미지 생성하기 135
    • 135. 이재홍  만약 Boot2Docker를 사용한다면?  Boot2Docker는 가상 머신 안에 도커를 실행한 것이므로 호스트 IP로는 ngnix에 바로 접속할 수 없다.  boot2docker ip 명령으로 가상 머신의 IP 주소 알아내기  Windows에서는 Git Bash에서 다음 명령 실행 $ boot2docker ip The VM's Host only interface IP address is: 192.168.59.103 Boot2Docker 가상 머신의 IP 주소가 출력됨 웹 브라우저를 실행하고 http:// :80으로 접속하면 Welcome to nginx! 페이지가 표시됨 build 명령으로 이미지 생성하기 도커 이미지 생성하기 136
    • 136. 이재홍 더 자세한 내용은... 137 더 자세한 내용은 가장 빨리 만나는 도커를 참조해주세요. 책 내용은 모두 웹사이트에 공개되어 있습니다. http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the- really-impatient-book  Docker 개인 저장소 구축하기  Dockerfile 상세 설명  Docker로 애플리케이션 배포하기  Docker 모니터링하기  Amazon Web Services에서 Docker 사용하기  Google Cloud Platform에서 Docker 사용하기  Microsoft Azure에서 Docker 사용하기  Docker Hub 사용하기  Docker Remote API 사용하기  CoreOS 사용하기  Docker로 워드프레스 블로그 구축하기(MySQL)  Docker로 Ruby on Rails 애플리케이션 구축하기(MySQL, PostgreSQL)  Docker로 Django 애플리케이션 구축하기(Oracle, MySQL, PostgreSQL)  Docker 활용 시나리오  Docker 명령어 및 옵션 목록
    • 137. 이재홍 YouTube 동영상 강의 138 생활코딩 이고잉님과 함께하는 저의 동영상 강의입니다.
    • 138. 감사합니다
    View More

Recent Reviews

  1. gadian88
    gadian88
    4/5,
    Version: 08/02/2015
    감사합니다.
  2. Jeonghwan Kim
    Jeonghwan Kim
    5/5,
    Version: 08/02/2015
    많은 도움이 되었습니다.
  3. doc
    doc
    3/5,
    Version: 08/02/2015
    우아 정말 대단하십니다.!! 감사합니다.
  4. JoongSoo Park
    JoongSoo Park
    4/5,
    Version: 08/02/2015
    정말 좋은자료네요 감사합니다
  5. uni4love
    uni4love
    4/5,
    Version: 08/02/2015
    docker를 접할 때, 필요성이라든가, 활용성 측면에서, 이 자료를 가장 먼저 봐야겠네요. 아주 좋은 참고가 되었습니다. 감사합니다.
  6. doc
    doc
    4/5,
    Version: 08/02/2015
    감사합니다. 깔끔한 설명덕에 쉽게 이해했네요.
  7. Jinil Ha
    Jinil Ha
    5/5,
    Version: 08/02/2015
    너무나 완벽한 설명 감사합니다!
  8. Hancom Inc
    Hancom Inc
    5/5,
    Version: 08/02/2015
    고맙습니다.
  9. karistuck
    karistuck
    4/5,
    Version: 08/02/2015
    감사합니다 ( _ _)
  10. pyrasis
    pyrasis
    5/5,
    Version: 08/02/2015