ݺߣ

ݺߣShare a Scribd company logo
이것은 극단적이고 작위적으로 설정된 미생의 이야기입니다.
IT 회사에 재직중인 청년 나개발씨는 어느 날 다음과 같은 요구 사항을 전달받게 됩니다.
1. 성수기를 맞이하여 클라우드 환경에 서버를 1000개로 증설할 것.
2. 현재 운용중인 서버와 동일한 환경으로 서버를 세팅하고 서비스에 차질이 없도록 할 것.
3. 현재 운용중인 서버에 설치된 소프트웨어 목록
- 웹서버 9.99 버전
- 관련 보안 패치 78건
- 모니터링 툴 1.78 버전
- 각종 라이브러리 123건
이미 퇴사한 개발자가 구축해 둔 환경이었고, 참고할 문서도 없었지만
나개발씨는 정신을 부여잡고 최선을 다해 업무에 임했답니다.
우여곡절 끝에 1000개의 서버에 모든 소프트웨어를 설치했지만
시간 부족으로 제대로 된 테스트 없이 서비스를 오픈하게 됩니다.
그러나 오픈 직후. 무려 658개의 서버에서 서비스가 제대로 동작하지 않는 것을 발견했습니다.
문제의 발생 원인은 다음과 같았습니다.
- 머신의 환경설정이 제각각이었다.
- 설치해야 할 소프트웨어의 버전이 잘못되었다.
- 머신에 기존에 설치된 소프트웨어와 나개발씨가 설치한 소프트웨어가 충돌을 일으켰다.
- 나개발씨의 작업이 수행되는 도중 서버의 소스코드가 변경되었으나 반영되지 않았다.
문제를 겪은 나개발씨는 다음과 같은 고민을 하게 됩니다.
한번 구축해 둔 환경을 완벽하게 동일한 조건으로 여러 번 배포할 수 없을까?
수정 사항이 발생할 경우, 한번의 반영으로 모든 시스템에 배포할 수 없을까?
나개발씨는 이미 많은 사람들이 비슷한 문제를 겪었으며
해결방법 중 하나로 제시한 기술에 대해 알게 되었습니다.
그것은 바로 [컨테이너] 라는 이름의 기술이었습니다.
나개발씨는 기술적으로 살펴 보기전에 [컨테이너]의 사전적 의미를 다시 찾아보았습니다.
화물 수송에 주로 쓰는 쇠로 만들어진 큰 상자.
짐 꾸리기가 편하고 운반이 쉬우며, 안에 들어 있는 화물을 보호할 수 있는 장점이 있다.
나개발씨는 사전적 의미를 나름대로 기술적 의미로 치환해 보았습니다.
사전적 의미 : 화물 수송에 주로 쓰는 쇠로 만들어진 큰 상자.
짐 꾸리기가 편하고 운반이 쉬우며, 안에 들어 있는 화물을 보호할 수 있는 장점이 있다.
기술적 의미 : 소프트웨어 배포에 주로 쓰는 코드로 만들어진 큰 상자.
소프트웨어를 꾸리기가 편하고 배포가 쉬우며. 안에 들어있는 소프트웨어를 보호할 수
있다는 장점이 있다.
나개발씨는 본격적으로 본인이 겪은 문제를 [컨테이너] 기술로
어떻게 해결할 수 있을지 고민해 보았습니다.
- 머신의 환경설정이 제각각이었다.
- 설치해야 할 소프트웨어의 버전이 잘못되었다.
=> [컨테이너] 기술을 이용해 한번 구축해 둔 환경과 필요한 버전의 여러 소프트웨어를
하나의 [이미지] 로 묶어서 보관하여 재사용할 수 있다.
=> 한번 만들어진 [이미지] 는 언제 어디서나 내용 그대로 풀어서 구동할 수 있다.
- 머신에 기존에 설치된 소프트웨어와 나개발씨가 설치한 소프트웨어가 충돌을 일으켰다.
 [컨테이너] 로 배포된 애플리케이션은 각기 독립된 환경 ( 파일 시스템, 네트워크, 운영 환경 )
을 보장 받기 때문에 서로 다른 영역과 충돌하는 문제가 없다.
- 나개발씨의 작업이 수행되는 도중 서버의 소스코드가 변경되었으나 반영되지 않았다.
 개발자가 소스 코드를 변경하면 자동으로 [이미지] 를 만들어 한번만 생성하고
