[Docker] Dockerfile 생성, image 빌드 후 도커 hub에 push 하기 !

‍정진철·2023년 4월 5일
0

Dockerfile 작성하기

전체적인 과정을 진행함에 있어 가장 기본적인 시작점은 Dockerfil로 부터 시작된다.

1) 도커 파일 작성
2) 이미지 빌드 (docker build)
3) 빌드 된 이미지로 컨테이너 생성

  • FROM : 기본 베이스 이미지
    -> 보통 OS를 가장 밑단으로 두는데 현재는 OS가 주축으로 필요시 되는게 아니니 node를 베이스 이미지로 둔다.

  • WORKDIR : 이미지 빌드 후 어떤 컨테이너에서 어떤 경로로 실행 할지 경로 설정

  • RUN : RUN 명령은 빌드 중에 수행되며, 이미지를 생성하는 동안 필요한 다양한 설정 및 패키지 설치, 파일 다운로드 등을 처리한다. 이를 통해 Docker 이미지가 필요한 모든 소프트웨어와 설정을 포함하도록 만들 수 있다.

  • ENTRYPOINT : Docker 컨테이너가 시작될 때 실행되는 명령어나 스크립트를 정의하는 Dockerfile 지시어. ENTRYPOINT를 사용하면 Dockerfile에서 이미지를 빌드할 때 컨테이너가 시작되는 명령어나 스크립트를 지정할 수 있습니다.


Image 빌드

docker build -f Dockerfile -t <application 이름> .

  • -f Dockerfile
    -f 옵션은 Dockerfile의 이름이나 위치를 지정할 때 사용하는 옵션 Dockerfile이 현재 디렉토리에 있고 파일 이름이 Dockerfile인 경우에는 -f Dockerfile을 사용하지 않아도 됨. 그러나 Dockerfile이 다른 이름을 가지고 있거나 다른 경로에 있을 때, -f 옵션을 사용하여 Docker가 올바른 파일을 찾을 수 있도록 지정할 수 있다. 따라서 docker build 명령어에서 -f Dockerfile은 현재 디렉토리에서 Dockerfile을 사용하겠다는 것을 나타낸다.
  • -t < my app >

    -t 옵션은 Docker 이미지를 빌드할 때 해당 이미지에 대한 이름과 태그를 지정하는 데 사용된다. 가령, 나의경우에서 mycafe는 빌드한 Docker 이미지의 이름이 된다. 일반적으로 이미지 이름은 소문자로 작성하며, 여러 단어를 포함하는 경우에는 하이픈(-)으로 구분한다. 즉, docker build -f Dockerfile -t mycafe . 명령어는 현재 디렉토리에 위치한 Dockerfile을 사용하여 mycafe라는 이름의 Docker 이미지를 빌드하라는 명령어다.

이미지가 성공적으로 빌드가 되면 아래와 같이 확인 가능.


Docker Hub 에 Push 하기

도커 허브에 다음과 같이 repo 를 생성해준다.

푸쉬를 하기 위해선 이미지 태그 이름을 위와 같이 설정해 줘야 한다.

tag 네임 설정

docker tag <컨테이너 이름>:<태그명> <레포명>:<태그이름>

그러면 위와같이 내가 새로 설정한 태그명이 추가된 걸 확인할 수 있다.

Push 하기

docker push <새로 만든 태그>

그러면 결과적으로 위와 같이 내가 만든 레포에 내가 만든 이미지가 hub에 push된 걸 확인할 수 있다.


추가적으로 ... (별표)

지금은 docker compose 를 사용한 것이 아니라 내부적으로 localhost 에 있는 Reids, mysql 서버가 따로 구현이 되어있는데 나중에 이러한 서버도 컨테이너로 띄어 컨테이너 끼리 연결시켜 전체적인 앱을 구현하는데

현재는, 앱 내부적으로 구현되어 있어서 DB_HOST를 localhost로 연결하면 도커에서 인식?하지 못하고 계속 ECNNREFUSED 127.0.0.1:3306(or 6370) 오류가 발생한다.

따라서 코드 구현시 HOST 를 docker.for.mac.host.internal (맥북 일 경우) 혹은 host.docker.internal 로 설정해줘야 한다.

이것 때문에 엄청 헤맸다..

ref: https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach


profile
WILL is ALL

0개의 댓글