먼저 사용에 앞서서 Docker를 알고 계신가요?
https://crystalline-paper-4ea.notion.site/b1fb3ccc909d42e39263635676c3a7b8
여기서 docker & kubernetes 관련해서 간단하게 기본개념만 보고 오실수도있어요!
사실 저기에는 제가 정리한 내용이라 보기 어려우실 수도 있으니 간략하게 설명드리자면
커널을 공유해서 사용자의 resource를 사용해 간단하게 사용하는 인스턴스라고 생각하시면 될 것 같아요. 사용자마다 각 OS등의 환경이 다르기 때문에 발생하는 의존성 문제를 해결해줄수 있기 때문에 각 의존성을 모두 넣어서 하나의 이미지로 만들고 그 이미지를 실행시키면 컨테이너! 가 되는 과정이죠! 하나의 작은 서버개념 이라고 생각하시면 겁먹지 않고 사용할수 있어요!
그럼 바로 사용하는 방법으로 들어가보죠 ( 설치가 되신 분은 아래쪽으로 쭉 내려가셔도 됩니다 )
Docker 설치
https://docs.docker.com/get-docker/
Get Docker
Download and install Docker on the platform of your choice, including Mac, Linux, or Windows.
docs.docker.com
다음에서 각 환경에 맞게 docker Desktop을 설치하시면 됩니다. 그러면 이것처럼 docker desktop app으로 들어가서 다운받은 이미지와 실행중인 container들을 확인할수가 있죠! 사실 CLI로 해도 되는데 저는 깔린게 좋더라고요

간단한 명령어 기본기
1. 이미지를 다운받는 명령어입니다
- 기본적으로 image명만 붙이면 tag에 latest가 들어갑니다
- ex ) docker pull postgres
docker pull image_name:tag
2. 이미지들을 확인하는 명령어 입니다
docker images
- 이미지 이름, TAG, IMAGE ID
- Image ID의 앞부분만 따서 image를 찾는것이 좋아요!(저는..)
- ex ) 다음 명령어는 실행중인 도커컨테이너로 접속하는 명령어 인데요 다음과 같이 앞에 ID조금만 따서 사용하면 쉽게 찾을수 있습니다! 하지만 주의점은 저건 container의 id고 image의 id가 아니에요!


3. 실행중인 도커 컨테이너 리스트 커맨드
docker ps -a # 실행되었던 컨테이너까지
docker ps # 실행중
- 마찬가지로 Image Names, 생성시간 , 상태(실행중인지?) , 연결 port 등이 있습니다! 저기 보이는 CONTAINER ID를 통해서 위처럼 우리는 접근을 할수 있습니다

4. 도커 컨테이너를 실행시키는 커맨드
docker run --help
docker run -it --name demo1 ubuntu:18.04 /bin/bash
! 해석하자면 run -> 이미지를 가져다가 컨테이너로 실행시켜!
! -it ? 컨테이너 안으로 들어간다~
! --name : 내가 실행시킬 컨테이너 이름은 demo1 이야!
! ubuntu:18.04 : 이미지는 이걸 가져다가 쓸거야!
! /bin/bash : 컨테이너 내부에서 bin/bash 로 들어가줘!
- -it : -i + -t 옵션
- container실행과 동시에 interactive 한 terminal로 접속
- -name : name
- 컨테이너 id, 자기가 지정한 이름
- /bin/bash : 기본 시작지점 , bash터미널
5. 도커 컨테이너 내부에서 명령을 내리거나 내부로 접속하는 커맨드
docker exec -it demo2 /bin/bash
! 실행중인 demo2 컨테이너로 /bin/bash 쪽으로 들어갈게
- -d : 백그라운드로 실행시켜 접속 종료해도 계속 실행하도록 하는 명령어
- 기본적으로 컨테이너는 휘발성으로 작동하기 때문에 휘발성으로 작동시키지 않기 위해서는 -v옵션으로 volume 설정, 즉 우리의 컴퓨터 메모리를 docker container와 연결시켜주는 작업이 필요합니다!
6. 도커 컨테이너 안의 Log 확인
docker logs --help
docker logs demo3
docker logs 이미지이름
docker run --name demo3 -d busybox sh -c 'while true; do ${echo date}; sleep 1; done"
docker logs demo3
- demo3 라는 이름의 busy box 이미지를 백그라운드에서 도커 컨테이너로 실행해 1초에 한번씩 현재 시간 출력하는 커맨드입니다!
- 사실 log는 docker desktop에서 컨테이너를 누르면 무슨일이 일어나는지 확인할수 있어요

