CI/CD

[Docker] 배포 명령어 정리

shininghyunho 2023. 5. 23. 01:26

1. Dockerfile 생성

도커 파일을 만들기 위해 환경설정 파일 구성.

'Dockerfile' 이라는 이름으로 만든다.

 

아래는 예시

# 베이스 이미지 java 17
FROM openjdk:17-jdk-alpine

# 작업 디렉토리 생성
RUN mkdir -p /home/minecraft
WORKDIR /home/minecraft
COPY . .

# EXPOSE 25565
EXPOSE 25565
# 페이버 서버 실행
CMD java -jar ./paper-1.19.4-538.jar

해당 파일을 프로젝트에 같이 넣어준다.

 

2. 도커 이미지 빌드

이제 터미널을 켜고 해당 dockerfile을 이미지 형태로 만들기 위해 빌드!

$ docker build --tag shininghyunho/project:1.0 .

--tag 옵션으로 태그명을 작성해야하는데

도커 허브에 올리기위해선 본인 '아이디/프로젝트명:버전' 으로 태그명을 설정

 

3. 최신버전 설정

안해도 되긴하는데 latest 버전을 설정도 가능함.

$ docker image tag shininghyunho/project:1.0 shininghyunho/project:latest

 

4. 실행

이제 만들어진 이미지를 실행시켜 컨테이너로 만들기

$ docker run -d -p 5000:5000 shininghyunho/project:1.0

-d : 데몬 옵션, 백그라운드로 실행됨

-p : 포트 설정, 호스트 포트:컨테이너 포트

 

5. 도커 허브에 이미지 올리기(push)

로컬에서만 실행할거면 4번까지만 되지만

도커 허브를 통해 배포하기 위해선 push 해줘야함.

$ docker push shininghyunho/project:1.0
$ docker push shininghyunho/project:latest

최신 버전인 latest 설정을 해줬다면 latest 버전도 push

6. 도커 허브에서 이미지 받기(pull)

이제 이미지를 받을 EC2나 서버에 접속해서 이미지를 받아야함.

(도커가 없다면 따로 다운로드)

$ docker pull shininghyunho/project:1.0
# 또는
$ docker pull shininghyunho/project:latest

이후 실행 방법은 4번과 동일!

 


추가적으로 도커 버전이 바뀌거나 이미 도커 컨테이너가 실행중이라면

프로세스를 죽이고 컨테이너도 죽이고 이미지도 삭제하고 다시 실행.

기존 이미지가 존재한다면(리눅스)

1. 기존에 실행되던 컨테이너 확인후 죽이기

# 실행중인 프로세스 확인
$ sudo netstat -tnlp

포트 5000번으로 실행되는 docker-proxy 2개가 존재.

두 프로세스의 PID 21743,21760 확인.

 

+ ubuntu 20.04 부터는 안깔려있어서 설치해줘야함

$ sudo apt-get install net-tools

 

프로세스 죽이기

# 프로세스 죽이기
$ sudo kill -9 PID

확인한 PID 21743,21760 모두 죽이기

 

2. 기존 컨테이너 삭제

컨테이너 확인 후 제거

근데 컨테이너 실행할때 rm 옵션을 넣으면 종료될때 자동 제거됨.

# 도커 컨테이너 확인
$ docker container ls
# 컨테이너 이름으로 제거
$ docker rm -f  CONTAINER_NAME

 

3. 기존 이미지 삭제

이미지는 반드시 삭제 안해도 되는데

이미지가 크다면 제거해주는게 좋음. (어차피 도커 허브에 버전별로 다 있음)

# 도커 이미지 확인
$ docker images
# 도커 이미지 아이디로 삭제
$ docker rmi -f IMAGE_ID

 

이제 다시 이미지를 실행하면 된다~

 

기타

실행중인 컨테이너 확인

$ docker ps

 

꺼진 모든 컨테이너도 확인

$ docker ps -a