컨테이너는 모든 코드를 실행하기 위한 격리된 환경입니다.
컨테이너를 선택하고 파일 탭으로 이동하여 그 안에 무엇이 있는지 확인하세요.
클론후 디렉토리 접속
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 상태
Docker desktop에서
단축키 ⌘ + K를 눌러 'welcome-to-docker'를 검색하면... 여러 관련 이미지를 찾을수있음 내용은 위와 동일
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
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 파일의 모든 서비스에서 사용할 수 있는 데이터베이스라는 볼륨을 정의하고 구성합니다.
이제 아무리 컨테이너를 지우고 재시작하더라도 DB Volume에 마운팅되서 data를 지속적으로 유지가능하다.
Docker는 로컬 파일 시스템에서 컨테이너의 모든 콘텐츠, 코드 및 데이터를 격리하는데
때로는 컨테이너가 시스템의 디렉터리에 액세스하기를 원할 수도 있습니다.
바인드 마운트를 사용하는 경우입니다.
git clone https://github.com/docker/bindmount-apps
Container에 있는 데이터를 연결하고 싶다면, bind mount를 사용하자
bind mount는 Container내에 있는 파일 시스템에 연결이 가능하다
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 디렉터리를 덮어쓰는 것을 방지합니다.
내 프로젝트 디랙토리에서 docker를 실행시키자
docker compose up -d
이제 로컬에서 Container환경 적용이 가능하다.
또한 바인딩 됐기에 수정할때마다 해당 컨테이너의 url접속시 실시간 반영된것을 볼 수 있다.