7. 실행중인 도커 컨테이너 멈추기
docker stop --help
docker stop demo3
8. 도커 컨테이너 삭제
- 아까 말했던 ps 명령어를 통해 CONTAINER ID를 찾아 제거하는게 빠르죠!
docker rm --help
docker rm demo3
9. 도커 이미지 삭제
docker rmi --help
docker images # 도커이미지 나열
docker rmi ubuntu
기본기 끝! 이제 다음에 추가로 이미지를 쉽게 Build 할수있는 DockerFile에 대해 알아보는걸로 하고 지금은 다음 내용으로 넘어가죠
할일
- SQL이 설치된 docker image를 받아온다.
- Docker container 를 Volume(저장창고)를 주고 SQL이 통할수 있게 port 지정하기
- 올라간 컨테이너 서버와 SpringBoot 연결하기
SQL이 설치된 docker image를 받아오기
Docker Hub Container Image Library | App Containerization
Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.
hub.docker.com
혹시 사용하고 싶은 docker image가 있다면 여기서 찾아서 사용하실수 있어요! 그럼 요롷게 사용방법까지 친절하게 있습니다.

docker pull postgres
가장 최신의 이미지를 받아오고 컨테이너만 실행시키면 꺼졌을때 db가 다 날라갈테니 볼륨 설정도 해줍시다!
docker volume create pgdata
이후 docker container를 실행시키게 되는데 이렇게 되면 sql이 실행중인 도커 컨테이너를 띄웠습니다!
docker run -d -p 5432:5432 --name some-postgres \
-e POSTGRES_PASSWORD=12345678 \
-v ~/pgdata:/var/lib/postgresql/data \
postgres
하나씩 뜯어보면 !
! run : 이미지를 docker container로 실행시켜줘
! -d : background에서도 계속 돌아가게 실행시킬거야
! -p : 내 로컬 포트 5432(postgresql 기본포트입니다) : 5432( 컨테이너 포트) 를 연결해줘! 포트포워딩이죠
! --name : 컨테이너 이름은 some-postgres로 할거야!
! -e : 도커내에 환경변수 넣어줘 POSTGRES_PASSWORD는 12345678로 할거야 (sql접속을 위한 비번)
! -v : 볼륨도 연결한건데 내 저장소는 ~/pgdata이고 컨테이너에서 저장소는 /var/lib/postgresql/data로 해줘!
! postgres: 실행 시킬 이미지이름이죠?
혹시 postgresql에 따로 접속하고 싶으면 docker desktop이나 exec -it 으로 컨테이너에 접속해 psql -U postgres 하면 됩니다!
컨테이너 접속후 다음명령어를 통해 db를 만들어주고
CREATE DATABASE {DB NAME};
CREATE USER {username} WITH PASSWORD '{password}';
ALTER ROLE {username} CREATEDB;
저는 연결하는데 datagrip을 사용했습니다!



