Moby로 LinuxKit를 시작해보도록 하겠습니다.

14755 단어 linuxkitDockerMobyrunc
Docker Con2017을 사용한 발표Moby 프로젝트
LinuxKit의 동작을 확인합니다.

Moby


원래 쓰던 의미의 Moby.


이것은 Docker사의 상징적인 고래의 애칭1이다.

https://blog.docker.com/2015/06/winners-dockercon-2015-contests/에서 대여)

요즘 가끔 보는 Moby OS.


Alpine Linux 기반 경량 OSDocker for Mac의 글에 자주 등장합니다
Message of The Day의 아스키 아트와 함께 소개됩니다.
                    ##         .
              ## ## ##        ==
           ## ## ## ## ##    ===
       /"""""""""""""""""\___/ ===
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
       \______ o           __/
         \    \         __/
          \____\_______/
Docker for AWS 등은 Docker Inc.가 준비했겠죠.
Moby의 AMI에서 EC2 클러스터 시작 등
최근 Docker 제품군에서 활발하게 활동하고 있는 OS입니다.

Moby


이번에 발표된 용기 환경 조립 프레임워크.
표준화된 운영 시간, 프레젠테이션, 네트워크 작업
보안, 빌드/이미지 배포 방법 등 사용
다양한 플랫폼/아키텍처에서
조립 가능합니다.
Linux 또는 Mac, Windows의 경우 실행 형식 파일 선택
클라우드 및 가상화 운영자를 위한 VM 이미지 생성
이 같은 모비 OS 등은 어느 것이 모두 모비를 거쳐 생길지 모른다.
CTOSolomon Hykes씨는 PR에서 Moby로의 이동을 이야기했다.

LinuxKit


Publickey의 보도 이해하기 쉽다
DockkerCon의 시위 행진처럼 LinuxKit
Moby를 사용하면 간단하게 구축할 수 있습니다.해봐.

LinuxKit를 시작할 때까지


다음은 MacBook Pro(Early 2015) MacOS Sierra를 통해 동작을 확인했습니다.

1. moby 명령 설치


방법1


Go 환경이 있으면 쉽게 승리할 수 있습니다.
install-moby
go get -u github.com/docker/moby/src/cmd/moby

방법2

  • GNU make
  • GNU or BSD tar (not busybox tar)
  • Docker
  • 설치 환경
    install-moby
    git clone https://github.com/linuxkit/linuxkit.git
    cd linuxkit
    make
    
    만들 때 bin 아래에서 모비 바이너리를 생성합니다.
    PATH가 통과하는 곳에 놓고 실행 권한을 설정합니다.

    2. LinuxKit 이미지 구축


    왜냐하면 모비 자체도 내부에서 Docker의 구조를 사용하기 때문에.
    Docker가 설치된 환경에서 다음 명령을 실행합니다.
    build-linuxkit
    moby build linuxkit.yml
    
    그리고 로그에 적힌 것처럼 linuxkit-xxx라는 파일을 만들었어요!
    Create outputs:
      linuxkit-bzImage linuxkit-initrd.img linuxkit-cmdline
      linuxkit.iso
      linuxkit-efi.iso
    

    3. LinuxKit 시작


    아주 간단합니다.
    run-linuxkit
    moby run linuxkit
    
    아래와 같이 표시될 때까지 기다려 주십시오
    Welcome to LinuxKit
    
                            ##         .
                      ## ## ##        ==
                   ## ## ## ## ##    ===
               /"""""""""""""""""\___/ ===
          ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
               \______ o           __/
                 \    \         __/
                  \____\_______/
    
    
    / # [    2.449400] IPVS: Creating netns size=2104 id=1
    [    2.449828] IPVS: ftp: loaded support on port[0] = 21
    [    2.699956] IPVS: Creating netns size=2104 id=2
    [    2.700419] IPVS: ftp: loaded support on port[0] = 21
    [    3.408548] clocksource: Switched to clocksource tsc
    

    LinuxKit 만지기.


    이동물 확인


    시위 행진도 있었지만, 과정은 이런 느낌이었다.
    pstree
    / # pstree
    init-+-containerd-+-containerd-shim---nginx---nginx
         |            `-containerd-shim---tini---rngd
         |-containers---2*[ctr]
         |-sh---pstree
         `-sh
    
    컨테이너를 볼 수 있지만 런크에서 컨테이너의 상태를 확인할 수 있습니다.
    runc-list
    / # runc list
    ID          PID         STATUS      BUNDLE                        CREATED                        OWNER
    nginx       543         running     /run/containerd/linux/nginx   2017-04-18T22:12:11.1635803Z   root
    rngd        599         running     /run/containerd/linux/rngd    2017-04-18T22:12:11.3155512Z   root
    

    액세스 컨테이너


    우선, host 네트워크에서nginx 컨테이너가 이동 중이기 때문에
    HTTP 요청을 로컬 호스트로 전송해 보십시오.
    wget
    / # wget -qO - 127.0.0.1
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
    runc를 통해 설정값을 확인합니다.
    runc-exec
    / # runc exec nginx cat /etc/nginx/conf.d/default.conf
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/log/host.access.log  main;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    

    LinuxKit에서 Docker 시작


    LinuxKit를 읽기 전용으로 설정
    파일에 쓸 수 없습니다.
    따라서 Nginx가 시작하는 설정인 LinuxKit 대신 Docker를 시작합니다.

    구축 및 시작


    창고의 이 견본를 사용하여 구축을 시작합니다.
    (Docker 이미지가 저장되었습니다.)
    $ moby build docker.yml
    $ moby run docker
    

    부팅된 Docker 서비스 컨테이너 2에 연결


    VM에서 시작한 Docker 서비스
    sh프로세스를 시작하고 t로 터미널을 연결합니다.
    / # runc exec -t docker sh
    

    Docker 내 비헤이비어 확인


    dind가 아니라 docker in runc 상태입니다.
    docker 지령을 내릴 수 있는 안심감.
    docker
    / # docker system info
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 1
    Server Version: 17.04.0-ce
    Storage Driver: overlay2
     Backing Filesystem: tmpfs
     Supports d_type: true
     Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins:
     Volume: local
     Network: bridge host macvlan null overlay
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary:
    containerd version: 422e31ce907fd9c3833a38d7b8fdd023e5a76e73
    runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
    init version: 949e6fa
    Security Options:
     seccomp
      Profile: default
    Kernel Version: 4.9.22-moby
    Operating System: Alpine Linux v3.5 (containerized)
    OSType: linux
    Architecture: x86_64
    CPUs: 1
    Total Memory: 992.5MiB
    Name: moby-025000000008
    ID: NIKL:AY2Z:MQQL:OJYX:6OZD:BKYA:T3ZT:TKJF:T5XD:C46N:N5BF:V7ZZ
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    Experimental: false
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false
    

    Docker 컨테이너 시작

    df -h 알겠지만, 여기까지의 흐름이 시작된 VM
    디스크 용량이 너무 적어서 놀 수가 없어요.
    그래서 노드.js 근처에 있습니다.
    docker-run
    docker run --rm -it node:7.9-alpine sh
    
    정상적으로 사용할 수 있습니다.
    node
    / # node -v
    v7.9.0
    / # node
    > 1+1;
    2
    
    이때 이렇게 됐어요.
    Mac -> LinuxKit + docker -> Node.컨테이너js REPL
    그래서 맥으로 돌아가야 돼요.
    Ctrl + D -> Ctrl + D -> Ctrl + D -> halt
    네.
    엄밀히 말하면 Moby Dock이지만 근처에서 모비라고 불리는 것 같아요. 
    @abeq선생님이 지적하셨어요.이거 떨어지면 맛 없어.실례합니다...

    좋은 웹페이지 즐겨찾기