안수찬의 개발이야기

My First Pull Request on Dockerfile/nginx

Introduction

안수찬 @dobestan

안수찬 @dobestan

소프트웨어 생태계에 기여할 수 있는 실용주의 프로그래머가 되고자 합니다. 나는 안수찬이다. 그러므로 나는 할 수 있다.


My First Pull Request on Dockerfile/nginx

Posted by 안수찬 @dobestan on .
Featured

My First Pull Request on Dockerfile/nginx

Posted by 안수찬 @dobestan on .

개발을 시작하고 처음으로 제가 진행하고 있는 프로젝트 ( 예를 들면, BuildBuild/BuildBuild )가 아닌 다른 프로젝트에 Pull Request를 날리게 되었습니다. 사실 제가 개발을 시작하고 나서 정한 목표가 몇 가지 있습니다.

개발을 시작한지 12개월 이내에 OpenSource Contributor 가 되자.

아직 Merge가 되지는 않았지만, 제가 처음으로 날린 풀 리퀘스트이고 굉장히 설레는 순간이라 그 과정을 간단하게나마 공유합니다.

요약

  • 프로젝트 : https://github.com/dockerfile/nginx
  • 수정사항 :
    Docker Nginx 이미지가 1.7.5 버전으로 업데이트되면서 기존에는 포함되어 있지 않던 CMD ["nginx", "-g", "daemon off;"] 옵션이 추가적으로 포함되게 되었다. 이 설정에 맞게 프로젝트에 포함되어 있는 Dockerfile을 수정하였다.
  • Pull Request : https://github.com/dockerfile/nginx/pull/10

문제점

최근에 Docker Registry 관련해서 블로그를 작성하고 있다. 개인적으로는 조금 Docker에 대한 이해가 필요하다고 생각해서 여러 가지 기능들을 사용해보면서

  1. 로컬 머신에 Docker Registry 설치하기
  2. AWS: EC2에 Docker Registry 설치하고, S3에 이미지 저장하기
  3. SSL + Nginx Basic Authentication을 이용한 유저 인증하기

이렇게 3개의 파트로 글을 작성하고 있다. 이틀 전에 Nginx Proxy Pass 설정까지 완료한 부분을 바탕으로 소프트웨어 마에스트로 멘토링 시간에 데모를 진행하던 중에 문제가 발생했다.

$ docker run -i -t \ 
    -p 80:80 \
    -v ~/conf/:/etc/nginx/ \ 
    --link docker-registry:docker-registry \
    nginx:latest
2014/09/27 16:05:55 [emerg] 1#0: "daemon" directive is duplicate in /etc/nginx/nginx.conf:28  
nginx: [emerg] "daemon" directive is duplicate in /etc/nginx/nginx.conf:28  

1.7.4 버전까지만 해도 정상적으로 설정을 그대로 사용했는데 nginx:latest ( 1.7.5 )를 사용했을 때는 다음과 같은 오류가 발생한 것이다 :

"daemon" directive is duplicate in /etc/nginx/nginx.conf

원인

원인을 찾기 위해서 Dockerfile을 상세하게 살펴보기로 결정했으면 더 쉽게 찾을 수 있었겠지만 그 당시에는 잘 생각나지 않아서 docker history를 이용해서 간단하게 나마 어떤 명령어나 설정들이 수행되었는지 확인할 수 있었다.

$ docker history nginx:latest
IMAGE               CREATED             CREATED BY                                      SIZE  
1d705e498110        45 hours ago        /bin/sh -c #(nop) CMD [nginx -g daemon off;]    0 B  
ef9dc8c40b6c        45 hours ago        /bin/sh -c #(nop) EXPOSE map[80/tcp:{} 443/tc   0 B  
c291e34f9070        45 hours ago        /bin/sh -c #(nop) VOLUME ["/etc/nginx"]         0 B  
8f7edd46b5ad        45 hours ago        /bin/sh -c #(nop) VOLUME ["/usr/share/nginx/h   0 B  
b3e00c249a32        45 hours ago        /bin/sh -c ln -sf ../share/nginx /usr/local/n   14 B  
93c2ce8d7790        45 hours ago        /bin/sh -c ln -sf /dev/stderr /var/log/nginx/   11 B  
56527d784d59        45 hours ago        /bin/sh -c ln -sf /dev/stdout /var/log/nginx/   11 B  
bf079b762516        45 hours ago        /bin/sh -c apt-get update && apt-get install    14.93 MB  
009567f437d7        45 hours ago        /bin/sh -c #(nop) ENV NGINX_VERSION=1.7.5-1~w   0 B  
2a17fa889f9c        45 hours ago        /bin/sh -c echo "deb http://nginx.org/package   211 B  
78a1a3e01a3e        45 hours ago        /bin/sh -c apt-key adv --keyserver pgp.mit.ed   32.33 kB  
d17b28c8c2ae        45 hours ago        /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai   0 B  
0d910b753f37        45 hours ago        /bin/sh -c #(nop) CMD [/bin/bash]               0 B  
68c0d73feecf        45 hours ago        /bin/sh -c #(nop) ADD file:e35440ed24b737ce6f   85.19 MB  
511136ea3c5a        15 months ago                                                       0 B  

확인해보니 기존에 echo "\ndaemon off;" >> /etc/nginx/nginx.conf"가 빠지고 이 부분이 컨테이너가 실행되는 시점에 옵션으로 포함되도록 변경이 된 것을 발견했다. ( CMD ["nginx", "-g", "daemon off;"] )

"이게 왜 이렇게 버전업 되었을까?", "기존의 nginx.conf 들과 호환이 되지 않을텐데 이렇게 변해도 맞는걸까?" 라고 고민, 질문을 하다가 Commit Log 를 찾아보자는 생각이 들었다. 실제로 Docker Hub에 올라가 있는 Nginx Dockerfile은 이미 수정이 된 상태로 로그가 남아있었다.

Simplify default command via PATH and default conf This makes it simpler for users to supply custom arguments at runtime, since they essentially have to duplicate this default command line to do so. - tianon/docker-nginx@305e286 :

풀 리퀘스트

이유를 찾아보니 이러한 변화가 맞다는 판단이 들었고 아직 업데이트된지 별로 긴 시간이 지나지 않아 ( 18시간 ), 다른 분들도 나와 같은 이유로 헷갈리지 않았으면 하는 마음에 아직 변경되지 않은 Dockerfile/nginx 프로젝트를 수정하여 풀 리퀘스트를 날리게 되었다.

글을 정리하며

일단 풀 리퀘스트를 날리고 나니 굉장히 설레고 기분이 좋더라. 굉장히 사소한 풀 리퀘스트지만 남들보다 조금 빠르게 발견하고 풀 리퀘스트를 날렸다는 사실 자체가 굉장히 뿌듯했다.

또한 도커 코리아 커뮤니티에서 매번 글을 읽기만 하다가 나도 이제 한번은 참여해봐야겠다라는 생각이 들어, 내가 참고했던 ( 오류를 발견할 수 있었던 ) 글에 댓글로나마 소심하게 커뮤니티에 참여했다.

앞으로의 개발이 굉장히 설렌다.

안수찬 @dobestan

안수찬 @dobestan

https://dobest.io/

소프트웨어 생태계에 기여할 수 있는 실용주의 프로그래머가 되고자 합니다. 나는 안수찬이다. 그러므로 나는 할 수 있다.

View Comments...