도커 CLI로 사용하기

 

1. docker desktop 실행

 

2. 스프링 부트 프로잭트 생성

 

3. Gradle -> build -> build -x test 실행하여 빌드파일 생성

4. Dockerfile 만들기

  - Dockerfile 위치는 root (파일명, 위치는 디폴트)

 

FROM <= 아래 이미지에서 버전 맞는거 사용

COPY <= 파란색 밑줄 부분과 빌드 파일에 있는 .jar 파일 명의 이름이 같아야한다.

Dockerfile 예제

FROM openjdk:8-jre-alpine
COPY build/libs/dockerTest-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

 

 

 

5. 도커 이미지 만들기

-> 인텔리제이 터미널에서 실행 docker build -t my-springboot .

docker build -t my-springboot .

 

6. 이미지 만들어졌는지 확인

docker ps

 

 

7. 도커 컨테이너 만들기

docker run --name sb -p 8080:8080 -d my-springboot

실행 후 브라우저에서 localhost8080으로 접속

 

성공 확인!

 

 

 

8. Mysql 컨테이너 생성

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql

-> 기존에 Mysql이 깔려있어 포트 중복으로 안됨

-> 포트 변경 3305

docker run --name some-mysql -p 3305:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql

 

 

실행시 docker hub에 있는 mysql을 불러옴

확인 명령어

docker ps -a

mysql 확인

 

디비 접속

 

테이블 생성 및 데이터 삽입

 

 

 

9. 컨테이너 레이어 파일 저장 방법

  • 폴더 만들기
mkdir mysql-data
  • 컨테이너 삭제
docker stop some-mysql;

docker rm some-mysql;
  • 컨테이너 실행
docker run --name some-mysql -v {폴더 절대경로}:/var/lib/mysql -p 3305:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql

 

 

  • 도커 허브 - 레파지토리 만들기

Pro tip

You can push a new image to this repository using the CLI

docker tag local-image:tagname new-repo:tagname
docker push new-repo:latest

Make sure to change tagname with your desired image repository tag.

 
 

docker images 명령어 입력 후 Repositoy = 이미지명 , 태그 = latest , ntw2100/my-repo:latest (도커 허브 레파지토리)

 

  • 터미널에서 실행
docker images
docker tag {이미지명}:{태그} {리파지토리 이미지명}:{태그}
  • 터미널에서 로그인
docker login

 

  • 푸시

-> 입력  docker push ntw2100/my-repo:latest

docker push {리파지토리 이미지명}:{태그}

- 태그 생략시 도커가 알아서 처리

 

 

  • 업로드 확인

 

 

 

 

============ 이제 ec2 로!

EC2 에서 이미지 사용하기

  • git bash 로 ec2 접속
ssh -i {aws-key file.pem} ubuntu@{public ip}

 

  • 도커 설치(install.sh에 복사)
vim install.sh

위 명령어 치고 들어가서 아래 내용 붙여넣고  :wq! 입력  

sudo apt-get update

sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

sudo apt-get update

sudo apt-get install -y docker-ce

sudo usermod -aG docker $USER

그럼 파일로 만들어지는데 

sh install.sh

입력하여 실행 -> 설치 완료 후 exit으로 한번 껏다 켜야 됩니다.

 

 

 

 

 

 

  • 이미지 PULL
docker pull ntw2100/my-repo:latest
  • 컨테이너 실행
docker run --name {컨테이너 이름} -p 80:8080 -d {이미지 이름}:{태그}

컨테이너 이름은 변수명 - 자신이 정하면 됨 / 이미지 이름 - 클레스 (Docker hub의 레파지토리 명)

 

======================================

 

****** 인텔리제이 작업 : gradle 빌드 - 도커 빌드 - 도커 태그 - 도커 푸시 - ec2에서 도커 풀

IDE에서 빌드 작업

  • 그레들 빌드(소스 빌드) : gradle build -x test

IDE 터미널 명령어 작업

  • 도커 빌드 : docker build -t my-springboot .   (빌드 해서)
  • 도커 태그 : docker tag my-springboot ntw2100/my-repo (태그 걸고)
  • 도커 푸시 : docker push ntw2100/my-repo  (docker hub의 내 레파지토리로 푸시)

EC2 - ubuntu 작업 (git bash -> ssh 접속 -> ubuntu)

  • 도커 풀 : docker pull ntw2100/my-repo

 

기존에 실행 했던거 있는지 확인 후 있으면 rm으로 지워줌

다시 docker ps -a 로 확인하면 sb 없는 것 확인 됨.

 

이제 다시 pull 해온 docker 이미지를 실행 !

 

 

 

다중 컨테이너 운영 - 로컬 환경에서 테스트 (ec2 아님)

👉 하나의 호스트에 여러개의 컨테이너를 실행할 수 있어요!!

 

Springboot 수정

  • 데이터 베이스 설정 추가
spring.datasource.url=jdbc:mysql://localhost:3305/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
  • 소스 빌드 & 도커 빌드
  • Spingboot 컨테이너 생성
docker run --name sb -p 8080:8080 -d my-springboot
  • 로그 확인 (에러발생)

컨테이너 하나하나가 하나의 컴퓨터 이기 때문에 mysql은 다른 pc로 간주한다. 따라서 로컬환경에서 실행시 연결이 되지 않는게 정상.

docker logs -f sb

 

-> 따라서 디비 설정 수정

도커 인터널로 연결

spring.datasource.url=jdbc:mysql://host.docker.internal:3306/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update

 

-> 정상 작동

 

 

================

도커 반자동화

  • docker-compose 이용

docker-compose.yaml 설정 파일 만들기

version: "3.9"
services:
  some-springboot:
    image: my-springboot
    ports:
      - 8080:8080
    networks:
      - backend
  some-mysql:
    image: mysql
    volumes:
      -  C:/Users/USER/Documents/Git/weeklytest/spring0607/mysql-data:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=1234
    networks:
      - backend
networks:
  backend:

application.properties 수정

spring.datasource.url=jdbc:mysql://some-mysql/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update

실행

docker-compose up -d

 

 

 

 

 

8. 도커 명령어

    1. 컨테이너 생성
    docker run --name {컨테이너 이름} -p {호스트 포트}:{컨테이너 포트} -d {이미지명}:{이미지태그}
    
    1. 생성된 컨테이너 확인
  • docker ps
    
    1. 컨테이너 정지
  • docker stop {컨테이너명}
    
    1. 정지된 컨테이너 확인
  • docker ps -a
    
    1. 정지된 컨테이너 삭제

+ Recent posts