도커는 "app을 packaging 할 수 있는 툴" 이다.
컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구라고 할 수 있다.
기존의 문제: 서버 pc마다 환경이 다르고(snow flakes), 매번 환경변수, dependencies 설정해주는 것 매우 힘듦. 그렇기에 서버, pc마다 버전 차이 등의 이유로 실행 결과가 달라지는 문제 발생함.
이 문제를 해결하기 위해 App 구성, runtime 환경에서 필요한 요소들을 모아서 Packaging하는 것을 도와주는 것이 docker!
Virtual Machine
동일한 OS에서 hypervisro(vmware..) 가상의 머신을 만들어 구동. 한 운영체제 위에서 application은 각각의 고립된 다른 환경에서 구동함. OS를 포함하고 있기 때문에 되게 무거움..! 또 리소스도 많이 들음Docker
Container Engine이 Host OS에 접근해서 필요한 작업을 해줌. Container Engine에서 가장 선호되는 것이 도커! Engine만 설치하면 컨테이너를 만들어서 고립화 할 수 있음. OS를 포함하지 않는다는 것이 큰 차이! vm의 경량화dockerfile
만들기 → build해서 image
만들기 → container
구동하기Dockerfile
이미지
컨테이너
참고로, container repository에는 public, private가 있다.
https://www.youtube.com/watch?v=hWPv9LMlme8&t=10s
도커 한방에 정리 🐳 (모든 개발자들이 배워보고 싶어 하는 툴!) + 실습
Dockerfile
생성
FROM amazoncorretto:11
WORKDIR /root
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
FROM
: 기반 이미지. (Spring 개발한 Java 버전으로 했음)WORKDIR
: (= cd) 작업 디렉토리 전환. container안의 어떤 경로에 우리 프로젝트를 실행할 것인지ARG
: docker file안에 변수 설정COPY
: [복사할 경로][이미지에서 파일이 위치할 경로]ENTRYPOINT
: 컨테이너 시작시 컨테이너가 수행하게 될 실행 명령을 정의gradle
빌드
./gradlew clean build
build/lib에 snapshot jar파일 생성
Docker Hub
에 repository 생성하기docker build --build-arg DEPENDENCY=build/dependency -t gkrry2723/daotool --platform linux/amd64 .
docker push gkrry2723/daotool
sudo yum install docker // 도커 설치
sudo systemctl start docker // 도커 실행
sudo docker pull gkrry2723/daotool // 이미지 풀
sudo docker run -d -p 8080:8080 gkrry2723/daotool
// run: 이미지 실행
// -d: 백그라운드 실행
// -p: 포트 연결. 왼쪽-외부포트, 오른쪽-내부포트
DSL의 D는 Docker가아니라 Domain 입니다.