Moby로 LinuxKit를 시작해보도록 하겠습니다.
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-mobygo get -u github.com/docker/moby/src/cmd/moby
방법2
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
다음은 MacBook Pro(Early 2015) MacOS Sierra를 통해 동작을 확인했습니다.
1. moby 명령 설치
방법1
Go 환경이 있으면 쉽게 승리할 수 있습니다.
install-moby
go get -u github.com/docker/moby/src/cmd/moby
방법2
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-rundocker 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선생님이 지적하셨어요.이거 떨어지면 맛 없어.실례합니다... ↩
Reference
이 문제에 관하여(Moby로 LinuxKit를 시작해보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pottava/items/3e64cf0476d4cfa93169
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/ # pstree
init-+-containerd-+-containerd-shim---nginx---nginx
| `-containerd-shim---tini---rngd
|-containers---2*[ctr]
|-sh---pstree
`-sh
/ # 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
/ # 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 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를 읽기 전용으로 설정
파일에 쓸 수 없습니다.
따라서 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선생님이 지적하셨어요.이거 떨어지면 맛 없어.실례합니다... ↩
Reference
이 문제에 관하여(Moby로 LinuxKit를 시작해보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pottava/items/3e64cf0476d4cfa93169텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)