[03] Docker, 나의 Dockerfile을 만들어보기 (feat. frontend폴더)

이 글은 도커사용을 위한 가이드 글이 아닙니다.

개인학습 기록용 포스팅입니다.

 

 

 

#Docker 파일이 뭐냐면

explorer를 보면 frontend, backend, database 각각의 폴더 안에 [Dockerfile]이 존재한다

컨테이너를 보다 더 활용하려 dockerfile이 존재하는 것임.

 

 

 

# 어떻게 활용하냐고?

도커파일 나만의 이미지를 만들기 위한 설계도 개념이다

초기에 nods.js를 받기위한 남의 docker이미지로 끝나지 않고, 이 이미지에 내가 원하는 옷을 입히듯이 '나만의 dockerfile'로 덮어져 만들어가는 것이다

 

만약 이렇게 도커파일을 업데이트 시켜주지 않고 사용한다면 서비스를 돌릴 때마다 불편함을 안고 가야한다.

예를들어, 저번 시간에 도커로 이용했던 nods.js를 받고 나면 내가 할 후속작업들을 매~번 다시다시 해줘야하는 불편함이 있다

그러니, 기존의 nods.js 이미지에 내가 한 작업들을 덧댄 docker파일을 만들자

 

 

 

# 얄코님이 Dockfile에 적어주신 명령어들을 살펴보자

 

  • FROM
    - FROM은 덧댈 파일을 나타낸다.
  • run명령어
    - run명령어는 이미지를 생성하는 과정에서 실행한다 (여기서는 http-server를 설치중)
    - 이미지로부터 컨테이너가 만들어져 가동될 때 기본적으로 실행되는 명령어임

    - 즉, 이미지에서 컨테이너를 실행하는 시점에서는 이미 http-server가 설치되어 있도록 하는 게 목적이다.

 

 

 

# CMD창에서 해당 파일로 이미지를 만들어보자

 

  •  이미지 생성 명령어
docker build -t {이미지명} .     // .은 상대경로명, Dockfile이름으로 되어있으면 명시가 따로 필요하지 않음

 

 

위 코드 실행결과

 

no.. such.. file... or... directory...................

no.. such... file...... or... directory..........

no.....or................

NO.............................. OTL...............................

 

아, CD 이동을 안 해줬구나

cd frontend

 

코드 재실행 결과

제대로 설치가 들어가서 기뻤다.

다만 노트북 디스크 용량이 꽉 차서 그런 것 같긴한데 이게 117초나 걸릴 일일까 싶었다.

 

 

 

docker images를 하면 Dockerfile과 build명령어로 만든 이미지를 확인가능 (http-server가 깔려있음)

큐큐가 생겼는데, 여기에 상위폴더로 가서 node.js도 다시 설치해주고 재확인하자

 

 

cd ..
docker run -it node
docker images

참고로 nods.js 설치하는데 200mb였고, 이걸 돌리는 내 C드라이브는 용량이 7기가 남짓이다 얘 죽을 것 같다.

이제 나에게 node, kyukyu 이미지 두개가 생긴 것을 확인.

kyukyu에는 http-server가 깔려있다. (얄코님이 이렇게 되도록 Dockerfile에 작성했으니까.)

 

 

 

  •  컨테이너 생성 명령어
docker run --name {컨테이너명} -v $(pwd):/home/node/app -p 8080:8080 {이미지명}
  • --name 옵션
    - 예전에는 컨테이너가 임의의 명을 지어줬으나, 이번에는 {컨테이너명} 으로 직접 적는다 
  • -v 옵션
    - volume의 약자, 컨테이너와 특정폴더를 공유하는 것.
  • pwd명령어
    -
    현 위치를 출력하여 [지금 위치한 이 폴더 안의 내용]들을  컨테이너의 home/node/app폴더에 들이겠다는 의미
  • -p 옵션
    - 집의 내선번호를 컨테이너로 연결하는 것

    - 이 사이트를 8080번으로 송출할 것임
    - 집의 8080번을 컨테이너의 8080번과 연결한다.
    - 만약 이 컨테이너를 두 개 이상 만들면, 집의 내선번호를 공유할 수 없으므로 충돌일어남
    - 같은 이미지의 다른 컨테이너를 실행할 때는 집의8081을 컨테이너 8080번으로 연결하는 등의 방법을 쓰면 됨
  • {이미지명}
    - 마지막으로 컨테이너와 실행할 이미지명을 설정

이를 통한 명령어를 작성시, 8080서버가 열리며 해당 사이트 열수 있게됨

크롬에서 localhost:8080 주소창 검색시 뜸. 여기서 loccalhost는 내 컴퓨터인 로컬저장소를 뜻하고, 8080은 앞서말한 내선번호.

 

 

 

이렇게 정리하고 직접 내가 실행하면?

 

아 ㅋㅋㅋ.. CD 이동을 안해줬구나! 하면서 다시 실행하면?

 

아 ㅋㅋㅋㅋㅋ... 내가 영어를 안 읽었군. 대문자를 쓰지말자! 하고 다시하면?

 

아...... ㅋㅋ... ㅋㅋㅋㅋㅋ...ㅋ..... 내가 뭘 잘못했지? 하고 명령어 빠뜨렸다는 걸 5분동안 헤매고 다시하면?

오. starting이래! 하면서 좋아할 수가 있어요!

 

 

 

액세스를 허용해주고, 페이지를 접속(localhost:8080) 하러가자.

 

 

 

페이지를 찾을 수가 없어요.

왜요?

404요?

그 서버는 있는데 호출이 안 된다는 말이죠?

구글링 할까요?

[IIS에서 바인딩 편집에서 DNS에 등록된 도메인을 추가해 주면 해결이 가능하다.] 라고 하시는데 진짜 그래야하나요?

 

 

 

 

넌 또 왜?

그만해야겠다.

 

 

+)

..D드라이브를 뭐하러 사 이럴거면