[docker newbie] windows docker 설치, docker란? 도커 튜토리얼

출처 >>> https://herojoon-dev.tistory.com/254#google_vignette


도커 설치하기

도커 설치 파일 다운로드 후 실행

https://docs.docker.com/get-started/get-docker/

이후 재부팅

 

WSL 설치 ( 리눅스 VM )

windows wsl 설치 (https://learn.microsoft.com/ko-kr/windows/wsl/setup/environment)

 

업뎃

sudo apt update && sudo apt upgrade


기본적인 도커 용어

  • Docker Hub(도커 허브): Docker 이미지 저장소
  • Docker Image(도커 이미지): 애플리케이션 실행에 필요한 모든 것(애플리케이션 구성 파일, 라이브러리, 설정 정보 등)을 포함한 소프트웨어 패키지입니다.
  • Docker Container(도커 컨테이너): Docker 이미지를 기반으로 실행되는 독립적인 애플리케이션 환경입니다.

1. 컨테이너란?

도커 가이드를 따라가보겠다.

1. 프로그램에서 가이드를 위해서 Welcome-to-docker 컨테이너를 생성해주었다.

 

2. 컨테이너 실행해보기 >>  이 컨테이너는 간단한 웹 어플리케이션이라고 한다. 8080을 눌러서 실행해본다.

눌러보면 웹 브라우저가 실행된다

 

3. 컨테이너라는 건, 독립적으로 격리된 환경이다. 코드를 실행할 수 있는!

 

이런식으로 로그도 볼 수 있고 컨테이너에 포함된 파일들도 볼 수 있다.

 

4. 컨테이너 중지하기.

컨테이너는 내가 실행을 중지하기 전까지 계속 실행된다.


2. 컨테이너 실행해보기 - 이미지를 사용하자

깃으로 프로젝트를 클론하고 IDE에서 열어보면 도커파일이 있는 걸 알 수 있다.

이 도커 파일을 나중에 직접 작성하면 된다... (docker init을 하면 쉽게 작성할 수도 있다)

 

프로젝트 폴더 안에서, docker build 명령어를 사용해서 이미지를 생성할 수 있다.

docker build -t welcome-to-docker .

-t : 이미지에 이름을 달아준다.

. : docker가 dockerfile을 찾을 수 있는 장소를 말해준다

이미지가 생성됐다

 

새롭게 생성된 이미지는 IMAGES탭에서 확인할 수 있다

실행을 눌러서 포트를 지정해줄 수 있따

컨테이너 탭에 가보면 컨테이너가 실행중인 걸 볼 수 있따

 


3. 도커 허브에서 이미지 다운 받아서 실행해보기

도커 이미지를 모아두는 도커 허브에서 이미지를 다운 받아서 실행해보자

 

도커 데스크탑에서 검색하면 도커허브에 있는 이미지들을 볼 수 있다.

실행버튼을 눌러서 바로 실행해보자

이미지가 실행되는 걸 볼 수 있다

 


4. 여러개의 도커 컨테이너를 한 번에 실행하는 docker compose

지금까지는 run을 눌러서 컨테이너를 개별로 실행해야했다.

하나의 명령어로 다수의 커테이너를 실행할 수 있다면 얼마나 좋을까? 이것이 docker compose 명령어다

이 실습을 위해 깃 레포 하나를 클론하자

 

 

IDE에서 열어보면 compose.yaml파일이 있다.

이 파일이 docker에게 이 어플리케이션을 어떻게 실행하는지를 알려준다!

docker compose up -d 명령어를 사용해서 compose 파일에 나열된 서비스를 빌드하고 실행해준다

 

***

CLI에서 docker compose up을 입력하지 않고, docker desktop에서 docker compose up을 실행할 수는 없는걸까? (XXX)

  1. CMD에서 docker compose up 실행
  2. Docker Engine이 컨테이너 생성
  3. Docker Desktop은 그 결과를 보여준다 (아래 이미지)
    이 결과로, compose로 실행된 컨테이너 그룹이 표시된다 (아래 이미지)
    start, stop, restart가 가능하다.

즉... 도커 데스크탑에서는 “이미 떠 있는 compose 프로젝트 관리”만 가능하다.

 

두개의 컨테이너가 실행되고 있는 것을 알 수 있다.

포트를 눌러보면 간단한 웹 페이지를 볼 수 있다.

입력해둔 정보가 사라지지 않고 유지되는 걸 알 수 있다.

 

코드 수정사항을 바로 반영하도록 docker를 watch모드로 설정할 수도 있다.

 

수정이 된 걸 알 수 있다.

cmd에서 ctrl c 를 눌러서 watch 모드를 취소하자

 

컨테이너를 삭제할 수도 있다.

그리고 다시 docker compose up 명령어를 사용하여 또 컨테이너를 생성할 수 있다.

이 때 db에 저장됐던 내용은 삭제되는 걸 알 수 있다.


5. 도커가 직접 관리하게되는 로컬상 디렉터리 - 볼륨

그러나 앱이 재실행될 때마다 db 데이터가 다 삭제되는 걸 바라는 사람은 없을 것이다.

이제 db 데이터 컨테이너에서 데이터를 유지할 수 있는 방법을 알아보자

 

도커는 우리의 로컬 파일시스템과 완전히 모든 것을 격리시키기 때문에 이런 일이 발생한다.

데이터를 유지하기 위해 우리는 볼륨을 사용할 수 있다.

볼륨은 우리의 로컬 파일시스템에 도커가 관장하는 영역이다.

볼륨을 추가하기 위해서는

compose.yml 파일에 volumes를 추가해주면 된다.


6. 도커 컨테이너 디렉터리를 내 로컬 디렉터리로 갈아치우기 - bind mount

도커 컨테이너가 나의 로컬 파일에 접근하는 방법을 알아보자.

이 때 bind mount라는 기능을 사용하면 되는데...

bind mount는 host의 파일시스템에 컨테이너와 디렉터리를 공유하게 해준다.

예제 소스 코드와 함께 알아본다 (git clone https://github.com/docker/bindmount-apps)

bind mount는 “경로를 복사”하는 게 아니라
컨테이너 안의 특정 디렉터리를 로컬 디렉터리로 대체하는 것
이다.

도커가 로컬에 /usr/src/app 같은 폴더를 만들어주는 것이 아니고

/usr/src/app은 이미지 또는 컨테이너 내부 경로이며
로컬에는 절대 생기지 않는다

 

 

  • ./app:/usr/src/app
    로컬 폴더가 컨테이너를 덮어쓴다
  • /usr/src/app/node_modules
    덮어써진 것 중 node_modules만 다시 살린다

7. 내 프로젝트를 컨테이너화하는 방법. docker init

 

Dockerfile이나 compose.yml 파일을 직접 작성하는 건 어려운 일이다.

그래서 존재하는 명령어가 있으니 docker init이다.

 

프로젝트 파일에 가서 docker init을 입력해보자

 

몇가지 질문 후 init이 되면 compose.yml파일이 달라져있는 걸 알 수 있다.

 

아래 레퍼런스 사이트를 보고 커스터마이징 할 수 있다

https://docs.docker.com/reference/dockerfile

https://docs.docker.com/reference/compose-file/


8. Docker hub에 내 이미지 올리기

도커 이미지를 올리기 위해서 이미지를 내 도커계정아이디로 변경해준다.

docker tag docker/welcome-to-docker YOUR-USERNAME/welcome-to-docker

그 후에 도커허브로 푸시해준다.

허브에 내 이미지를 검색해보면 결과가 나오는 걸 알 수 있다.


이상으로 도커 튜토리얼이 끝났다!

더 자세한 java 설명은 다음에서 확인해보자

https://docs.docker.com/guides/java/