인프런 커뮤니티 질문&답변

초록잎님의 프로필 이미지
초록잎

작성한 질문수

제발 도커 씁시다!

도커 배포에 관하여 질문드립니다.

작성

·

956

1

안녕하세요.

유익한 강의 감사히 들었습니다.

강의를 듣고 궁금한 점을 정리하여 질문을 드리고자 합니다.

1. 개발한 도커 환경 자체를 하나의 exe 파일로 만들어 배포할 수는 없는지 질문드립니다.

파이썬의 경우 윈도우 환경에서 개발한 .py 파일을 pyinstaller 패키지를 통해 .exe로 묶을 수 있습니다.

 그런데 경우에 따라서는 이 파일(exe 파일)이 리눅스에서 작동하지 않기도 합니다.

이 경우 docker 위에서 돌아가는 소스 코드를 도커 환경까지 포함해서 하나의 exe로 만들면 윈도우, 리눅스 관계 없이 사용할 수 있을 것 같은데,

그런 방법이 있는지 궁금합니다.

(exe 파일을 받는 사람은 도커를 쓸 줄 모르고, 환경도 모두 다른 상황입니다)

2. 만약 1번이 불가능하다면, 도커에서 말하는 지속적 배포 (CD)가 어떤 것인지 궁금합니다.

배포를 한다는 것은 이 애플리케이션을 가져다 쓸 모든 환경에서 작동한다고 말하는 것과 같다고 강의에서 말씀해주셨습니다.

궁금한 점은, 이것이 소스 코드로 이루어진 라이브러리 뿐만 아니라,

실제 애플리케이션(모바일 앱, 게임 등...)에도 마찬가지로 적용되는지 궁금합니다.

만약 적용되지 않는다면, 강의에서 말씀해주신 애플리케이션을 도커에 담아 배포한다. 라는 표현이 dockerfile과 함께 배포한다는 의미만 갖는지 궁금하여 여쭤봅니다.

다시 한 번 좋은 강의 만들어주신 점에 감사드립니다.

좋은 한 해 되시길 바라겠습니다.

수강생 드림.

답변 3

1

무파마님의 프로필 이미지
무파마
지식공유자

네 물론입니다.

도커 데몬과 도커 이미지(애플리케이션)을 둘 다 서버에 배포 한 뒤

도커 데몬 설치 + 도커 이미지 실행 하시면 초록잎님이 말씀하시는 시나리오입니다.

하지만 여기서 중요한 점은 Wine 과 Docker 는 완전히 다른 목적을 가졌다는겁니다.

Wine 은 '리눅스에서 윈도우즈 API 호출을 가능케 한다' 라는 목적을 가지고 있습니다. 때문에 윈도우즈 전용 게임(롤)을 리눅스에서 똑같이 구동 할수 있게 해주죠.

반면에 Docker 는 '리눅스 애플리케이션을 다양한 환경에서 구동 가능하게 한다' 라는 목적을 가지고 태어난 놈입니다.

이 때문에 우리가 Wine 과 Docker 에게 기대할수 있는 결과가 달라집니다.

일단 도커로 윈도우즈 전용 게임인 롤은 플레이 불가능할겁니다.

하지만 도커로 게임을 에뮬레이팅 하는 사례는 존재합니다. 예상하셨겠지만 Terminal 방식의 게임이거나, Web 게임을 구동시켜 웹브라우저로 접속해서 플레이하는 방식입니다. https://www.youtube.com/watch?v=LriUAmAkuD8

참고로 보통 도커 데몬은 대부분 클라우드 환경에 설치가 되어있습니다. ㅎㅎ 때문에 '도커 이미지만 서버에 잘 전달 하는것' 을 지속적 배포의 목표로 두죠. 도커 데몬이 설치되어있기 때문에 매니지드 컨테이너 서비스 라고 부를수 있는거고요. (AWS ECS 같은)

1

무파마님의 프로필 이미지
무파마
지식공유자

안녕하세요 초록잎님~ 😄

🐥1. 먼저 .exe 파일로 묶는 행위는 바이너리 파일을 빌드한다 라고 볼 수 있습니다. 이는 도커의 관점에서 도커 이미지를 빌드 한 것 과 동일한 행위로 간주 할 수 있습니다.

말씀하신것처럼 소스코드를 포함해서 이미지를 빌드하면, 도커 데몬이 이 이미지를 실행(run) 할 수 있습니다. 이 덕분에 도커 데몬이 설치된 환경에서는 우리가 기대하는대로 애플리케이션이 잘 실행되는겁니다.

정리하자면 도커는 이미지를 빌드해 .exe 와 같은 실행 파일을 만들고 이를 윈도우, 리눅스 관계 없이 도커 데몬이 설치된 환경이라면 환경과 관계 없이 실행된다. 입니다.

🐥2. 클라우드 환경에서 도커는 서버들이 어떤 환경을 가지고 있는지 신경쓸 필요 없이 도커 이미지를 서버가 Docker Hub 에서 다운로드 받고, 도커 데몬이 실행(run) 하면 애플리케이션이 정상 배포됩니다.

이 절차를 자동화된 파이프라인으로 정의해서 지속적인 배포를 구축할 수 있습니다.

하지만 도커가 없는 상황에서 지속적인 배포 파이프라인을 만드려면 고려해야 할 점들이 늘어납니다.

예를 들어 우리의 애플리케이션이 A 라는 라이브러리를 사용한다고 쳐봅시다.

이때 이 A 패키지를 CentOS 환경에서 다운로드 받을 때는 apt-get a-lib 이라는 명령어가 필요하고

Amazon Linux 에서 다운로드 받을 때는 yum install a-library 라는 명령어가 필요합니다.

이 간단한 시나리오에서도  CD 파이프라인의 일관성이 깨지기 시작합니다. 하지만 애플리케이션에 필요한 모든 환경을 담아 놓은 도커 이미지를 생성하고 이를 서버에 잘 전달만 할 수 있다면 지속적 배포 절차가 안정적이며, 간소화될겁니다.

0

초록잎님의 프로필 이미지
초록잎
질문자

빠른 답변 감사드립니다!

한 가지만 더 질문드리고 싶습니다.

1. 도커 데몬을 어플리케이션과 함께 배포하는 것도 가능할까요?

말씀해주신 대로라면, 도커가 설치되어 있는 한 환경에 관계 없이 실행될 수 있다고 하셨습니다.

그렇다면 도커가 실행되어 있지 않은 환경이라면 설치하게 만든 뒤(.NetFramework와 C++ 재배포 패키지처럼) 어플리케이션을 구동시킬 수도 있을까요?

가령, 리그 오브 레전드(적절한 예시인지는 모르겠습니다 ^^;;)라는 게임은 윈도우와 맥 환경만 지원합니다.

하지만 리눅스에서도 Wine을 통해 실행할 수 있습니다. 

그렇다면, 이 게임을 자체를 도커 위에서 가동하게 만들고,

그렇게 가동하는 게임 파일 + 도커 데몬을 사용자가 함께 다운로드하게 해 주면

리눅스라도 Wine 없이 플레이가 가능한 것인지... 이것이 가능한 지 궁금합니다.

도커를 배우면서 개발 환경은 만들어 잘 사용하고 있는데, 어플리케이션 단에서도 가능할 지 질문드리고 싶습니다.

감사합니다!

초록잎님의 프로필 이미지
초록잎

작성한 질문수

질문하기