1. docker push
docker login을 치고, id/pw를 입력해 로그인한다.
docker images를 치고 뭐가 있는지 봐본다.
> docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerex2_spring latest f4fe0a09eeed 20 minutes ago 261MB
mysql latest 5c62e459e087 10 days ago 556MB
기존 image에 tag를 만들어서 docker hub에 로딩시킬 준비를 한다. (docker hub에 image를 올리려면 image 이름이 아래 형식과 같아야 한다.
[Docker Hub 사용자 계정]/[Image 이름]:[Tag]
> docker tag dockerex2_spring:latest hyelie/dockerex2_spring:latest
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyelie/dockerex2_spring latest f4fe0a09eeed 21 minutes ago 261MB
dockerex2_spring latest f4fe0a09eeed 21 minutes ago 261MB
mysql latest 5c62e459e087 10 days ago 556MB
만들어진 docker image를 push한다. 형식은 아래와 같다.
docker push {Docker Hub 사용자 계정}/{Image 이름}:{Tag}
> docker push hyelie/dockerex2_spring
Using default tag: latest
The push refers to repository [docker.io/hyelie/dockerex2_spring]
4d9ab6982a6e: Pushed
8ce930387ad2: Pushed
24d477f8e4dc: Pushed
2fd6f7b9077a: Pushed
aa7d6f60014a: Pushed
764055ebc9a7: Pushed
latest: digest: sha256:872ef4de4d73e686bf9bce3c0416448520f44a8015991c589fdc573addcc45ed size: 1578
Docker Hub 내 개인 repository를 보면 등록이 되어 있는 것을 볼 수 있다.
2. docker pull
아래와 같은 형식으로 받아올 수 있다.
docker pull {Docker Hub 사용자 계정}/{image 이름}
docker pull hyelie/dockerex2_spring
docker login을 치고, id/pw를 입력해 로그인한다.
docker images를 치고 뭐가 있는지 봐본다. 원래 없었던 hyelie/dockerex2_spring image가 생성되어 있다.
이 image를 실행시켜 보자.
> docker run -p 8080:8080 hyelie/dockerex2_spring
지금까지 내 포스팅을 따라온 대로 하면, spring 파일은 실행 안 되는 게 맞다. mysql이 돌고 있어야 하는데, 그게 아니니까... 그래도, push pull은 이런 방식으로 하면 된다.
*** 사실,
dockerfile을 이용해 환경을 구성하고, 소스코드만 git으로 잘 옮긴다면 + dockerfile.yml을 이용해 구성하면 push pull에 대한 필요성이 없는 것 같다.... 차라리 docker-compose push/pull을 하면 좋을 것 같은데.
3. docker-compose push / pull
어떻게 하는지 몰랐는데, 어떻게 찾았다. 아래 링크를 참고했다.
https://docs.docker.com/engine/reference/commandline/compose_push/
1) docker-compose push
먼저 기존의 docker-compose.yml 파일을 수정하자. 위에서, image를 push하려면 {Docker Hub 사용자 계정}/{Image 이름}:{Tag} 이런 형식이었다. 그리고 docker-compose.yml의 image option은 image 이름을 뭘로 만들지에 대한 내용을 가지고 있다. 따라서 저장되는 image 이름 형식을 바꾸자.
다만, mysql의 경우에는 이미 있는 mysql base image를 가져다 쓰기에 그렇게 하면 안된다.(내 local에 mysql 구성이 되어있지 않기 때문에)
docker-compose.yml
version: "3"
services:
spring:
build:
context: ./backend/testcompose
dockerfile: Dockerfile
volumes:
- ./backend/testcompose/build/libs:/spring
ports:
- 8080:8080
restart: always
container_name: springcomp
depends_on:
- mysql
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysqlcomp:3306/board?autoReconnect=true&useSSL=false&useUnicode=yes&characterEncoding=UTF-8&autoReconnectForPools=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: aa
networks:
- backend-network
image: hyelie/dockerex2_spring
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: aa
volumes:
- mytestdb:/var/lib/mysql
ports:
- 3306:3306
container_name: mysqlcomp
networks:
- backend-network
volumes:
mytestdb:
networks:
backend-network:
push 해 보자. docker-compose.yml file은 mysql은 hub에 있는 것을 가져다 쓰기 때문에 mysql은 push하지 않고 내가 작성한 dockerex2_spring만 push하는 모습이다.
> docker-compose push
Pushing spring (hyelie/dockerex2_spring:latest)...
The push refers to repository [docker.io/hyelie/dockerex2_spring]
d7e42248e843: Pushed
8ce930387ad2: Pushed
24d477f8e4dc: Pushed
2fd6f7b9077a: Pushed
aa7d6f60014a: Pushed
764055ebc9a7: Mounted from library/mysql
latest: digest: sha256:5783c26012d7fe811a2696b04f2ff1b9eabe120bd91e61d34135f8f795681fd1 size: 1578
그 결과로,
docker-compose에 있는 image가 올라갔다! (실행 전 모든 repository 삭제했음)
2) docker-compose pull
이어서 docker-compose pull을 보자. 현재는 docker hub에 위 image만 올라갔으며, 모든 container, image를 삭제한 상태이다.
> docker-compose pull
Pulling spring ... done
Pulling mysql ... done
mysql의 경우에는 이미 있는 것을 가져다 쓰고, spring같은 경우에는 hyelie/dockerex2_spring을 docker hub repository에서 불러오는 모습이다. 그러면 docker에 hyelie/dockerex2_spring과 mysql image가 있게 되었다. image가 있으니 docker-compose up 명령어로 실행할 수 있다!
와! 별다른 설정 없이도 docker-compose push, docker-compose pull을 이용해서 작업할 수 있게 되었다.
docker-compose push/pull 명령어를 이용해 image들을 쉽게 다른 환경에서 다운받을 수 있게 되었다.
예를 들어, 내 local L와 서버 S가 있을 때
L에서 소스코드 작성 및 docker-compose.yml 파일 작성
소스코드 git에 올림
docker-compose push로 docker hub에 image 올림
S에서 git에서 소스코드 받음(docker-compose.yml 포함)
docker-compose pull로 docker hub에서 image 받음
docker-compose up으로 image 실행
이런 과정을 통해 local에서 작업한 것을 server에서 수행할 수 있게 될 것이다.
뭐... 추후에 jenkins, kubernetes 같은 것을 만들면 local에서 git으로 push하면 hooker를 이용해 jenkins pipeline을 타고 server로 들어가 build까지 자동화되는 것을 만들면 큰 의미는 없겠지만. 그걸 할 줄 모르는 지금은 굉장히 편한 것 같다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Redis + Docker + 간단한 명령어 (0) | 2022.10.04 |
---|---|
[Docker] Docker 데몬 run error 해결 (0) | 2022.10.04 |
[Docker] Docker로 백엔드(Spring Mysql) 구성하기 (0) | 2022.10.04 |