닷 클라우드 솔로몬 하이크(Solomon Hykes)가 내부적으로 개발하던 Docker를 Pycon2013에서 처음 공개했던 영상입니다.


The Future of Docker Container

http://www.youtube.com/watch?v=wW9CAH9nSLs

5분밖에 안되는 발표지만 지금 보면 정말 충격적인 내용을 선보인겁니다. 저기 앉아 있는 사람들은 복받았네요. Hello World를 찍는 새로운 방법으로 추가할만 합니다.


위 데모중 Hello World 찍는 부분을 다시 재 구성한 영상도 있습니다.

http://www.youtube.com/watch?v=w4jfLy633xM





저작자 표시 비영리 변경 금지



개발자 꾸뻬씨는 이번주까지 마무리 해야 하는 일이 몇가지 있는데 한가지도 쉬운일이 아니어서 아침부터 한숨만 나옵니다. 가장 급한건 신규 프로젝트를 위한 개발서버와 스테이징 서버 준비입니다. 이게 빨리 준비 안되면 어렵게 모인 개발팀과 파트너사 직원들이 개발을 시작할수 없기 때문이죠.

그 다음은 지난주 발생한 장애건에 대해 팀장님이 지시한 재발방지 대책 마련입니다. 1급장애 상황이라 일단 서버 재시작으로 정상화는 시켰지만 정확한 원인을 찾으려면 동일한 상황을 재현해야 합니다. 그런데 운영서버도 빠듯한 상황에 서버를 내려서 테스트하겠다면 사업부서가 가만있지 않을거 같아 걱정입니다.

마지막은 신규로 도입하려는 게이트웨이 서버에 대한 검증작업입니다. 제대로 테스트하려면 적어도 서버를 종류별로 따로 받아서 설치해서 실행해 놓고 다양한 시나리오로 테스트해야 하는데 설치는 고사하고 아직 서버도 받지 못한 상황입니다.


Docker기반의 DevOps 인프라가 있다면 위에서 언급한 업무는 어려운 일이 아닙니다. 미리 준비된 이미지를 이용하면 개발과 스테이징 환경을 위한 컨테이너를 만드는 작업은 몇번의 클릭으로 끝납니다. 컨테이너는 바로 만들어져 제공되기 때문에 기다릴 필요가 없습니다. 

운영중인 컨테이너가 문제를 일으키면 미리 커밋해둔 컨테이너 이미지를 이용해 바로 동일한 컨테이너를 몇분만에 만들어 대체할수 있습니다. 문제를 일으킨 컨테이너는 멈춘채 그대로 아카이브했다가 나중에 다시 실행해서 왜 장애가 발생했는지 확인하는데 사용합니다.

원하는 이미지가 없다면 필요한 SW가 설치된 이미지를 요청해서 받을수 있습니다. 검증후에는 따로 반납할 필요없고 데이터만 백업받고 바로 지워버릴수 있어 편리합니다.


DevOps 인프라는 개발자 꾸뻬씨가 행복한 하루를 보낼수 있게 해줄겁니다.

저작자 표시 비영리 변경 금지

'Life & Culture > 생각지도' 카테고리의 다른 글

무제  (0) 2015/02/26
가장 어려운 문제와 가장 쉬운문제  (0) 2015/02/03
DevOps 엔지니어의 행복한 하루  (0) 2015/01/21
유리감옥  (0) 2014/12/31
읽는 힘과 듣는 힘  (0) 2014/12/24
아이작 아시모프의 1959년 창조적 사고에 대한 에세이  (0) 2014/11/04

Play 웹앱을 개발할때 특정 URL에 대한 접근권한을 제어하는 부분을 직접 구현하기보다는 Deadbolt를 이용하면 쉽게 처리할수 있습니다. Deadbolt는 오픈소스로 Java와 Scala를 둘다 지원합니다.


  • 소스코드: https://github.com/schaloner/deadbolt-2-java
  • Deadbolt 데모 페이지: http://deadbolt-2-java.herokuapp.com/

Deadbolt를 적용해보겠습니다.


1.project/plugins.sbt파일에 Resolver 추가

resolvers += "Deadbolt2 java releases" at "https://github.com/schaloner/deadbolt-2-java/releases"


2.build.sbt 파일에 Dependency 추가

"be.objectify" %% "deadbolt-java" % "2.3.2"


3.DeadboltHandler 정의

public class MyDeadboltHandler extends AbstractDeadboltHandler {

    @Override

    public F.Promise<Result> beforeAuthCheck(Http.Context context) {

        return F.Promise.pure(null);

    }


    @Override

    public F.Promise<Subject> getSubject(Http.Context context) {

        final Http.Cookie userCookie = context.request().cookie("userid");

        return F.Promise.promise(new F.Function0<Subject>()

        {

            @Override

            public Subject apply() throws Throwable

            {

                return // Subjet를 구해서 반환

            }

        });

    }

}


4.Deadbolt 모델 정의

https://github.com/schaloner/deadbolt-2-java/tree/master/test-app/app/be/objectify/deadbolt/java/test/models