해당 내용을 모든 머신에 동일하게 배포할 수 있다.
나개발씨는 다시 처음으로 돌아가 요구사항을 분석해 보기 시작 했습니다.
1. 성수기를 맞이하여 클라우드 환경에 서버를 1000개로 증설할 것.
2. 현재 운용중인 서버와 동일한 환경으로 서버를 세팅하고 서비스에 차질이 없도록 할 것.
3. 현재 운용중인 서버에 설치된 소프트웨어 목록
- 웹서버 9.99 버전
- 관련 보안 패치 78건
- 모니터링 툴 1.78 버전
- 각종 라이브러리 123건
=> 배포할 소프트웨어를 하나의 [이미지]로 만들어 동일한 환경으로 1000개의 서버에 한번에 배포한다!
좌절을 겪었지만 멋지게 문제를 해결해 낸 나개발씨의 이야기를 보며 우리도 [컨테이너]를 사용해봅시다!
[컨테이너] 는 일반적인 개념이며 이를 구체적으로 구현해 놓은 것들은 여러가지가 있습니다.
여러가지 [컨테이너 기술] 중 우리는 [도커] 라는 솔루션을 사용해 볼 것입니다.
한번 더 컨테이너를 이용할 때 얻을 수 있는 이점에 대해 정리해 봅시다.
이동성 : 어느 곳에서 작업하든 동일한 결과를 재사용할 수 있습니다.
일관성 있는 환경 : 배포하는 곳이 어디든 일관된 환경을 보장 받습니다.
배포의 편의성 : 애플리케이션과 종속항목을 하나의 패키지(이미지)로 묶어
관리하고 배포할 수 있습니다.
리치고 기술세미나 도커1주차_프롤로그
[미리 만들어 둔 이미지를 다운로드 받아서 컨테이너로 실행 호스트의 포트 80번을 컨테이너의 포트 80번과 맵핑]
$ docker run –d –p 80:80 --name gumin-web rnals622/docker-example
[실행중인 컨테이너의 목록을 출력]
$ docker ps
[실행중인 컨테이너의 로그를 출력]
$ docker logs –f gumin-web
[실행중인 컨테이너를 정지]
$ docker stop gumin-web
[컨테이너를 삭제]
$ docker rm gumin-web
https://katacoda.com/courses/dock
er/deploying-first-container

More Related Content

