docker 1

김민재·2024년 12월 4일
0
post-thumbnail

각 사람들마다 선호하는 소프트웨어가 있고 모든 개발자들이 다 똑같은 환경에서 작업을 하는 것은 아니다.

일반적으로 가상화를 한다고하면 vm머신이 떠오를 것이다.

vm머신은 실제로 내 운영체제 위에다가 다른 운영체제를 실행시켜서 나의 실제 운영체제와는 독립적인 운영체제를 만드는 것이다.
그렇지만 운영체제와 애플리케이션 등을 깔아야하기 때문에 많은 하드웨어 자원을 소비하는게 문제였다.

반면에 도커는 애플리케이션을 실행하기 위해 필요한 파일과 라이브러리, 의존성 등을 패키지화하여 컨테이너라는 단위로 관리하나 vm과는 다르게 실제 운영체제와 커널을 공유하며 다른 컨테이너와 격리된 공간에서 작용한다. - 이를 통해서 컨테이너는 가볍고 빠르게 실행되며 더욱 효율적인 자원 활용이 가능해졌고 다른 컨테이너 간 상호작용이나 컨테이너의 삭제도 간편하게 수행할 수 있게 되었다.


여기서 컨테이너는 우리가 컨테이너 하면 떠오르는 네모난 상자와 비슷하다.
여기서 이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드 및 라이브러리, 컴파일된 실행 파일을 묶어 둔 것이다.

이번에 사용할 mysql이나 redis의 이미지는 실행하기 위한 모든 파일을 가지고 있다.(실행하는데 필요한 파일, 실행 명령어, port 정보, 저장할 위치 정보 등등)

그리고 이를 컨테이너에 실게되면 이미지를 실행하게되며 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징, 캡슐화하여 격리된 공간에서 프로세스를 동작시키게 된다.

이를 통해서 우리는 다른 환경에서도 컨테이너를 이용하여 굳이 환경 세팅을 해줄 필요 없이 컨테이너를 실행시킴으로써 실행시킬 수 있게 되는 것이다.

도커 이미지 만들기

도커 이미지를 만들기 위해서는 dockerfile이 필요하고 내부에 다수의 디렉터리를 띄워서 만들고자 한다면 각 디렉터리마다 pacakge.json이나 dockerfile 등이 필요하다.


이번에 만들어 볼 이미지는 레디스에 값을 간단하게 넣는 코드이다.

이를 위한 도커 파일인데, FROM은 기본 이미지로 무엇을 쓸지(우리는 노드 환경이므로 노드를 작성하면 되고 alpine을 사용하게 되면 정말 필요한 것들만 담기게되서 이미지 크기를 감소시킬 수 있게된다.
WORKDIR은 작업 디렉터리를 어디로할지 정하는 것이고 이는 자신의 루트 디렉터리에서 정하면 된다.
COPY는 어떤 파일들을 복사해서 이미지에 넣을 것인지다. 이떄 package.json은 이해가 가지만 .은 뭘까...
.은 현재 디렉터리에 있는 모든 파일들을 복사해서 넣는 것이다.

RUN은 이미지를 만들떄 명령어를 실행하는 부분이다.
yarn install -> 다 알겠지만 기본 세팅에 필요한 패키지 파일을 받는 것이다.

CMD는 해당 컨테이너가 수행하게 될 명령을 적어둔 것이다.
우리는 현재 디렉터리 안에 있는 node server.js 명령을 수행하면 된다.

이렇게 준비가 다 끝났다면 도커 이미지를 업로드해보자.

일단 간단하게 이름을 정하는 방식으로 이미지를 업로드 하고자 했다.

이렇게 현재 디렉터리에서 이미지를 빌드하게 되면

이미지가 짜잔하고 생기게 된다.

오늘은 이렇게 도커 기본과 이미지를 직접 만들어보았다.

내일은 이 이미지와 기존의 도커에서 제공하는 이미지들을 이용하여 mysql, redis, sample 3가지 컨테이너를 묶어서 만드는 docker compose에 대해서 공부할 예정이다.

profile
ㅇㅇ

0개의 댓글