레이블이 iproute2인 게시물을 표시합니다. 모든 게시물 표시
레이블이 iproute2인 게시물을 표시합니다. 모든 게시물 표시

docker 로 pod 따라하기

# docker 로 pod(컨테이너들이 mount,pid,network 네임스페이스 공유)따라하기
# pod 는 다음 컨테이너들로 구성한다.
pause
nginx
ghost (nginx proxy_pass 를 받아 처리할 컨테이너, 참고:https://github.com/TryGhost/Ghost)

# pause(pod 내 컨테이너들의 부모 컨테이너로, ipc(pid), network 네임스페이스를 공유할 수 있도록) 컨테이너 생성
docker run -d --name pause -p 8080:80 --ipc="shareable" k8s.gcr.io/pause:3.2

# 생성된 pause 확인
# sandboxkey 의 network 네임스페이스 들어가서
sandboxkey=$(docker inspect pause | grep -i sandboxkey | awk '{print $2}' | tr -d ,\")
nsenter --net=$sandboxkey

# network 네임스페이스 확인(호스트의 값과 같다.)후 종료
lsns -p $$ -t net
ip a
exit

# 이제 nginx
# nginx.conf 파일 생성
# / 요청은 localhost:2368(ghost)로 프록시 패스한다.
cat > nginx.conf << zzz
error_log stderr;
events { worker_connections 1024; }
http {
  access_log /dev/stdout combined;
  server {
    listen 80 default_server;
    location / {
      proxy_pass http://127.0.0.1:2368;
    }
  }
}
zzz
# nginx 컨터이너 생성
# 위에서 만든 nginx.conf 를 볼륨 마운트하고
# pause 컨테이너의 ipc, network 를 사용(공유)
docker run -d --name nginx -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf --network=container:pause --ipc=container:pause nginx

# nginx 컨테이너에 ip 명령 설치
docker exec nginx apt update
docker exec nginx apt install -y iproute2

# nginx ip 확인
docker exec nginx ip a

# ghost 컨테이너 생성
# pause 컨테이너의 ipc, network 를 사용(공유)
docker run -d --name ghost --network=container:pause --ipc=container:pause ghost

# ghost 컨테이너에 ip 명령 설치
docker exec ghost apt update
docker exec ghost apt install -y iproute2

# ghost ip 확인
docker exec ghost ip a

# 이제 nginx 에서 / 로 접속하면 ghost 결과가 나온다.
docker exec nginx curl -I localhost