도커 이미지를 배포환경에 배포하는 것은 간단하다.
이전에 도커 이미지를 만들어 뒀기 때문에 ec2를 생성해서 docker 에 필요한 패키지를 설치하고 pull을 받아 run을 시키면 된다.
그런데 실행을 시킨 후에 여러가지 코드를 고칠 것이 필요해서 코드를 고쳐서 "같은 이름으로" 여러번 Image build, push pull을 했는데 변경 내용이 적용이 안된 문제를 만났다.
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
# 생성된 이미지로 컨테이너를 실행 (포트 두개인 이유: host port와 container port)
docker run -d -p 8080:8080 tpgus4796/ae-springserver-repo
#실행 중인 컨테이너를 확인
docker ps
# Docker 이미지 확인
docker image ls
# sudo docker pull {계정명}/{repository명}:태그명
sudo docker pull tpgus4796/ae-springserver-docker:v1
# 실행중인 도커 컨테이너 확인
sudo docker ps
# 도커 컨테이너 중지 stop
sudo docker stop {id앞 4자리}
# 도커 컨테이너 삭제 rm 컨테이너&이미지 삭제는 : docker rmi
#docker rm {컨테이너 id}
sudo docker rm {id앞에4자리}
#image pull from docker hub
sudo docker pull tpgus4796/ae-springserver-docker:v1
#image run -> make container
sudo docker run -d -p 8081:8081 tpgus4796/ae-springserver-docker:v1
## log 쳌
sudo docker logs -f [container name]
sudo docker run
자체가 image 이름으로 run 시키므로, 가장 앞의(다운 받은지 오래된) 이미지를 run 시킬 가능성이 있다.밑의 그림처럼
IN 개발환경 (Local)
springboot에서 dockerfile을 기반으로 docker 를 build 해서 “Image”를 생성하고, 그 Docker Image를 push 해서 DocekrHub에 올리고
IN 배포환경 (ec2)
배포할 ec2 인스턴스 환경에서 dockerhub의 image 이름을 가지고 Docker image pull을 진행해 파일을 저장한다. Docker run을 통해서 컨테이너화를 시켜 독립적으로 실행시킨다.
여기서 도커의 장점이 나오는 것 같은데, 개발환경의 모든 것을 가져와서 그대로 배포 환경에서 구현할 수 있다는 것이 가장 장점이고 ,이게 동작과정에서 나오는 것 같다.
기존의 Docker 이미지명을 새로운 이름으로 변경하거나, 새로운 태그명을 붙일 때 docker image tag 명령을 사용
docker image tag <기존의 이미지명>:<기존의 태그명> <새로운 이미지명>:<새로운 태그명>
# Docker 이미지 확인
docker image ls
문제가 발생한 ec2에서 docker 이미지를 확인해보면 같은 이름으로 3개가 있다.
근데 이건 이미지에 태그를 붙여서 push 하는것이 아니라 push 후에 바꾸는 것이므로 다른 명령어 필요
이제까지 무지성으로 사용했던
$ docker image build -t javatest:latest
의 -t 명령어가 이름과 태그를 붙이는 옵션이었다.
태그명은 생략 가능한데, 생략하면 기본적으로 latest
가 붙는다
며칠 전에도 :뒤에 테그를 붙이려했는데 안됐던 경험이 있어서
다시 한번해보겠다
cmd 를 관리자모드로 띄우고 여기서 진행
태그 이름을 v1으로 해보겠음
docker build --build-arg JAR_FILE=build/libs/ae_SpringServer-0.0.1-SNAPSHOT.jar -t tpgus4796/ae-springserver-docker:v1 .
도커 허브에 푸시
docker push tpgus4796/ae-springserver-docker:v1
빌드 성공
Docker desktop에서도 v1 태그로 잘 보임
푸시는 명령어 말고 docker desktop에서 해보겠음
더보기에서 Push to hub를 클릭해서 해보겠음 (IntellJ에서 하면 계속 http error 떠서 )
나의 경우에는 intellJ 터미널에서 명령어를 입력하는 것보다
cmd 관리자 모드에서 build하고, Docker desktop에서 push를 누르는 것이 더 빨랐음
도커허브에도 잘 안착되었다
# sudo docker pull {계정명}/{repository명}:태그명
sudo docker pull tpgus4796/ae-springserver-docker:v1
이미지 리스트 확인하면 v1이 잘 들어와있다.
현재 실행중인 컨테이너를 끄고 v1으로 실행해야하므로
# 실행중인 도커 컨테이너 확인
sudo docker ps
# 도커 컨테이너 중지 stop
sudo docker stop {id앞 4자리}
# 도커 컨테이너 삭제 rm 컨테이너&이미지 삭제는 : docker rmi
#docker rm {컨테이너 id}
sudo docker rm {id앞에4자리}
이름으로 삭제해보려햇으나 명령어가 안먹어서 id로 삭제
아하 끄기 전에 stop을 해야하는군 !
지워졌다.
이제 pull 받아야지
#image pull from docker hub
sudo docker pull tpgus4796/ae-springserver-docker:v1
#image run -> make container
sudo docker run -d -p 8081:8081 tpgus4796/ae-springserver-docker:v1
pull 을 받고 docker ps 를 하면 아직 run을 안시켰기에 아무것도 안나오고
run을 시키고 ps 를 해보면 컨테이너 아이디가 나온다.
그리고 image ls 로 이미지 리스트를 확인하면 v1이 나와있음
sudo docker logs -f [container name]
원하는 대로 잘 들어간다
끝!