처음 Docker가 나왔을 때는 또 하나의 ‘혁신’ 이라는 말에 질려 있었음
반쯤 완성된 NoSQL, 무조건적인 마이크로서비스, 모든 함수 호출을 RPC로 바꾸는 흐름이 싫었음
하지만 지금은 단순함 덕분에 자주 사용하고 있음
다만 다른 사람의 컨테이너는 여전히 지옥 같음. 나는 최소한 단순하게 유지하려 하지만, 어떤 사람들은 너무 많은 걸 넣어버려서 본인도 배포 과정을 모르는 듯한 느낌을 받음
이제는 LLM 덕분에 개발자가 직접 보지도 않은 코드가 쏟아지는 시대가 된 것 같음
새벽마다 DevOps 팀이 컨테이너 문제를 해결하려고 끝없는 Zoom 콜을 하는 걸 보며, 아무도 진짜로 무슨 일이 일어나는지 모른다는 확신이 생겼음
수많은 시도가 있었지만 결국 Dockerfile이 살아남은 이유는 유연성 때문임
기존 운영 방식처럼 파일을 복사하고 명령을 실행하는 구조가 익숙했기 때문임
보기엔 투박하지만, 이 단순한 유연함이 앞으로도 주류로 남을 것 같음
언어 중립적인 빌드 도구가 없기 때문에 결국 언어별 패키지 매니저를 호출하는 임의 명령을 실행하게 됨
만약 모두가 Nix나 Bazel을 썼다면 docker build는 웃음거리가 되었을지도 모름
재현 가능한 빌드를 막는 장애물이 있음
서로 다른 빌드에서 해시가 달라지면 신뢰할 수 없기 때문에, 파일 수정 시간 같은 요소가 해시에 포함되는 한 완전한 일관성은 어려움
Docker registry 같은 중앙 저장소가 없는 게 대체 솔루션의 병목 지점임
개인적으로는 mkosi를 좋아하지만, 모두가 빈 OS 템플릿에서 시작하길 원하지는 않음
Nix는 Docker 컨테이너를 만드는 데 탁월함
registry와의 결합이 좀 더 강했으면 좋겠다고 느낌
대부분의 경우 public registry에서 pull하고 private registry로 push만 하기 때문에, 로컬 이미지는 거의 쓰이지 않음
약간 비효율적이지만 바꿀 만큼 불편하지는 않은 듯함
Docker가 2013년 PyCon US Santa Clara에서 처음 공개된 걸 기억함
당시 YouTube 발표 영상을 보면 역사적인 순간임
논문 출판 시점과 실제 발표 시점이 달라서 혼동이 있었던 듯하지만, 대략 13년 전 이야기임
제목은 단순히 ‘시간을 거슬러 올라간다’ 는 의미로 붙인 것임
“Twelve years of Docker containers”보다 “A decade of Docker”가 더 자연스러웠음
실제로는 2014년이 맞음 HN의 초기 발표 글을 기억함
당시 LXC나 Vagrant 같은 대안에 지쳐 있었는데 Docker는 정말 구세주 같은 존재였음
Docker가 1990년대 SLIRP라는 다이얼업 도구를 재활용해 방화벽을 우회했다는 점이 흥미로움
SLIRP는 Palm Pilot용이 아니라, SLIP/PPP를 쓸 수 없던 쉘 계정 사용자들이 인터넷 연결을 흉내 내기 위해 만든 유틸리티였음
들어오는 연결은 안 됐지만, NAT의 전조 같은 개념이었음
Palm Pilot용 도구를 방화벽 우회에 쓴 건 미친 발상이지만, 그런 절박함이 최고의 인프라 해킹을 만들어냄
SLIRP는 ‘rootless’ 네트워크 네임스페이스를 위한 것으로, 루트 권한 없이 호스트 네트워크에 컨테이너를 붙이는 방식임
Docker를 써보고 싶었지만, 쓸 때마다 필요한 기능이 빠져 있었음
아마도 흔치 않은 기술 스택을 사용해서 그런 듯함
“내 컴퓨터에서는 잘 되는데”를 산업 표준으로 만든 게 Docker의 위대함임
이제는 그 컴퓨터 자체를 프로덕션에 ‘배송’ 하는 시대가 되었음
공동 저자로서, Docker 이전에는 Xen을 다뤘는데, Docker가 IT 문화 자체를 바꾼 사건이었음
예전엔 배포가 거대한 절차였지만, 이제는 파일시스템을 바로 배포할 수 있게 되었음
지금의 코딩 에이전트 혁신도 그때와 비슷한 문화적 전환으로 느껴짐
Docker는 빌드를 반복 가능한 프로세스로 캡처하게 만든 게 핵심임
10줄짜리 스크립트로 환경을 재현할 수 있다면 “머신을 배포한다”는 것도 나쁘지 않음
Docker는 일종의 극단적인 정적 링크임
왜 이런 접근이 그렇게 매력적인지 스스로 물어볼 필요가 있음
“노트북에서 잘 되네”가 이제 “노트북을 컨테이너로 만들어 파이프라인에 넣자”로 바뀐 것 같음
추상화가 항상 이기는 이유는, 근본적인 문제를 고치는 게 너무 어렵기 때문임
형편없는 컨테이너들이 제대로 된 패키징 시스템 대신 Dockerfile로 서비스 관리까지 하려는 걸 보면 지침
네트워킹은 잘 모르지만, Mac에서 컨테이너가 별도의 IP 주소를 가지게 하고 싶음
포트 매핑 없이 container_ip:80으로 접근하고 싶음
Linux에서는 가능했지만 Mac에서는 VM을 거쳐야 해서 복잡함 WireGuard 기반 방법을 써봤지만 Docker 업데이트 때마다 깨짐
공식적으로 지원되는 방법이 있으면 좋겠음
Docker 엔지니어로서, Tailscale 확장을 써보길 권함 Tailscale Docker Extension이 설정을 자동으로 처리함
포트 매핑을 피하려는 이유가 동적 포트 때문이라면 --net=host 옵션과 Host Networking 설정을 켜보길 권함
Mac은 없지만, 오픈소스 대안으로 Colima 프로젝트를 추천함
2013년은 Docker, Guix, NixOS가 모두 등장한 패키징의 풍년이었던 해였음 관련 논문을 쓰면서 이 사실을 발견함
이후 이렇게 여러 훌륭한 프로젝트가 한 해에 동시에 등장한 적이 있었는지 궁금함
hg와 git이 몇 주 간격으로 나왔고, fossil도 곧이어 등장했음
솔직히 Docker만이 진짜 대중화에 성공했다고 느낌
Guix나 Nix는 여전히 소수 사용자층에 머물러 있음
ML과 AI가 모든 곳에 들어가면서 이미지 크기가 기하급수적으로 커짐
torch 하나만으로도 수 GB가 됨
예전의 30MB 이미지를 그리워함
TensorFlow를 두 번 설치한 이미지도 봤음
레이어 간 파일 공유가 안 돼서 낭비가 심함
그래서 파일 단위 dedupe를 지원하는 대체 registry를 직접 만들고 있음
나는 ISO 기반의 불변 Alpine Linux 위에 Ruby와 PHP 컨테이너 몇 개를 올려 사용 중인데, 전체가 750MB 정도임
Docker가 기업용 보안 소프트웨어를 속이기 위해 VPN처럼 위장했다는 점이 정말 흥미로웠음
기술적 역사로서도 재미있는 사례임
Hacker News 의견들
처음 Docker가 나왔을 때는 또 하나의 ‘혁신’ 이라는 말에 질려 있었음
반쯤 완성된 NoSQL, 무조건적인 마이크로서비스, 모든 함수 호출을 RPC로 바꾸는 흐름이 싫었음
하지만 지금은 단순함 덕분에 자주 사용하고 있음
다만 다른 사람의 컨테이너는 여전히 지옥 같음. 나는 최소한 단순하게 유지하려 하지만, 어떤 사람들은 너무 많은 걸 넣어버려서 본인도 배포 과정을 모르는 듯한 느낌을 받음
이제는 LLM 덕분에 개발자가 직접 보지도 않은 코드가 쏟아지는 시대가 된 것 같음
수많은 시도가 있었지만 결국 Dockerfile이 살아남은 이유는 유연성 때문임
기존 운영 방식처럼 파일을 복사하고 명령을 실행하는 구조가 익숙했기 때문임
보기엔 투박하지만, 이 단순한 유연함이 앞으로도 주류로 남을 것 같음
만약 모두가 Nix나 Bazel을 썼다면
docker build는 웃음거리가 되었을지도 모름서로 다른 빌드에서 해시가 달라지면 신뢰할 수 없기 때문에, 파일 수정 시간 같은 요소가 해시에 포함되는 한 완전한 일관성은 어려움
개인적으로는 mkosi를 좋아하지만, 모두가 빈 OS 템플릿에서 시작하길 원하지는 않음
대부분의 경우 public registry에서 pull하고 private registry로 push만 하기 때문에, 로컬 이미지는 거의 쓰이지 않음
약간 비효율적이지만 바꿀 만큼 불편하지는 않은 듯함
Docker가 2013년 PyCon US Santa Clara에서 처음 공개된 걸 기억함
당시 YouTube 발표 영상을 보면 역사적인 순간임
논문 출판 시점과 실제 발표 시점이 달라서 혼동이 있었던 듯하지만, 대략 13년 전 이야기임
“Twelve years of Docker containers”보다 “A decade of Docker”가 더 자연스러웠음
HN의 초기 발표 글을 기억함
당시 LXC나 Vagrant 같은 대안에 지쳐 있었는데 Docker는 정말 구세주 같은 존재였음
Docker가 1990년대 SLIRP라는 다이얼업 도구를 재활용해 방화벽을 우회했다는 점이 흥미로움
들어오는 연결은 안 됐지만, NAT의 전조 같은 개념이었음
Docker를 써보고 싶었지만, 쓸 때마다 필요한 기능이 빠져 있었음
아마도 흔치 않은 기술 스택을 사용해서 그런 듯함
“내 컴퓨터에서는 잘 되는데”를 산업 표준으로 만든 게 Docker의 위대함임
이제는 그 컴퓨터 자체를 프로덕션에 ‘배송’ 하는 시대가 되었음
예전엔 배포가 거대한 절차였지만, 이제는 파일시스템을 바로 배포할 수 있게 되었음
지금의 코딩 에이전트 혁신도 그때와 비슷한 문화적 전환으로 느껴짐
10줄짜리 스크립트로 환경을 재현할 수 있다면 “머신을 배포한다”는 것도 나쁘지 않음
왜 이런 접근이 그렇게 매력적인지 스스로 물어볼 필요가 있음
추상화가 항상 이기는 이유는, 근본적인 문제를 고치는 게 너무 어렵기 때문임
네트워킹은 잘 모르지만, Mac에서 컨테이너가 별도의 IP 주소를 가지게 하고 싶음
포트 매핑 없이
container_ip:80으로 접근하고 싶음Linux에서는 가능했지만 Mac에서는 VM을 거쳐야 해서 복잡함
WireGuard 기반 방법을 써봤지만 Docker 업데이트 때마다 깨짐
공식적으로 지원되는 방법이 있으면 좋겠음
Tailscale Docker Extension이 설정을 자동으로 처리함
포트 매핑을 피하려는 이유가 동적 포트 때문이라면
--net=host옵션과 Host Networking 설정을 켜보길 권함2013년은 Docker, Guix, NixOS가 모두 등장한 패키징의 풍년이었던 해였음
관련 논문을 쓰면서 이 사실을 발견함
이후 이렇게 여러 훌륭한 프로젝트가 한 해에 동시에 등장한 적이 있었는지 궁금함
Guix나 Nix는 여전히 소수 사용자층에 머물러 있음
ML과 AI가 모든 곳에 들어가면서 이미지 크기가 기하급수적으로 커짐
torch 하나만으로도 수 GB가 됨
예전의 30MB 이미지를 그리워함
레이어 간 파일 공유가 안 돼서 낭비가 심함
그래서 파일 단위 dedupe를 지원하는 대체 registry를 직접 만들고 있음
Docker가 기업용 보안 소프트웨어를 속이기 위해 VPN처럼 위장했다는 점이 정말 흥미로웠음
기술적 역사로서도 재미있는 사례임