5.application.conf에 Deadbolt 핸들러 정의

deadbolt {

    before-auth-check-timeout=4000,

    java {

        cache-user=true,

        handlers {

            defaultHandler=MyDeadboltHandler

        }

    }

}


6.conf/play.plugins에 Deadbolt 플러그인 추가

10000:be.objectify.deadbolt.java.DeadboltPlugin


7.로그인때 subject 키를 쿠키에 저장

response().setCookie("userid", String.valueOf(user.id), 60*60);


8.로그아웃때 subject 키를 쿠키에서 삭제

response().discardCookie("userid");


9.컨트롤러에 접근권한 설정

admin 그룹만 접근할수 있다면

@Restrict(@Group({"admin"}))

public static Result restrictedToFooAndBar()

{

        return ok("Content accessible");

}


로그인한 사람만 접근할수 있다면

@SubjectPresent

public static Result subjectPresent() {

    return ok(accessOk.render());

}


로그인하지 않은 사람만 접근할수 있다면

@SubjectNotPresent

public static Result subjectNotPresent_loggedIn() {

    return ok(accessOk.render());

}


컨트롤러에 Deadbolt가 적용되면 기존에 작성해 놓은 컨트롤러 테스트 코드가 인증정보가 없어서 실패할수 있습니다.


[1] 설정 관련 도움말 http://deadbolt.ws/#/java-docs


저작자 표시 비영리 변경 금지

Docker 컨테이너를 만들때 사내 사이트 dns에 대한 정보를 hosts 파일에 넣어야 하는 상황이 생겼습니다. 처음에는 간단하게 생각했습니다. 


표준 이미지를 만들때 표준으로 사용하는 hosts 파일을 복사하자.


Dockerfile의 COPY 명령어로 해결될줄 알았는데 해당 url에 대한 ip가 다르게 나와서 확인해보니 아래 링크를 찾았습니다.


Editing networking config files

Starting with Docker v.1.2.0, you can now edit /etc/hosts/etc/hostname and /etc/resolve.conf in a running container. This is useful if you need to install bind or other services that might override one of those files.

Note, however, that changes to these files will not be saved by docker commit, nor will they be saved during docker run. That means they won't be saved in the image, nor will they persist when a container is restarted; they will only "stick" in a running container.


원본링크: https://docs.docker.com/articles/networking/


요약하면 /etc/hosts, /etc/hostname, /etc/resolve.conf 와 같은 네트워크 설정 파일을 실행중인 컨테이너에서만 유지된다는 설명입니다. 이를 지원하는 옵션이 RUN 명령에 들어있습니다.


$ /docker run -ti --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts

RUN 명령어 문서: https://docs.docker.com/reference/run/


--add-host 옵션뒤에 dns:ip 와 같이 적어주면 etc/hosts 파일안에 내용이 추가된것을 확인할 수 있습니다.

저작자 표시 비영리 변경 금지

유리감옥

Life & Culture/생각지도 2014/12/31 10:47 posted by k16wire

니콜라스카의 신작 '유리감옥' 홍보영상인데 볼만하네요. 읽어봐야겠습니다.



책 내용 요약: http://korezn.tistory.com/432



저작자 표시 비영리 변경 금지

Play2 프로젝트를 개발할때 IDE로 IntelliJ를 이용하면 Scala 플러그인이 있어 편하다. 그런데 Activator idea 명령으로 Play 프로젝트를 IntelliJ 프로젝트로 변환할때 소스 Path가 잘못 잡혀서 스칼라 코드 컴파일 에러가 나온다. 간단한 설정만 수정하면 스칼라 코드 컴파일 에러를 제거할 수 있다.


1.프로젝트 > Open Module Setting 화면을 연다.

2.소스코드 경로에 자동으로 생성되는 scala 코드 위치를 추가한다.

target/scala-2.11/twirl/main/views

target/scala-2.11/src_managed/main 



저작자 표시 비영리 변경 금지

읽는 힘과 듣는 힘

Life & Culture/생각지도 2014/12/24 12:02 posted by k16wire

어느 학자는, 문명은 '해답'에 있는 것이 아니라, '질문'에 있었다고 얘기한다. 선진국과 후진국의 차이는 '질문하는 힘'에 달렸다고 말하기도 한다. 선진국은 인류의 문제의 변경에서 그 밖을향해 질문하고 있는 나라이며, 후진국은 선진국이 질문을 통해 닦아놓은 대답의 길을 그대로 따라오고 있는 나라라는 것이다.

질문은 어디에서 나오는가. 질문은 말하기이며 글쓰기이다.


http://www.asiae.co.kr/news/view.htm?idxno=2014122317482063759


저작자 표시 비영리 변경 금지

Kubernets 소개 영상

Work & Study/TechTalk 2014/12/23 02:23 posted by k16wire

Docker 컨테이너 오케스트레이션 시스템 Kubernets를 소개하는 영상입니다.


http://www.youtube.com/watch?v=tsk0pWf4ipw#t=89

 

저작자 표시 비영리 변경 금지