[Docker] 기초

힐링힐링·2024년 7월 2일
0

What is a container?

컨테이너는 모든 코드를 실행하기 위한 격리된 환경입니다.
컨테이너를 선택하고 파일 탭으로 이동하여 그 안에 무엇이 있는지 확인하세요.

How do I run a container?

클론후 디렉토리 접속

git clone https://github.com/docker/welcome-to-docker
cd welcome-to-docker

ide에 Docker파일이 이미 잇을것임.

docker build -t welcome-to-docker .

위 명령어는 현재 디렉토리에 있는 Dockerfile을 사용하여 welcome-to-docker라는 이름의 Docker 이미지를 빌드합니다. 이 과정에서 Dockerfile에 정의된 명령어들을 순서대로 실행하여 필요한 패키지를 설치하고 설정을 구성한 후에 이미지를 생성

이미지가 생성될껀데 run버튼을 누른다

이미지에 8089 포트를 입력했다면, Container에 해당 포트 컨테이너가 실행될것임
현재는 1 Container 1 Single image 상태

Run Docker Hub images

Docker desktop에서
단축키 ⌘ + K를 눌러 'welcome-to-docker'를 검색하면... 여러 관련 이미지를 찾을수있음 내용은 위와 동일

Multi-container applications 사용방법

Docker가 단일 명령어로 여러 Container를 사용하는 방법을 알아보자

예시로 아래 자료 클론

git clone https://github.com/docker/multi-container-app

해당 자료는 App과 Database 컨테이너가 함께 있는 구조임

compose.yaml파일에들어가서 아래 App, database주석 처리 해제

아래 명령어는 todo-app과 todo-database를 분리모드에서 실행함

docker compose up -d

코드를 편집하고 저장할때 미리보는 명령어

docker compose watch

Persist your data between containers

Container를 삭제했음에도 데이터를 유지하기 위해 Volume이 필요하다

예시로 아래 자료를 클론한다

git clone https://github.com/docker/multi-container-app

compose.yaml 파일에서 아래를 주석 처리해제한다.


  todo-database:
    volumes: 
     - database:/data/db

volumes:
  database:
                 

해석해보면 todo-database에 중첩된 Volume은 Compose에게 데이터베이스라는 볼륨을 todo-database 서비스 컨테이너의 /data/db에 마운트하도록 지시합니다.

최상위 volume은 Compose 파일의 모든 서비스에서 사용할 수 있는 데이터베이스라는 볼륨을 정의하고 구성합니다.

Delete and restart

이제 아무리 컨테이너를 지우고 재시작하더라도 DB Volume에 마운팅되서 data를 지속적으로 유지가능하다.

Access your local folder from a container

Container data is isolated from your local folders

Docker는 로컬 파일 시스템에서 컨테이너의 모든 콘텐츠, 코드 및 데이터를 격리하는데
때로는 컨테이너가 시스템의 디렉터리에 액세스하기를 원할 수도 있습니다.
바인드 마운트를 사용하는 경우입니다.

Get the sample application

git clone https://github.com/docker/bindmount-apps

How bind mounts work

Container에 있는 데이터를 연결하고 싶다면, bind mount를 사용하자
bind mount는 Container내에 있는 파일 시스템에 연결이 가능하다

Adding bind mounts to Compose

Sample App에 compose.yaml 파일에서 해당 볼륭을 주석 해제하자

todo-app:
    # ...
    volumes:
      - ./app:/usr/src/app
      - /usr/src/app/node_modules

./app을 todo-app 서비스용 컨테이너의 /usr/src/app에 마운트하도록 지시합니다. 이 특정 바인드 마운트는 컨테이너에 있는 /usr/src/app 디렉토리의 정적 콘텐츠를 덮어쓰고 개발 컨테이너라고 알려진 것을 생성합니다.
두 번째 명령인 /usr/src/app/node_modules는 컨테이너에 설치된 패키지를 보존하기 위해 바인드 마운트가 컨테이너의 node_modules 디렉터리를 덮어쓰는 것을 방지합니다.

Running the application

내 프로젝트 디랙토리에서 docker를 실행시키자

docker compose up -d

Develop the App

이제 로컬에서 Container환경 적용이 가능하다.
또한 바인딩 됐기에 수정할때마다 해당 컨테이너의 url접속시 실시간 반영된것을 볼 수 있다.

profile
블로그 이전합니다 https://james-kim-tech.tistory.com/

0개의 댓글