μ΄ νλ‘μ νΈλ Docker Composeλ₯Ό μ¬μ©νμ¬ Spring Boot μ ν리μΌμ΄μ κ³Ό MySQL λ°μ΄ν°λ² μ΄μ€λ₯Ό μ°λνκ³ , κ° μ»¨ν μ΄λμ μνλ₯Ό λͺ¨λν°λ§νκΈ° μν ν¬μ€μ²΄ν¬(Healthcheck) μ€μ μ ν¬ν¨νκ³ μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€ λ΄λΆμ μΌλ‘ 쿼리 μ²λ¦¬κ° κ°λ₯ν μνμΈμ§ νμΈν©λλ€.
- μ€μ μμΉ:
docker-compose.yml - κ²μ¦ λ°©λ²:
mysqladmin pingλͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ μλ² μλ΅μ νμΈν©λλ€. - μ£Όμ νλΌλ―Έν°:
interval: 10s: 10μ΄λ§λ€ μ²΄ν¬ μνtimeout: 5s: μλ΅ λκΈ° μκ°retries: 10: μ΅λ 10ν μ¬μλstart_period: 30s: μ΄κΈ° ꡬλ μ 30μ΄ λμμ μ€ν¨ν΄λ 무μνκ³ κΈ°λ€λ €μ€
μ ν리μΌμ΄μ κ°λ° λ¨κ³μμ μ€μ ν μλν¬μΈνΈκ° μ μ μλ΅μ μ£Όλμ§ νμΈν©λλ€.
- μ€μ μμΉ:
Dockerfile - κ²μ¦ λ°©λ²:
curlμ μ¬μ©νμ¬ νΉμ κ²½λ‘(/emp/)μ μλ΅μ νμΈν©λλ€. - μ£Όμ νΉμ§:
- μ ν리μΌμ΄μ
μ 컨ν
μ€νΈ κ²½λ‘(
/emp)λ₯Ό λ°μνμ¬ μ²΄ν¬ν©λλ€. - μλ²κ° ꡬλ μ€μμ νμΈνκΈ° μν΄ 404 μλ΅μ΄λΌλ μλ²κ° μ΄μμλ€λ©΄ μ μμΌλ‘ κ°μ£Όνλλ‘ μ€μ λμ΄ μμ΅λλ€.
- μ ν리μΌμ΄μ
μ 컨ν
μ€νΈ κ²½λ‘(
λ³Έ νλ‘μ νΈλ docker-compose.ymlμμ λ€μκ³Ό κ°μ μμ‘΄μ± μ€μ μ μ¬μ©ν©λλ€:
depends_on:
db:
condition: service_healthyμ΄ μ€μ μ λ¨μν 컨ν
μ΄λκ° 'μ€ν μ€'μΈ κ²μ λμ΄, λ°μ΄ν°λ² μ΄μ€κ° ν¬μ€μ²΄ν¬λ₯Ό ν΅κ³Όνμ¬ healthy μνκ° λμμ λλ§ μ ν리μΌμ΄μ
컨ν
μ΄λλ₯Ό μμνλλ‘ λ³΄μ₯ν©λλ€.
- λ΅λ³:
app컨ν μ΄λλ μμ± λ° μ€νλμ§ μκ³ λκΈ°ν©λλ€. Docker Composeλdbκ°healthyμνκ° λ λκΉμ§appμ μμμ 보λ₯ν©λλ€. - μμ μκ°: λ§μ½ MySQLμ΄ λλ΄ μ΄μλμ§ μλλ€λ©΄,
db컨ν μ΄λκ°unhealthyλ‘ μ΅μ’ νμ λ λκΉμ§ μ½ 130μ΄(30s + 10s * 10ν) μ λ μμλ©λλ€.
- μμΈ: Docker λ³Όλ₯¨(
db_data)μ μ΄μ μ€ν μ λ³΄κ° λ¨μμμ΄docker-compose.ymlμ μ€μ ν μλ‘μ΄ κ³μ μ λ³΄κ° λ°μλμ§ μμ μ μμ΅λλ€. - ν΄κ²°:
docker compose down -vλͺ λ Ήμ΄λ‘ λ³Όλ₯¨μ μμ ν μμ ν ν λ€μ λΉλ(--build)νμ¬ μ€ννλ©΄ μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€μ κ³μ μ΄ μ μμ μΌλ‘ μ΄κΈ°νλ©λλ€.
- ν¬νΈ λ§€ν:
DockerfileμSERVER_PORTμdocker-compose.ymlμ ν¬νΈ λ§€νμ΄ μΌμΉνλμ§ νμΈνμμμ€ (νμ¬ μ€μ :80:80). - 컨ν
μ€νΈ κ²½λ‘: ν¬μ€μ²΄ν¬ κ²½λ‘μ μ ν리μΌμ΄μ
μ μ΄λ¦μ΄λ 컨ν
μ€νΈ κ²½λ‘κ° λλ½λμ§ μμλμ§ νμΈνμμμ€.
νλ‘μ νΈ κ΅¬μ± μ€ λ°μν μ μλ μ£Όμ λ¬Έμ μ ν΄κ²° λ°©λ²μ λλ€.
- μ¦μ:
failed to solve: dockerfile parse error: COPY requires at least two arguments - μμΈ:
COPYλͺ λ Ήμ΄μμ μμ€ νμΌμ λͺ μνμΌλ 컨ν μ΄λ λ΄λΆμ λͺ©μ μ§ κ²½λ‘λ₯Ό λλ½ν κ²½μ° λ°μν©λλ€. - ν΄κ²°:
COPY <source> <destination>νμμ μ§μΌ λͺ©μ μ§ κ²½λ‘(μ:app.jar)λ₯Ό λ°λμ μΆκ°ν©λλ€.
- μ¦μ: Spring Boot λ‘κ·Έμ
Connection refusedλλCommunications link failureλ°μ. - μμΈ: DBκ° μμ§ μ€λΉλμ§ μμκ±°λ, μλͺ»λ νΈμ€νΈ/ν¬νΈλ‘ μ μμ μλν λ λ°μν©λλ€.
- ν΄κ²°:
docker-compose.ymlμdepends_onμcondition: service_healthyλ₯Ό μΆκ°ν©λλ€.- JDBC URLμ
?allowPublicKeyRetrieval=true&useSSL=falseμ΅μ μ μΆκ°νμ¬ μ μ μμ μ±μ λμ λλ€.
- μ¦μ: μ§μ λ κ³μ (
user01)μΌλ‘ μ μμ΄ λμ§ μκ±°λ, μμ±ν λ°μ΄ν°λ² μ΄μ€(fisa)λ₯Ό μ°Ύμ μ μλ κ²½μ°. - μμΈ: μ΄μ μ€νμμ μμ±λ Docker λ³Όλ₯¨(
db_data)μ ꡬν μ€μ λ°μ΄ν°κ° λ¨μμμ΄ μλ‘μ΄ μ€μ μ΄ λ°μλμ§ μλ κ²½μ°μ λλ€. - ν΄κ²°:
docker compose down -vλͺ λ Ήμ΄λ‘ λ³Όλ₯¨λ°μ΄ν°λ₯Ό μμ ν μμ ν ν μ¬μμνμ¬ DBλ₯Ό μλ‘ μ΄κΈ°νν©λλ€.
- μ¦μ:
docker psκ²°κ³Όμμapp컨ν μ΄λκ°unhealthyλ‘ λνλ¨. - μμΈ: ν¬μ€ μ²΄ν¬ κ²½λ‘κ° μλͺ»λμκ±°λ ν¬νΈ λ§€νμ΄ μΌμΉνμ§ μλ κ²½μ°μ λλ€.
- ν΄κ²°:
- μ ν리μΌμ΄μ
μ Context Path (μ:
/emp/)κ° ν¬μ€ μ²΄ν¬ URLμ ν¬ν¨λμ΄ μλμ§ νμΈν©λλ€. DockerfileμSERVER_PORTμdocker-compose.ymlμ νΈμ€νΈ ν¬νΈ λ§€ν(80:80)μ νμΈν©λλ€.
- μ ν리μΌμ΄μ
μ Context Path (μ: