Docker 따라하기

정민교·2024년 5월 10일
0

Docker

목록 보기
2/10
post-thumbnail

📒목표

지금까지 Docker 대한 전반적인 내용에 대해 알아보았으니, 간단하게 공식 문서를 보고 Docker를 사용하는 법을 따라해본다.

📒앱 컨테이너화 하기

repository를 clone해서 node 프로젝트 복사하기.

$ git clone https://github.com/docker/getting-started-app.git

프로젝트는 다음과 같은 구조로 되어있음

├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock

✔️앱 이미지 빌드하기

해당 프로젝트로 이동해서 프로젝트 루트 경로에 Dockerfile 생성하고 다음과 같이 작성하기

# node 18 apline 버전 이미지를 기반으로 시작
FROM node:18-alpine

# working directory를 /app 으로 지정
WORKDIR /app

# 빌드 컨텍스트에 있는 모든 파일을 컨테이너 파일시스템의 /app으로 복사
COPY . .

# 의존성 설치(배포에 필요한 의존성만)
RUN yarn install --production

# 컨테이너를 실행할 때 다음 명령어를 실행
CMD ["node", "src/index.js"]

# 3000번 포트를 오픈
EXPOSE 3000

이미지 빌드하기

$ docker build -t getting-started .

Docker는 여러 layer를 다운로드 합니다.

-t 플래그는 최종 이미지의 이름을 지정합니다. 이미지 이름은 getting-started라고 했기 때문에 컨테이너를 실행할 때 해당 이미지 이름으로 참조할 수 있습니다.

docker build 명령어 끝에 . 은 현재 디렉토리를 빌드 컨텍스트로 지정하며, 현재 디렉토리에서 Dockerfile을 찾아야 한다는 것을 알려줍니다.

✔️컨테이너 실행하기

이미지를 지정하여 컨테이너를 실행하기

$ docker run -dp 3000:3000 --name getting-started getting-started

-d or --detach 플래그를 사용하여 컨테이너를 백그라운드에서 실행합니다.

-p or --publish 플래그를 사용하여 호스트와 컨테이너 사이의 포트 매빙을 생성합니다.

-p 플래그는 HOST:CONTAINER 형식의 문자열 값이며, 여기서 HOST는 호스트의 주소이고 CONTAINER는 컨테이너의 포트입니다.
이 명령은 컨테이너의 포트 3000을 호스트의 127.0.0.1:3000(localhost:3000)에 게시합니다. 포트 매핑 없이는 호스트에서 애플리케이션에 접근할 수 없습니다.

실행된 컨테이너 확인하기

$ docker ps -a

실행중인 컨테이너는 확인할 수 있습니다.

localhost:3000 접속

브라우저를 통해 확인할 수 있습니다.

📒앱 컨테이너 업데이트 하기(컨테이너 중지 및 삭제)

✔️소스코드 업데이트

업데이트 된 소스코드를 다시 이미지로 빌드

$ docker build -t getting-started .

새로운 컨테이너를 실행

docker run -dp 3000:3000 --name getting-started getting-started
docker: Error response from daemon: driver failed programming external connectivity on endpoint blissful_shockley (cddfde8fe6720c9d803113b72d4195fe6587ecc08c4b4fd43a1e233dff67aa49): Bind for 0.0.0.0:3000 failed: port is already allocated.

이미 이전 컨테이너가 호스트의 3000번 사용 중이기 때문에 에러가 발생함

이전 컨테이너 중지 및 삭제 후 재실행

📒Docker registry 사용해서 이미지 공유하기

Docker 이미지를 공유하기 위해 Docker 레지스트리를 사용해야 합니다.

기본 레지스트리는 Docker Hub 입니다.

✔️Docker Hub에 리포지토리 생성하기

Docker Hub에 가입 후 리포지토리를 생성한다.(getting-started 이름으로 생성)

✔️Docker Hub 로그인 후 push

docker login -u <username>

로그인은 private token을 비밀번호를 사용해서 로그인 할 수 있습니다.(Docker Hub 프로필에서 생성 가능)

docker tag getting-started devmingyo/getting-started

tag 명령어로 getting-started 이미지 이름을 새로운 이름으로 변경합니다.

Docker Hub에 푸시하기

docker push devmingyo/getting-started

✔️Docker Playground 에서 pull 및 run

방금 도커 레지스트리에 푸시한 이미지를 Docker playground에서 컨테이너 실행을 해보겠습니다.

run 명령어로 컨테이너를 실행할 때, 이미지가 호스트 컴퓨터에 존재하지 않으면, 먼저 도커 레지스트리에서 이미지를 pull 해옵니다.

새 컨테이너가 잘 실행됐습니다.

📒정리

Docker를 이용해서 이미지를 빌드하고 실행, 중지, 삭제, Docker Registry에 push 및 pull, tag 명령어를 이용하여 이미지 이름 변경까지 알아보았습니다.

profile
백엔드 개발자

0개의 댓글