전체 글
-
S6-overlayDocker 2021. 7. 11. 12:13
docker에 기본 이념은 하나의 container에는 하나의 process만 두어야 한다는 것이다. 하지만, 이에 대해서 반대를 하고, 하나의 container에 여러 개의 process를 심고 이를 이용하겠다는 생각으로 만들어진 open source이다. 사용 예시는 main process 내부에 cronjob을 끼워넣는 것과 같은 경우가 있을 것이다. 이는 결론적으로 Dockerfile의 확장 버전이라고 볼 수도 있을 거 같다. 좀 더 복잡한 작업을 더 체계적으로 할 수 있는 틀을 제공한다. 아이디어 자체는 참신하나 남발하게 되면, stateless하던 container가 점점 stateful하게 되면서 시스템이 오염될 수도 있음을 유의하자. 아래 내용은 해당 opensource의 README를 직..
-
Docker Network [3/3 - libnetwork]Docker 2021. 7. 11. 00:40
여태까지 docker의 driver를 통한 networking 기술을 알아보았고, 이제 libnetwork로 1/3에서 제시했던 기본 routing과 같은 기능 외에 구현되어 있는 기능들에 대해서 알아봅니다. service discovery load balancing Service discovery 모든 container들과 swarm의 서비스들이 이름을 통해서 각 각을 찾을 수 있도록 하는 것이다. Docker는 자체적으로 내부의 DNS 서버를 이용하여 이를 수행한다. 과정을 요약하자면 다음과 같다. container가 이름을 통해서 특정 container를 찾아야 함을 인식한다. 먼저 Local 내부에서 이에 대한 정보를 갖고 있는지를 탐색한다. -> 있다면, 종료 Docker DNS server에 ..
-
Docker Network [2/3 - drivers]Docker 2021. 7. 11. 00:04
저번 글에 이어서 이번에는 docker network의 driver들에 대한 자세한 내용을 다루겠다. bridge networks overlay networks host networking IPVlan networks MacVlan networks Bridge Network container간의 통신을 위해서 필요한 것이 bridge 네트워크이다. 하지만, 여기서 주의해야할 것은 오직, single host에서만 동작한다는 점이다. 즉, 다른 docker host에 존재하는 container와는 연결이 불가능하다. 그렇다면, bridge가 무엇인가? 이는 두 개의 network 장치를 연결하는 L2 switch를 말한다. 즉, container를 연결하는 도구라고 보면 되겠다. 이를 통해서 연결된 con..
-
Docker Network [1/3 - overview]Docker 2021. 7. 10. 21:21
Docker Swarm을 docker stack을 이용하여 실행시키게 된다면, 무엇이 생성되는가? 우리는 서비스가 생성되기도 전에 network가 생성되는 것을 볼 수가 있다. container와 container간 그리고, host를 통해 외부 internet환경에 container를 연결 시키는 모든 과정을 알아보자. Docker를 사용하다보면, host와 통신을 위해 외부로 port를 열어주는 것과 container 간의 통신을 헷갈려 하는 사람들이 생각보다 많은 것 같다. 심지어는 container간 통신을 위해서 localhost로 정보를 주고받을려고 하는 몹쓸 시도를 하는 관경도 몇몇 봐왔다. 따라서, 우리는 한 번 Docker의 network에 대해서 한 번 공부해보는 것이 좋을 것이다. 해..
-
Docker's securityDocker 2021. 7. 10. 19:52
해당 글은 Linux에서 docker를 동작시킨다는 가정하에 작성하였다. (Window도 대부분 동일하다고 한다.) docker는 여러 개의 보안 정책을 포함한다. 이를 크게 누가 관리하느냐에 따라서 두 개의 부류로 나눌 수 있다. OS system (Linux) Docker 이전 가상화와 반가상화를 비교한 글에서 보았듯이 Container 기술을 결과적으로 반가상화에 해당하며, 이를 위해서 OS의 지원이 필요하다. 따라서, 이를 Linux 자체에서 구현해주는 것이 존재하고, Docker에서 Application 단에서 구현한 부분으로 나뉘어지는 것이다. 먼저, Linux에서 지원하는 각종 security에 대해서 알아봅시다. Linux's Security for Docker 전체적인 디테일 사항은 정리..
-
VM & ContainerDocker 2021. 5. 23. 14:31
Virtual Machine과 Container의 차이점을 이해하기 보다는 서사를 이해하는 것이 편할 것이다. 시작은 다음과 같다. 당신은 현재 다양한 service를 운영하고 있다. 그리고, 이를 운영하는 과정에서 가장 큰 문제를 겪게 된다. 여러 service는 매 번 다양한 요구에 의해서 상황이 바뀐다. 어느 날은 주문이 폭주해서 서버를 증설해야하고, 어느 순간에는 유지 비용이 아까워서 서버를 다시 축소시킨다. 또한, Hardware가 성능의 노후와 새로운 기기 및 시스템을 도입하고자 하는 욕구도 따른다. 이 과정에서 우리는 결국 하나의 machine에 하나의 service 만을 배포하게 된다. 다른 service가 과부화가 걸려서 다른 service도 같이 에러가 발생한다면, 얼마나 머리가 아프겠..
-
TCPNetwork 2021. 4. 15. 17:29
TCP, Tranmission Control Protocol이라는 이름에서도 느껴지듯 상당히 정교한 control을 포함하는 protocol입니다. OSI Transport Layer에서 연결 지향이며, 신뢰할 수 있는 데이터 전송을 보장합니다.(Reliable Data Transfer) Transport Layer에 존재하기 때문에, 종단에만 존재하는 규칙입니다. 시작하기에 앞서 필요한 용어 정의부터합니다. Socket vs Buffer Socket : process의 데이터를 Trasport layer으로 전달하는 통로이다. 이때 데이터는 stream 형태로 전달됩니다. process는 한 번에 여러 개의 socket을 가질 수 있으며, 이를 통해서 socket을 가진 다른 process와 통신이 가..
-
start containerDocker 2021. 4. 11. 22:36
Docker의 구조 Docker는 초기에는 하나의 daemon에 모든 기능이 합쳐져 있었지만, refactoring을 거치며 다음과 같은 구조를 가지게 되었다. Container start 따라서, docker에서 container를 시작한다는 것은 다음과 같은 수행한다는 것을 의미합니다. 사용자가 docker client에 CLI로 docker container run 명령어를 입력합니다. docker client는 이를 Docker daemon이 제공하는 Docker API로 변환합니다. docker daemon의 API Endpoint로 요청이오면, containerd에게 OCI bundle과 제공된 ID에 기반하여 새로운 container를 실행시킬 것을 명령합니다. containerd는 이를 받..