다음 db연결이 되는지 test해보시면 container랑 연결이 잘된것을 확인할수 있죠!
올라간 컨테이너 서버와 SpringBoot 연결하기
마지막은 간단한데 spring boot의 application.yaml파일을 설정해주시면 됩니다.
이렇게 설정해주시면 local에 설치하지 않아도 db랑 연동이 가능하죠? 컨테이너 서버에서 sql이 실행중인 port랑 지정을 해뒀기 때문에 localhost:5432로 접속을 하게 되면 포트포워딩을 해놨으니 컨테이너의 postgresql 과 접속이 되기 때문에 연결이 되는거랍니다 ?
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/<DB이름>
username: <user 이름>
password: <PW>
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
show_sql: true
컨테이너를 띄우면 뭐가 좋을까? AI에게 물어봤습니다 껄껄
SQL 컨테이너를 사용하는 방식은 여러 가지 장점이 있습니다:
1. **환경 일관성**: 컨테이너는 애플리케이션을 실행하는 데 필요한 모든 것을 포함하므로, 개발, 테스트, 프로덕션 환경 간의 일관성을 보장합니다. 이는 "내 컴퓨터에서는 잘 동작하는데?"와 같은 문제를 방지할 수 있습니다.
2. **배포 용이성**: 컨테이너를 사용하면 SQL 데이터베이스 서버를 포함한 애플리케이션을 쉽게 배포하고 확장할 수 있습니다. 컨테이너 이미지를 레지스트리에 저장하고 필요한 곳 어디에서나 실행할 수 있습니다.
3. **빠른 시작 시간**: 컨테이너는 가상 머신보다 훨씬 가볍고 빠르게 시작됩니다. 이는 개발 및 테스트 환경에서 빠른 피드백과 반복을 가능하게 합니다.
4. **자원 효율성**: 컨테이너는 필요한 자원만 사용하여 실행되므로 자원을 보다 효율적으로 사용할 수 있습니다. 여러 컨테이너를 동일한 호스트에서 실행할 수 있으며, 각 컨테이너는 필요한 만큼의 CPU와 메모리를 사용합니다.
5. **이식성**: 컨테이너는 도커와 같은 컨테이너 엔진이 설치된 모든 곳에서 실행할 수 있습니다. 이는 클라우드, 온프레미스, 개발자의 노트북 등 다양한 환경에서의 이식성을 제공합니다.
6. **버전 관리 및 롤백**: 컨테이너 이미지를 사용하면 애플리케이션과 그 의존성을 특정 상태로 "스냅샷"할 수 있으며, 이를 버전 관리 시스템에 저장할 수 있습니다. 이는 변경 사항을 쉽게 롤백하고 버전 간 차이를 비교할 수 있게 해줍니다.
7. **보안**: 컨테이너는 격리된 환경에서 실행되므로, 애플리케이션 간의 간섭을 방지하고 보안을 강화할 수 있습니다. 각 컨테이너는 자체 파일 시스템을 가지며, 다른 컨테이너나 호스트 시스템의 자원에 접근할 수 없습니다.
이러한 장점들로 인해, 많은 조직들이 SQL 데이터베이스를 포함한 다양한 애플리케이션을 컨테이너화하여 개발, 배포 및 운영의 효율성을 높이고 있습니다.
제가생각했을 때는 저 빨간 부분이 좀 중요한것 같아서 표시해놨습니다. 그럼 다음시간에 DockerFile 설정방법으로 찾아뵙겠습니다~~~

혹시 위 썸네일 생성방법이 궁금하다면?
https://kiru-dev-study.tistory.com/9
Stable Diffusion + Controlnet 을 통한 Logo 이미지 생성
Example 2주차의 HTTP와 API 통신! 1. 설치방법! 파이썬 가상환경을 위한 아나콘다 설치 각 OS에 맞게 자기 OS 설치해주시면 됩니다… 저는 linux라.. 대부분 mac이던데… 부럽습니다.. Installation — Anaconda
kiru-dev-study.tistory.com
'Spring' 카테고리의 다른 글
Spring 검색조회 필터링 구현 방법 [JPA Specification] (0) | 2024.07.31 |
---|---|
편리한 객체간 매핑을 위한 MapStruct 적용기 .feat 당근클론코딩 (1) | 2024.05.08 |
JPA - 단방향? 양방향? OneToMany? ManyToOne? (3) | 2024.04.29 |
@ManytoOne, @ManytoMany, @OnetoOne, @OnetoMany? (2) | 2024.04.28 |
데이터베이스에 더미 데이터를 추가하는 방법 (5) | 2024.04.19 |