Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

Docker ?

CM/docker 2017.06.27 15:23
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T





 Docker?
  • 2013년 3월 Docker, Inc에서 출시한 오픈소스 컨테이너 프로젝트
  • 복잡한 리눅스 어플리케이션을 컨테이너로 묶어서 실행할 수 있음.
  • 리눅스 커널에서 제공하는 컨테이너 기술을 이용.
  • 컨테이너(이미지)를 전 세계 사람들과 공유
  • Github와 비슷한 방식의 Docker Hub 제공.
  • 이미지 생성과 배포에 특화.
    • 이미지 버전관리 제공, 중앙저장소에서 이미지를 올리고 받을 수 있음. (push/pull)

컨테이너?
  • 가상화보다 훨씬 가벼운 기술.
    • 가상머신 : 컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도(1960년 대에 가상화 개념이 처음 등장)
      • 컴퓨터 통째로 만들어내다보니 각종 성능 손실이 발생. -> 리눅스 컨테이너 등장.
  • 컨테이너 안에 가상공간을 만들지만 실행 파일을 호스트에서 직접 실행.(리눅스 커널의 groups, namespaces가 제공하는 기술)



도커는 리눅스 컨테이너를 사용!
  • 초기에는 LXC(Linux Container)를 기반으로 구현.
  • 버전 0.9 부터는 LXC를 대신하는 libcontainer를 개발하여 사용.
  • 실행 옵션으로 선택 가능.

이미지와 컨테이너의 구분
  • 이미지 : 서비스 운영에 필요한 서버 프로그램
    • 소스코드, 컴파일된 실행 파일을 묶음 형태.
    • 저장소에 올리고 받는것은 이미지!(push/pull)
    • 이미지로 여러 개의 컨테이너를 만들수 있음.
  • 컨테이너 : 이미지를 실행한 상태!


도커 사용
docker + <명령>
예) docker run, docker push
* 항상 root 권한으로 실행.

  • docker hub에서 이미지 검색해보기
    • docker search <image name>
      • sudo docker search ubuntu
  • docker hub에서 이미지를 받아보자.
    • docker pull <image name>:<tag>
      • sudo docker pull ubuntu:latest
  • 모든 이미지를 출력해보기
    • docker images
      • sudo docker images
  • 이미지를 컨테이너로 생성한 뒤 Bash shell 실행해보기.
    • docker run <옵션> <이미지 이름> <실행할 파일>
      • sudo docker run -i -t —name hello ubuntu /bin/bash
      • -i : interactive / -t : passed-tty
        • 실행된 Bash 쉘에 입력 및 출력 가능.
      • —name : 컨테이너 이름을 지정. 미지정시 자동으로 이름을 생성하여 지정.
  • 모든 컨테이너 목록 출력
    • docker ps
      • sudo docker ps -a
  • 컨테이너 시작
    • docker start(restart) <컨테이너 이름>
      • sudo docker start hello
  • 방금 시작한 컨테이너에 접속해보기
    • docker attach <컨테이너 이름>
      • sudo docker attach hello
  • /bin/bash를 통하지 않고 외부에서 컨테이너 안의 명령 실행해보기
    • docker exec <컨테이너이름> <명령> <매개변수>
      • sudo docker exec hello echo “hello world”
  • 컨테이너 중지
    • docker stop <컨테이너 이름>
      • sudo docker stop hello
  • 컨테이너 삭제
    • docker rm hello
      • sudo docker rm hello
  • 이미지 삭제
    • docker rmi <이미지 이름>:<태그>
      • sudo docker rmi ubuntu:latest



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

'CM > docker' 카테고리의 다른 글

Docker ?  (0) 2017.06.27
about docker  (0) 2017.04.27

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

메시지큐에 대해 알아보자.

Architecture/AA 2017.06.27 14:30
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T
모델 종류 
  • 발행/구독(publish - and - subscribe) 모델
          1: 다 - 모든 클라이언트에게 모든 메시지의 사본을 전달.
           publisher -> topic -> subscriber
                                         -> subscriber
                                         -> subscriber


  • 지점간 연결(point -  to - point) 모델 
          1:1 - 하나의 메시지는 하나의 클라이언트에만 전송(큐는 공유 가능)
          sender -> queue -> receiver 

위의 모델 중에 publish - and - subscribe(pub - sub) 모델에 대해서 알아보자!

pub/sub 구조
보통의 message queue들은 publisher - message broker(topic) - subscriber 구조를 사용한다.
publisher(message data)를 하면 가운데 있는 message broker가 메시지를 선택하고 처리하는 즉, 내부적으로 구독하고 있는
subscriber들을 찾아서 메시지를 보낸다. 