리치고 기술세미나 도커1주차_프롤로그

  • 1. 이것은 극단적이고 작위적으로 설정된 미생의 이야기입니다.
  • 2. IT 회사에 재직중인 청년 나개발씨는 어느 날 다음과 같은 요구 사항을 전달받게 됩니다.
  • 3. 1. 성수기를 맞이하여 클라우드 환경에 서버를 1000개로 증설할 것. 2. 현재 운용중인 서버와 동일한 환경으로 서버를 세팅하고 서비스에 차질이 없도록 할 것. 3. 현재 운용중인 서버에 설치된 소프트웨어 목록 - 웹서버 9.99 버전 - 관련 보안 패치 78건 - 모니터링 툴 1.78 버전 - 각종 라이브러리 123건
  • 4. 이미 퇴사한 개발자가 구축해 둔 환경이었고, 참고할 문서도 없었지만 나개발씨는 정신을 부여잡고 최선을 다해 업무에 임했답니다.
  • 5. 우여곡절 끝에 1000개의 서버에 모든 소프트웨어를 설치했지만 시간 부족으로 제대로 된 테스트 없이 서비스를 오픈하게 됩니다.
  • 6. 그러나 오픈 직후. 무려 658개의 서버에서 서비스가 제대로 동작하지 않는 것을 발견했습니다.
  • 7. 문제의 발생 원인은 다음과 같았습니다. - 머신의 환경설정이 제각각이었다. - 설치해야 할 소프트웨어의 버전이 잘못되었다. - 머신에 기존에 설치된 소프트웨어와 나개발씨가 설치한 소프트웨어가 충돌을 일으켰다. - 나개발씨의 작업이 수행되는 도중 서버의 소스코드가 변경되었으나 반영되지 않았다.
  • 8. 문제를 겪은 나개발씨는 다음과 같은 고민을 하게 됩니다. 한번 구축해 둔 환경을 완벽하게 동일한 조건으로 여러 번 배포할 수 없을까? 수정 사항이 발생할 경우, 한번의 반영으로 모든 시스템에 배포할 수 없을까?
  • 9. 나개발씨는 이미 많은 사람들이 비슷한 문제를 겪었으며 해결방법 중 하나로 제시한 기술에 대해 알게 되었습니다.
  • 10. 그것은 바로 [컨테이너] 라는 이름의 기술이었습니다.
  • 11. 나개발씨는 기술적으로 살펴 보기전에 [컨테이너]의 사전적 의미를 다시 찾아보았습니다. 화물 수송에 주로 쓰는 쇠로 만들어진 큰 상자. 짐 꾸리기가 편하고 운반이 쉬우며, 안에 들어 있는 화물을 보호할 수 있는 장점이 있다.
  • 12. 나개발씨는 사전적 의미를 나름대로 기술적 의미로 치환해 보았습니다. 사전적 의미 : 화물 수송에 주로 쓰는 쇠로 만들어진 큰 상자. 짐 꾸리기가 편하고 운반이 쉬우며, 안에 들어 있는 화물을 보호할 수 있는 장점이 있다. 기술적 의미 : 소프트웨어 배포에 주로 쓰는 코드로 만들어진 큰 상자. 소프트웨어를 꾸리기가 편하고 배포가 쉬우며. 안에 들어있는 소프트웨어를 보호할 수 있다는 장점이 있다.
  • 13. 나개발씨는 본격적으로 본인이 겪은 문제를 [컨테이너] 기술로 어떻게 해결할 수 있을지 고민해 보았습니다. - 머신의 환경설정이 제각각이었다. - 설치해야 할 소프트웨어의 버전이 잘못되었다. => [컨테이너] 기술을 이용해 한번 구축해 둔 환경과 필요한 버전의 여러 소프트웨어를 하나의 [이미지] 로 묶어서 보관하여 재사용할 수 있다. => 한번 만들어진 [이미지] 는 언제 어디서나 내용 그대로 풀어서 구동할 수 있다.
  • 14. - 머신에 기존에 설치된 소프트웨어와 나개발씨가 설치한 소프트웨어가 충돌을 일으켰다.  [컨테이너] 로 배포된 애플리케이션은 각기 독립된 환경 ( 파일 시스템, 네트워크, 운영 환경 ) 을 보장 받기 때문에 서로 다른 영역과 충돌하는 문제가 없다.
  • 15. - 나개발씨의 작업이 수행되는 도중 서버의 소스코드가 변경되었으나 반영되지 않았다.  개발자가 소스 코드를 변경하면 자동으로 [이미지] 를 만들어 한번만 생성하고 해당 내용을 모든 머신에 동일하게 배포할 수 있다.
  • 16. 나개발씨는 다시 처음으로 돌아가 요구사항을 분석해 보기 시작 했습니다. 1. 성수기를 맞이하여 클라우드 환경에 서버를 1000개로 증설할 것. 2. 현재 운용중인 서버와 동일한 환경으로 서버를 세팅하고 서비스에 차질이 없도록 할 것. 3. 현재 운용중인 서버에 설치된 소프트웨어 목록 - 웹서버 9.99 버전 - 관련 보안 패치 78건 - 모니터링 툴 1.78 버전 - 각종 라이브러리 123건 => 배포할 소프트웨어를 하나의 [이미지]로 만들어 동일한 환경으로 1000개의 서버에 한번에 배포한다!
  • 17. 좌절을 겪었지만 멋지게 문제를 해결해 낸 나개발씨의 이야기를 보며 우리도 [컨테이너]를 사용해봅시다! [컨테이너] 는 일반적인 개념이며 이를 구체적으로 구현해 놓은 것들은 여러가지가 있습니다. 여러가지 [컨테이너 기술] 중 우리는 [도커] 라는 솔루션을 사용해 볼 것입니다.
  • 18. 한번 더 컨테이너를 이용할 때 얻을 수 있는 이점에 대해 정리해 봅시다. 이동성 : 어느 곳에서 작업하든 동일한 결과를 재사용할 수 있습니다. 일관성 있는 환경 : 배포하는 곳이 어디든 일관된 환경을 보장 받습니다. 배포의 편의성 : 애플리케이션과 종속항목을 하나의 패키지(이미지)로 묶어 관리하고 배포할 수 있습니다.
  • 20. [미리 만들어 둔 이미지를 다운로드 받아서 컨테이너로 실행 호스트의 포트 80번을 컨테이너의 포트 80번과 맵핑] $ docker run –d –p 80:80 --name gumin-web rnals622/docker-example [실행중인 컨테이너의 목록을 출력] $ docker ps [실행중인 컨테이너의 로그를 출력] $ docker logs –f gumin-web [실행중인 컨테이너를 정지] $ docker stop gumin-web [컨테이너를 삭제] $ docker rm gumin-web