프로젝트를 Docker에 올리는 이유는 여러가지이지만 현재 내가 만드는 이유는
Docker 이미지는 라이브러리, 종속성 및 설정을 하나의 패키지로 캡슐화를 하는데, 이는 애플리케이션을 여러 환경으로 쉽게 이동하고 배포할 수 있도록 해주기 때문이다. 또한, Docker 컨테이너는 다양한 환경에서 실행될 수 있기 때문에 어디서든지 프로젝트를 실행할 수 있기 때문이다!
- maven을 이용하여 프로젝트 빌드하기
mvn clean compile package
- 빌드 된 jar 파일을 넣어 Dockerfile 을 만든다.
FROM << 새로운 이미지를 생성할 베이스 이미지 (jdk, ubutu..) WORKDIR << 이동할 경로 COPY << 내 파일 시스템에서 복사할 파일의 경로 + 어떤 이름으로 복사할지 EXPOSE << 연결할 포트 번호 ENTRYPOINT ["", "", ""] <<Docker 컨테이너가 시작될 때 실행되는 명령을 정의하는 지시문
- 도커 이미지 만들기
docker build --tag 이미지 이름 .
여기서 도커 이름 . << 이 . 의 의미는 .는 현재 디렉토리에 있는 Dockerfile을 찾는다는 뜻이며(따로 지정하지 않아도 자동으로 찾아준다.), Docker에게 빌드 컨텍스트로 현재 디렉토리를 사용하도록 지시하는 것이다. 만약에 Dockerfile을 Dockerfile2 라는 이름으로 만들었다면 ./Dockerfile2 로 명시해야한다.
- 만든 도커 이미지 확인하기
docker images
- 만든 도커 실행하기
docker --name 컨테이너 이름 -dp 8080:8080 my-sync-image:latest
여기서 dp는 run -d -p 인데 합쳐서 쓸 수 있다.
-d 는 detached mode(백그라운드 모드)로 컨테이너를 실행합니다. 이 옵션을 사용하면 컨테이너가 백그라운드에서 실행되며, 터미널이 컨테이너에 연결되지 않는다.
--name 컨테이너 이름을 설정해줘야 보기 쉽게 만들 수가 있다.
-p는 포트 매핑이다.
포트 매핑 뒤에 REPOSITORY:TAG 를 붙이면 된다. (docker images로 repository, tag 다시 한번 확인)
- 돌아가고 있는 도커 확인하기
docker ps
- 돌아가고 있는 도커 멈추기 && 삭제하기
-멈추기 docker stop 컨테이너 아이디 또는 이름 -삭제하기 docker rm 컨테이너 아이디 또는 이름
- 도커 이미지 삭제하기
docker rmi 이미지id 또는 이미지이름 << docker images를 통해 알 수 있다.
컨테이너 아이디는 docker ps로 확인할 수 있다.
만약 프로젝트의 내용을 업데이트 했다면 다시 mvn을 클린하고 컴파일하고 패키지를 해야하는데 업데이트 할 때마다 일련의 과정이 귀찮기 때문에 쉘스크립트로 만들어서 업데이트하게 만들려고 한다!
-전제조건 : 도커 이미지가 만들어진 상태에서 작성한다.
- 쉘 스크립트 만들기
touch 스크립트이름.sh
- 쉘 스크립트 작성하기
vi 스크립트이름.sh
cd /프로젝트로 이동 docker stop 컨테이너이름 docker rm -f 컨테이너이름 >> 돌아가고 있었을 도커를 멈추고 삭제한 후 진행한다. mvn clean compile package >> 프로젝트 업데이트 docker run --name 컨테이너이름 -dp 8080:8080 my-sync-image:latest
:wq 로 나간 후
- 쉘스크립트 실행
./스크립트이름.sh
하면 일련의 과정들이 한번에 실행이 된다!!