opensource message queue중에 nats라는 녀석이 있다. (http://nats.io/)
lib는 https://github.com/nats-io/go-nats 참고!


pub/sub 구현(w/go lang)
그러면 pub/sub 모델을 구현한다고 생각해보자.
우선은 메시지큐 server가 필요하겠다. 그리고 그 서버를 붙는 client도 필요하다.
보통 jms, nats, amazon sqs 등등이 서버가 되겠다. client는 제공되어지는 publish()등의 함수가 있는 lib 정도.

ex)  메시지 큐 동작 과정
  1. 클라이언트가 NATS 서버와의 TCP / IP 소켓 연결을 설정.
    1. nc, _ := nats.Connect(nats.DefaultURL)
  2. 발행
    1. nc.Publish("foo", []byte("Hello World"))
  3. 구독 (subject가 구독대상 : foo)
          // Simple Async Subscriber
    nc.Subscribe("foo", func(m *nats.Msg) {
                      fmt.Printf("Received a message: %s\n", string(m.Data))
     })

    // Simple Sync Subscriber
    sub, err := nc.SubscribeSync("foo")
    m, err := sub.NextMsg(timeout)
  1. 구독 해제(Sync Subscriber 일 경우에만)
    // Unsubscribe
          sub.Unsubscribe()    
     5. defer nc.Close()    

func TestNatsWorking(t *testing.T) {
   nc, _ := nats.Connect(nats.DefaultURL)
   defer nc.Close()
   // Simple Publisher
   nc.Publish("foo", []byte("Hello World"))

   // Simple Async Subscriber
   nc.Subscribe("foo", func(m *nats.Msg) {
      fmt.Printf("Received a message: %s\n", string(m.Data))
   })

}



           


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

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

pokemon skin

OS/Linux&Unix 2017.06.22 16:48
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T
심심했던 검정 화면이! 아래와 같이 변화합니다 ㅋㅋㅋ 굿뜨!

https://github.com/LazoCoder/Pokemon-Terminal


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

'OS > Linux&Unix' 카테고리의 다른 글

linux os 확인  (0) 2017.07.03
pokemon skin  (0) 2017.06.22
yum에 대해 알아보자.  (0) 2017.05.09
curl http/2  (0) 2017.03.21
리눅스 - scp file copy  (0) 2017.01.22
top 명령&옵션  (0) 2016.12.21

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

About Json

Study/RND group 2017.06.09 22:55
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T
개 요
about Json
관련 개념
marshalling/unmarshalling 
encoding/decoding
예제
기본적인 코드 구현
확장
관련 된 확장 개념 등

개요
JSON (JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 
이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다.
 JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999의 일부에 토대를 두고 있다. 

왜 Json을 사용하는가?
  1. 경량의 데이터 포맷(XML보다)
  2. 간단한 포맷(가독성이 좋음)
  3. 기존 XML보다 다양한 데이터 타입 제공(string, number, boolean), xml은 only string

Json이 가지는 형식


object는 name/value 쌍들의 비순서화된 SET이다. 
object는 { (좌 중괄호)로 시작하고 } (우 중괄호)로 끝내어 표현한다. 
각 name 뒤에 : (colon)을 붙이고 , (comma)로 name/value 쌍들 간을 구분한다.


예제) 
{
    "acet": "박태하",
    "ace-t": "terry"
}



array은 값들의 순서화된 collection 이다. array는 [ (left bracket)로 시작해서 ] (right bracket)로 끝내어 표현한다. 
, (comma)로 array의 값들을 구분한다.

예제 1)
{
    "acet": [
        {
            "name": "박태하",
            "age": 100,
            "job": "developer"
        }, {
            "name": "테리팍",
            "age": 60,
            "job": "architector"
        }
    ]
}

예제 2)
{
    "acet": [
     {
        "name": "박태하",
        "age": 100,
        "job": "developer"
    }, {
        "name": "테리팍",
        "age": 60,
        "job": "architector"
    }
   ],
    "terry": [
     {
        "name": "으라차차",
        "age": 29,
        "job": "백수"

    }
   ]
}

참고 : http://www.json.org/json-ko.html

관련 개념
  • encoding/decoding
    • encoding은 말 그래도 코드를 만드는 것.
      • 소스코딩 : 코드를 압축하는 과정
      • 채널코딩 : 데이터를 압축하는 것이 아니라 반대로 더 늘리는 알고리즘.
    • decoding은 만들어진 코드를 푸는 것.
  • 왜 encoding/decoding을 사용하는가? 효율적, 안전성, 신뢰성 때문에

  • Json marshalling/unmarshalling 
    • marshalling : Object ->  Json
    • unmarshalling : Json -> Object


예제
  • go lang

  • java 




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

'Study > RND group' 카테고리의 다른 글

About Json  (0) 2017.06.09
RND 스터디  (0) 2017.05.01

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

JsonLint - Json validator 소개

project 관련/개발 노트 2017.06.02 11:08
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


https://jsonlint.com/

이런게 있었다니..ㅋㅋㅋㅋ 괜히 눈으로 맞춰보느라 고생했네..ㅎㅎ 

요런 노가다를 줄이자~


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

'project 관련 > 개발 노트' 카테고리의 다른 글

JsonLint - Json validator 소개  (0) 2017.06.02
OAuth에 대해 알아보자!  (0) 2017.02.23
2014.11.20 - 개발노트  (0) 2014.11.20
mom 프로젝트 시작! ㅋㅋ  (0) 2014.11.17
RND Site 구축  (0) 2014.05.09
bootstrap을 가지고 잠시 만들어보았다..  (0) 2014.05.05

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바