최근에 주변 지인이 진행하는 프로젝트의 배포를 돕는 과정에서 Docker의 환경 변수를 주입하는 방법을 이것저것 설명해 주었다. 주된 내용은 빌드 타임의 환경 변수 주입과 런타임의 환경 변수 주입이 다르다는 이야기였는데, 결과적으로는 잘 해결이 되었으나 설명하면서도 살짝 애매한 부분이 있었다. 환경 변수라는 것을 넣어줄 수 있는 부분은 굉장히 많다. (1)Dockerfile에 정의해 줄 수도 있다. ENV나 ARG가 이에 해당한다. 그리고 (2). env 파일을 만들어서 dotenv를 사용해 애플리케이션에서 환경 변수를 끌어다 쓸 수 있게 해 줄 수 있다. 그리고 마지막으로는 (3) 바깥쪽의 오케스트레이션 툴(Kubernetes, docker-compose)도 환경 변수를 주입해 줄 수 있는데, 만약 ..
갑자기 동료 개발자에게 docker에 심각한 버그가 있다는 말을 들었다. 멀웨어 관련 이야기가 나오고 있길래, 우리 도커가 그럴 일이 없다고 생각했지만... 전 세계적인 어뷰징이 발생하고 있었다. 아래와 같은 팝업이 지속적으로 뜨며 개발자를 괴롭힌다. 악성 코드가 차단됨, 'com.docker.vmnetd'에 악성 코드가 포함되어 있어서 열리지 않았습니다. 이 소프트웨어는 악성 코드를 포함하고 있을 수 있습니다. 이 소프트웨어는 다운로드된 후 수정되었을 수 있습니다. 이 소프트웨어를 실행하면 컴퓨터에 손상을 줄 수 있습니다.악성 코드가 차단됨 'com.docker.socket'에 악성 코드가 포함되어 있어서 열리지 않았습니다. 이 소프트웨어는 악성 코드를 포함하고 있을 수 있습니다. 이 소프트웨어는 ..
최근에 쿠버네티스 자격증을 공부하고 있는데, CMD와 ENTRYPOINT의 차이점에 대한 내용이 나왔다. 강의를 듣다 보니까 세상에, 이런 사실을 자세히 모르고 있었다니... 대충 ENTRYPOINT를 사용할 때에는 런타임에 주입하는 경우라고만 알고 있었는데, 자세히 알고 보니까 생각보다 중요한 내용이었다. 그리고 생각해 보니 예전에 재미있는 일이 있었다. 한 2년 전쯤의 일이다. node.js 프로그램을 docker container로 띄우기 위해서 아래와 같이 CMD를 입력했는데 안 됐다.CMD ["tsc", "main.ts", "&&", "node", "main.js"] ts를 통해서 타입스크립트를 빌드하고, 빌드된 js를 실행하는 명령어를 CMD로 나타냈는 데, 안 되는 것이다. 도저히 안되어 n..
매일 시간 날 때마다 geeknews를 보는 편이다. 이런저런 글들 중에서 가장 관심 있는 글을 발견하였는데 그것은 바로 도커의 멀티 스테이지 빌드에 대해서 쓰인 글이었다.[geeknews] Docker multi-stage build로 컨테이너 이미지 크기 줄이기 : https://news.hada.io/topic?id=17794 Docker Multi-Stage Build로 컨테이너 이미지 크기 줄이기 | GeekNewsDocker 컨테이너 이미지를 빌드할 때, Dockerfile이 Multi-Stage 구조가 아니라면 불필요한 파일이 포함될 가능성이 큼이는 이미지 크기 증가 및 보안 취약성 증가로 이어짐컨테이너 이미지에서 발생할news.hada.io 해당 게시글을 보고 바로 링크된 원문을 확인하여 ..
최근 AWS 기반으로 CI/CD 파이프라인이 구축되어 있던 것을 온프레미즈로 옮기고 있기도 하고, 현재 일하는 곳에서 젠킨스를 이용한 CI/CD 파이프라인을 구축해야할 일이 있었다.젠킨스에 대해서 자세하게 다뤄본 적은 없었으나, 컨테이너를 통하여 젠킨스를 띄우고 젠킨스에서 다른 컨테이너를 컨트롤 하는 상황일 때, 꽤나 잔 에러가 많이 난다고 듣기만 하고서 선뜻 다뤄보지 못했다. 이번 포스팅에서는 docker를 통해 젠킨스를 띄우는 방법에 대해서 다룰 예정이며, dood 방식으로 진행한다. 파이프라인 구성에 대한 자세한 부분은 담지 않는다. 본론DinD? DooD? DinD ( Docker in Docker )먼저 DinD는 말 그대로 Docker를 컨테이너 안에 설치하여 실행하는 방법이다. 즉, 하나의 ..
학교에서 HPC(High Performance Computer)를 관리하는 일을 하면서, 여러 난관에 봉착하게 되었다. 가장 신경 쓰였던 점은 사용자들에게 리눅스 기반의 접근을 제공하는데, 모든 사용자들을 커버할 수 없다는 점이다. 예를 들어 pytorch나 tensorflow 기반 사용자들을 고려하여 관련 모듈은 내부적으로 설치가 끝난 상황이지만, 다른 프로그램을 돌리는 사람이 몇몇 있다! 그러한 케이스의 사용자들을 커버하기 위해서 추가한 것은 바로 이 enroot라는 명령어이다. 이는 NVIDA에서 만든 툴로써 권한이 없는 상황에서도 docker image를 기반으로 컨테이너 혹은 OS를 만드는 데, 도움을 주는 sandbox 툴이다. 무엇보다 이름 그대로 enroot 즉, root를 만들어 준다는 ..
인프라에 대해서 공부하다보면 docker라는 기술을 많이 사용하는 것을 알 수 있는데, 과연 어떠한 이점이 있기에 도커를 사용하는 것일까? 다양한 장점이 있지만 어떤 프로그램을 다운로드하는 과정을 간단하게 만들기 위해서라고 생각한다. 물론 이 외에도 굉장히 많은 장점이 있다. 본론docker가 어떻게 다운로드 하는 과정을 간단하게 만들어 줘요?도커가 없다면 우리는 프로그램을 어떻게 다운로드할까? redis를 다운로드한다고 생각해보자. redis 인스톨러 다운로드인스톨러 실행프로그램 설치 완료 및 구동이러한 방식을 통해서 프로그램의 설치가 이루어진다. 실제로 redis를 설치하려고 한다면, redis.io 사이트 방문을 통해 인스톨러를 다운로드 하거나, homebrew라는 CLI 패키지 매니저를 사용해서 ..
본 포스팅은 어떻게 dockerfile을 작성할 것인지에 대해 실습하는 과정을 중점적으로 포스팅하였기 때문에, docker의 구조 및 자세한 설명은 생략한다. docker의 다운로드 등은 다른 포스팅을 참고하는 것을 권장합니다. What is a container?docker의 공식 문서에 따르면 컨테이너의 정의는 아래와 같다. A container is a sandboxed process running on a host machine that is isolated from all other processes running on that host machine. That isolation leverages kernel namespaces and cgroup features that have been in..