정구리의 우주정복
[Docker] 5. 대화형 셸 말고 내 코드를 실행하는 방법 (Dockerfile 작성 방법) 본문
이전 게시글
https://j-ungry.tistory.com/370
에서 docker hub 의 node 를 가져와서 대화형 셸을 실행시켜봤는데 사실 우리는 대화형 셸에서 코딩을 하는 경우는 거의 없고 내 코드를 실행시키고 싶어하는 경우가 더 많다 !! 그런 경우에는 어떻게 해야할까 !!!
Dockerfile 을 작성하면 된다 !
이러한 폴더 구조를 가지고 있다고 가정해보자
package.json 파일에는 각종 dependencies 에 대한 정의가 들어있다 (실행에 필요한 친구들)
이제 Dockerfile 을 작성해볼거다
Dockerfile 작성
1. FROM
# FROM : 다른 기본 이미지에 이미지를 구축 할 수 있게 해준다
FROM node
다른 기본 이미지에 이미지를 구축할 수 있게 해준다
여기서 사용할 기본 이미지는 node 이다 ! 만약 실행하게 된다면 local 에 node 이미지가 있다면 사용할것이고, 없다면 docker hub 의 것을 가져오게 될것이다 !
2. COPY
# FROM : 다른 기본 이미지에 이미지를 구축 할 수 있게 해준다
FROM node
# In my own image, I wanna start by pulling in node image
# tell which local file is going to image
COPY . /app
local 의 어떤 파일들이 이미지로 가야하는지 지정해주는 것이다
위의 경우에는 . /app 인데 local 의 현재 폴더에 있는 애들을 image 의 /app 하위로 복사하겠다는 것이다 !!!
3. RUN
run 을 통해 이미지를 생성할 때 실행되어야할 명령어를 작성할 수 있다
npm 을 통해서 dependencies 를 설치해줄 건데 이때 설치한 녀석이 /app 안에 들어있어야 한다 (위에서 /app 하위에 복사했으니까 ! )
이때 필요한게
4. WORKDIR
내가 사용할 워크디렉토리를 지정해주는것이다. workdir 까지 적용한 dockerfile은
# FROM : 다른 기본 이미지에 이미지를 구축 할 수 있게 해준다
FROM node
WORKDIR /app
# In my own image, I wanna start by pulling in node image
# tell which local file is going to image
COPY . /app
RUN npm install
이렇게 될 것이다
5. CMD
헷갈리면 안되는게 우리는 이미지를 실행하는게 아니라 "이미지를 기반으로 한 컨테이너를 실행하는 것" 이다 !
CMD 명령어는 RUN 과 다르게 "이미지가 생성될때 시작" 이 아니라 "컨테이너가 실행될때 시작" 되는 것이다 !!!!
배열 형태로 전달한다
# FROM : 다른 기본 이미지에 이미지를 구축 할 수 있게 해준다
FROM node
WORKDIR /app
# In my own image, I wanna start by pulling in node image
# tell which local file is going to image
COPY . /app
RUN npm install
# start node server
CMD ["node", "server.js"]
컨테이너 내부의 node 명령을 사용해 server.js 를 실행하는 것이다
6. EXPOSE
# FROM : 다른 기본 이미지에 이미지를 구축 할 수 있게 해준다
FROM node
WORKDIR /app
# In my own image, I wanna start by pulling in node image
# tell which local file is going to image
COPY . /app
RUN npm install
EXPOSE 80
# start node server
CMD ["node", "server.js"]
container 는 격리된 공간이기 때문에 포트를 열어줘야 외부와 통신할 수 있다
expose 명령을 사용해 특정 post 를 local system 에 노출시킬 수 있다 !!
이제 이미지 만들러 고고링
이미지 생성 및 컨테이너 띄우기
docker build .
를 해서 이미지를 생성해준다 실행 과정을 잘 보면 우리가 Dockerfile 에 정의한 대로 동작하는 것을 확인할 수 있다
docker run <image id>
컨테이너를 만들어준다 !! 이미지 아이디는 위에 있는 녀석이다
근데 이렇게 해도 바로 실행이 안된다 .. 왜냐면 한개를 빼먹었거든요 ..
우선 실행되어있는 녀석을 종료해줍니다 ..
expose 80 을 추가했지만 이것은 단순히 문서화일 뿐 실제로 80번 포트를 뚫어주는 역할을 하지는 않는다 그냥 나 80번 포트 씁니다 !! 소리지르는 정도 ..? 실제로 80번을 사용하기 위해선
docker run -p <local port>:<expose port> <image id>
이렇게 해야하는 것이다 !!! local 의 3000 을 80 번이랑 붙여주겠다 라고 이해했다
그렇게 실행한 뒤 localhost:3000 을 들어가면
잘 나오는 것을 볼 수 있다 !!
Dockerfile 을 정의하고 image 생성하고 container 만드는 것 까지 해봤다 넘 재밌다 !
'STUDY > DOCKER' 카테고리의 다른 글
[Docker] 7. attach 와 detach 모드, docker 에서 입력받기 위한 interactive mode (1) | 2023.10.22 |
---|---|
[Docker] 6. image layer에 대한 이해 (Dockerfile 최적화) (2) | 2023.10.16 |
[Docker] 4. 컨테이너를 만드는 이미지를 가져오는 두가지 방법 중 첫번째 (Docker hub 사용하기) (1) | 2023.10.14 |
[Docker] 3. Dockerfile 로 image 를 만들어 container 를 띄우자 ! (0) | 2023.10.12 |
[Docker] 2. Docker Desktop 설치하기 on Mac (1) | 2023.10.10 |