전체적인 과정을 진행함에 있어 가장 기본적인 시작점은 Dockerfil로 부터 시작된다.
1) 도커 파일 작성
2) 이미지 빌드 (docker build)
3) 빌드 된 이미지로 컨테이너 생성
FROM : 기본 베이스 이미지
-> 보통 OS를 가장 밑단으로 두는데 현재는 OS가 주축으로 필요시 되는게 아니니 node를 베이스 이미지로 둔다.
WORKDIR : 이미지 빌드 후 어떤 컨테이너에서 어떤 경로로 실행 할지 경로 설정
RUN : RUN 명령은 빌드 중에 수행되며, 이미지를 생성하는 동안 필요한 다양한 설정 및 패키지 설치, 파일 다운로드 등을 처리한다. 이를 통해 Docker 이미지가 필요한 모든 소프트웨어와 설정을 포함하도록 만들 수 있다.
ENTRYPOINT : Docker 컨테이너가 시작될 때 실행되는 명령어나 스크립트를 정의하는 Dockerfile 지시어. ENTRYPOINT를 사용하면 Dockerfile에서 이미지를 빌드할 때 컨테이너가 시작되는 명령어나 스크립트를 지정할 수 있습니다.
docker build -f Dockerfile -t <application 이름> .
-t < my app >
-t 옵션은 Docker 이미지를 빌드할 때 해당 이미지에 대한 이름과 태그를 지정하는 데 사용된다. 가령, 나의경우에서 mycafe는 빌드한 Docker 이미지의 이름이 된다. 일반적으로 이미지 이름은 소문자로 작성하며, 여러 단어를 포함하는 경우에는 하이픈(-)으로 구분한다. 즉, docker build -f Dockerfile -t mycafe . 명령어는 현재 디렉토리에 위치한 Dockerfile을 사용하여 mycafe라는 이름의 Docker 이미지를 빌드하라는 명령어다.
이미지가 성공적으로 빌드가 되면 아래와 같이 확인 가능.
도커 허브에 다음과 같이 repo 를 생성해준다.
푸쉬를 하기 위해선 이미지 태그 이름을 위와 같이 설정해 줘야 한다.
docker tag <컨테이너 이름>:<태그명> <레포명>:<태그이름>
그러면 위와같이 내가 새로 설정한 태그명이 추가된 걸 확인할 수 있다.
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 로 설정해줘야 한다.
이것 때문에 엄청 헤맸다..