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




Child commands

command의 링크를 누르시면 더 자세한 내용을 알수 있습니다.
CommandDescription
docker attachAttach local standard input, output, and error streams to a running container
docker buildBuild an image from a Dockerfile
docker checkpointManage checkpoints
docker commitCreate a new image from a container’s changes
docker configManage Docker configs
docker containerManage containers
docker cpCopy files/folders between a container and the local filesystem
docker createCreate a new container
docker deployDeploy a new stack or update an existing stack
docker diffInspect changes to files or directories on a container’s filesystem
docker eventsGet real time events from the server
docker execRun a command in a running container
docker exportExport a container’s filesystem as a tar archive
docker historyShow the history of an image
docker imageManage images
docker imagesList images
docker importImport the contents from a tarball to create a filesystem image
docker infoDisplay system-wide information
docker inspectReturn low-level information on Docker objects
docker killKill one or more running containers
docker loadLoad an image from a tar archive or STDIN
docker loginLog in to a Docker registry
docker logoutLog out from a Docker registry
docker logsFetch the logs of a container
docker manifestManage Docker image manifests and manifest lists
docker networkManage networks
docker nodeManage Swarm nodes
docker pausePause all processes within one or more containers
docker pluginManage plugins
docker portList port mappings or a specific mapping for the container
docker psList containers
docker pullPull an image or a repository from a registry
docker pushPush an image or a repository to a registry
docker renameRename a container
docker restartRestart one or more containers
docker rmRemove one or more containers
docker rmiRemove one or more images
docker runRun a command in a new container
docker saveSave one or more images to a tar archive (streamed to STDOUT by default)
docker searchSearch the Docker Hub for images
docker secretManage Docker secrets
docker serviceManage services
docker stackManage Docker stacks
docker startStart one or more stopped containers
docker statsDisplay a live stream of container(s) resource usage statistics
docker stopStop one or more running containers
docker swarmManage Swarm
docker systemManage Docker
docker tagCreate a tag TARGET_IMAGE that refers to SOURCE_IMAGE
docker topDisplay the running processes of a container
docker trustManage trust on Docker images
docker unpauseUnpause all processes within one or more containers
docker updateUpdate configuration of one or more containers
docker versionShow the Docker version information
docker volumeManage volumes
docker waitBlock until one or more containers stop, then print their exit codes


참고 사이트 : 


'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' 카테고리의 다른 글

레지스터(Register), Context Switching란?  (0) 2018.03.14
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  (1) 2017.01.22

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
      • 아래의 golang 예제를 보면 jsonBytes, err := json.Marshal(mem) 의 리턴은 byte[]과 error 객체이다. 
      • 그런데 보통 byte[] 가 아닌 Json으로 인코딩된 바이트 배열이다. 
    • unmarshalling : Json -> Object


예제
  • go lang
    • package main

      import (

          "encoding/json"

          "fmt"

      )

      //Member -

      type Member struct {

          Name   string

          Age    int

          Active bool

      }

      func main() {

          // Go 구조체 데이터

          mem := Member{}

          mem.Name = "오광봉"

          mem.Age = 80

          mem.Active = true     

          // JSON 인코딩

          jsonBytes, err := json.Marshal(mem)

          if err != nil {

              panic(err)

          } 

          // JSON 바이트를 문자열로 변경

          jsonString := string(jsonBytes)

          fmt.Println(jsonString)  

         json.Unmarshal(jsonBytes, &mem)

          fmt.Println(mem.Name)


      } 




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

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

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

설정

트랙백

댓글

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

JsonLint - Json validator 소개

업무 관련/개발 노트 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/

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

요런 노가다를 줄이자~


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

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을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바