λ컀 컨ν μ΄λ κ°μ ν΅μ μ νκΈ° μν΄ μ¬λ¬ κ°μ 컨ν μ΄λλ₯Ό λ§λ€μ΄ λ΄ λλ€.
- κΈ°λ³Έμ μΌλ‘ μΉ API λ° μ¨ νΌμ΄μ§μ ν΅μ ν μ μμ΅λλ€.(WWW)
- λΆνμν κ²μ 볡μ¬νμ§ μλλ‘ **.dockerignore**μ μμ±ν©λλ€.
.dockerignore
node_modules
Dockerfile
.git
API server(node) λ컀ν
FROM node // node:<λ²μ > λ²μ μ λͺ
μνμ§ μμΌλ©΄ μ΅μ λ²μ μ μ¬μ©(λ
Έλ κΈ°λ³Έ μ΄λ―Έμ§ μ¬μ©)
WORKDIR /app // μμ
λλ ν 리λ₯Ό λͺ
μ
COPY package.json . // μμ
λλ ν 리μ package.json 볡μ¬
RUN npm install // νλ‘μ νΈ μ’
μμ±μ μ€μΉ
COPY . . // νλ‘μ νΈ ν΄λ λͺ¨λ νμΌμ 컨ν
μ΄λ μμ
λλ ν 리μ 볡μ¬
EXPOSE 8000 // μ ν리μΌμ΄μ
μμ μ¬μ©νλ ν¬νΈ
ENV MONGODB_USERNAME=root // νκ²½λ³μ μΆκ°
ENV MONGODB_PASSWORD=secret // νκ²½λ³μ μΆκ°
CMD ['npm', 'start'] // μ΄λ―Έμ§ κΈ°λ°λ°μΌλ‘ 컨ν
μ΄λκ° μ€νλ λ μ€νλμ΄μΌν λͺ
λ Ή
- μμ κ°μ΄ λ컀 νμΌμ μμ±ν΄ μ€λλ€.
- μ΄λ―Έμ§ μμ±
docker build -t <μ΄λ―Έμ§ μ΄λ¦>:<λ²μ > .
(<λ²μ >μ λͺ μνμ§ μμΌλ©΄ μλμΌλ‘ latest νκ·Έ μ¬μ©)
- detachedλͺ¨λλ‘ μ€ννκ³ (-d) μ’
λ£λλ©΄ μλμΌλ‘ 컨ν
μ΄λκ° μ κ±°(--rm) λλλ‘ νκ³ μ ν리μΌμ΄μ
μμ μ¬μ©νλ ν¬νΈλ₯Ό κ°μ(-p 8000:8000)νμ¬ μ»¨ν
μ΄λλ₯Ό μ€νν©λλ€.
docker run --name <컨ν μ΄λ μ΄λ¦> -d --rm -p 8000:8000 <μ΄λ―Έμ§>
-e
μ΅μ μΌλ‘ νκ²½λ³μλ₯Ό μΆκ°ν μ μμ΅λλ€.
ex)
docker run --name <컨ν
μ΄λ μ΄λ¦> -v <νλ‘μ νΈ κ²½λ‘$(pwd)>:<λ§€ν κ²½λ‘> -v <λ§€νκ²½λ‘>/node_modules --rm -d --network <λ€νΈμν¬ μ΄λ¦> -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret <μ΄λ―Έμ§>
νΈμ€νΈ ν΅μ (mongodb)
μλμ κ°μ΄ mongoDBκ° λ‘컬μ μ€μΉλμ΄ μ€νμ€μΌ λ mongodbλ₯Ό μ°κ²°νλ μ½λκ° μλ€λ©΄ λ€νΈμν¬ μ€λ₯λ‘ μ°κ²°μ΄ λμ§ μκ³ μ»¨ν μ΄λκ° μ€μ§λ©λλ€.
mongoose.connect('mongodb://localhost:27017/myapp')
μλμ κ°μ΄ localhost
λ₯Ό λμ»€κ° μ΄ν΄ν μ μλ host.docker.internal
λλ©μΈμΌλ‘ λ³κ²½νλ©΄ λ컀 컨ν
μ΄λ λ΄λΆμμ μ μ μλ IPμ£Όμλ‘ λ³νλμ΄ ν΅μ ν μ μμ΅λλ€.
(localhost
-> host.docker.internal
)
mongoose.connect('mongodb://host.docker.internal:27017/myapp')
컨ν μ΄λ ν΅μ (mongodb)
컨ν μ΄λ IP μ£Όμ μ¬μ©νκΈ°
μλ λͺ
λ Ήμ΄λ‘ mongodb 컨ν
μ΄λλ₯Ό κ²μ¬νμ¬ NectworkSettings
κ°μ²΄μ IPAddress
(컨ν
μ΄λ IPμ£Όμ)λ₯Ό μμλ΄ μ»¨ν
μ΄λμ μ°κ²°ν μ μμ΅λλ€.
docker container inspect <λͺ½κ³ λλΉ μ»¨ν
μ΄λ μ΄λ¦>
μλ₯Ό λ€μ΄ IPAddress
κ° 172.14.03
λΌκ³ νλ€λ©΄ ν΄λΉ IP μ£Όμλ₯Ό μ
λ ₯νμ¬ μ»¨ν
μ΄λμ ν΅μ ν μ μμ΅λλ€.
νμ§λ§ 컨ν
μ΄λμ IP μ£Όμκ° λ³κ²½λ λλ§λ€ 컨ν
μ΄λ IPμ£Όμλ₯Ό μ°ΎμμΌ νκ³ μμ€λ₯Ό λ³κ²½νλ©΄ μ΄λ―Έμ§λ₯Ό λ€μ λΉλν΄μΌ νλ λ²κ±°λ‘μμ΄ μμ΅λλ€.
mongoose.connect('mongodb://172.14.03:27017/myapp')
λ€νΈμν¬ μ¬μ©νκΈ°
λ컀 λ€νΈμν¬ λͺ©λ‘
μλ λͺ
λ Ήμ΄λ‘ λ€νΈμν¬ λͺ©λ‘μ νμΌν μ μμ΅λλ€.
docker network ls
λ컀 λ€νΈμν¬ λ§λ€κΈ°
μλ λͺ
λ Ήμ΄λ‘ λ€νΈμν¬λ₯Ό μμ±ν©λλ€.
docker network create <λ€νΈμν¬ μ΄λ¦ μ€μ >
μ¬μ©ν λ€νΈμν¬μμ 컨ν
μ΄λ μ€ννκΈ°--network <μ¬μ©ν λ€νΈμν¬ μ΄λ¦>
νλκ·Έλ‘ λ€νΈμν¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.
docker run --name <컨ν
μ΄λ μ΄λ¦ μ€μ > --rm -d --network <μ¬μ©ν λ€νΈμν¬ μ΄λ¦>
example
μλ₯Ό λ€μ΄ μλμ κ°μ΄ λ€νΈμν¬λ₯Ό λ§λ€κ³ 컨ν
μ΄λμμ ν΄λΉ λ€νΈμν¬λ₯Ό μ¬μ©ν λ
docker network create mongo-network
docker run --name mongodb --rm -d --network mongo-network
ν΅μ ν 컨ν μ΄λλ κ°μ λ€νΈμν¬λ₯Ό μ¬μ©ν©λλ€.
docker run --name <컨ν
μ΄λ μ΄λ¦> --network mongo-network -d --rm -p 8000:8000 <μ΄λ―Έμ§>
μλμ κ°μ΄ λ€νΈμν¬λ₯Ό μ¬μ©νλ 컨ν μ΄λ μ΄λ¦μ μ¬μ©νλ©΄ 컨ν μ΄λ IPμ£Όμλ‘ λ³νλ©λλ€.
mongoose.connect('mongodb://<컨ν
μ΄λ μ΄λ¦>:27017/myapp')
λ°μΈλ λ§μ΄νΈ example
docker run --name <컨ν
μ΄λ μ΄λ¦> -v <νλ‘μ νΈ κ²½λ‘($(pwd))>:<λ§€ν κ²½λ‘> -v <λ§€ν κ²½λ‘>/node_modules --rm -d --network <λ€νΈμν¬ μ΄λ¦> -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret <μ΄λ―Έμ§>
Database(mongoDB) λ컀ν
Docker Hubμ λ±λ‘λ 곡μ mongo μ΄λ―Έμ§λ₯Ό κΈ°λ°μΌλ‘ 컨ν μ΄λλ₯Ό μ€νν©λλ€.
- mongoDBμ λν΄νΈ ν¬νΈ 27017μ κ°μν©λλ€.
- (ex:
mongoose.connect('mongodb://localhost:27017/myapp')
) docker run --name <컨ν μ΄λ¬ μ΄λ¦> --rm -d -p 27017:27017 mongo
- (ex:
λ€νΈμν¬ ν΅μ
docker run --name <컨ν
μ΄λ¬ μ΄λ¦> --rm -d --network <λ€νΈμν¬ μ΄λ¦> -p 27017:27017 mongo
λͺ λͺ λ λ³Όλ₯¨μΌλ‘ λ°μ΄ν° μ§μνκΈ°
docker run --name <컨ν
μ΄λ μ΄λ¦> -v <λ³Όλ₯¨ μ΄λ¦>:<λ§€ν κ²½λ‘> --rm -d --network <λ€νΈμν¬ μ΄λ¦> <μ΄λ―Έμ§>
-e
μ΅μ
μΌλ‘ μλμ κ°μ΄ νκ²½ λ³μλ₯Ό μΆκ°ν μλ μμ΅λλ€.
docker run --name <컨ν
μ΄λ μ΄λ¦> -v <λ³Όλ₯¨ μ΄λ¦>:<λ§€ν κ²½λ‘> --rm -d --network <λ€νΈμν¬ μ΄λ¦> -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret <μ΄λ―Έμ§>
web front(react) λ컀ν
FROM node // node:<λ²μ > λ²μ μ λͺ
μνμ§ μμΌλ©΄ μ΅μ λ²μ μ μ¬μ©(λ
Έλ κΈ°λ³Έ μ΄λ―Έμ§ μ¬μ©)
WORKDIR /app // μμ
λλ ν 리λ₯Ό λͺ
μ
COPY package.json . // μμ
λλ ν 리μ package.json 볡μ¬
RUN npm install // νλ‘μ νΈ μ’
μμ±μ μ€μΉ
COPY . . // νλ‘μ νΈ ν΄λ λͺ¨λ νμΌμ 컨ν
μ΄λ μμ
λλ ν 리μ 볡μ¬
EXPOSE 3000 // μ ν리μΌμ΄μ
μμ μ¬μ©νλ ν¬νΈ
CMD ['npm', 'start']// μ΄λ―Έμ§ κΈ°λ°λ°μΌλ‘ 컨ν
μ΄λκ° μ€νλ λ μ€νλμ΄μΌν λͺ
λ Ή
- μμ κ°μ΄ λ컀 νμΌμ μμ±ν΄ μ€λλ€.
- μ΄λ―Έμ§ μμ±
docker build -t <μ΄λ―Έμ§ μ΄λ¦>:<λ²μ > .
(<λ²μ >μ λͺ μνμ§ μμΌλ©΄ μλμΌλ‘ latest νκ·Έ μ¬μ©)
- react νλ‘μ νΈλ
-it
μ΅μ μ μΆκ°νμ¬ μνΈμμ©ν μ μλλ‘ μ€νν΄μΌ ν©λλ€- detachedλͺ¨λλ‘ μ€ννκ³ (-d) μ’ λ£λλ©΄ μλμΌλ‘ 컨ν μ΄λκ° μ κ±°(--rm) λλλ‘ νκ³ μ ν리μΌμ΄μ μμ μ¬μ©νλ ν¬νΈλ₯Ό κ°μ(-p 8000:8000)νμ¬ μ»¨ν μ΄λλ₯Ό μ€νν©λλ€.
docker run --name <컨ν μ΄λ μ΄λ¦> -d --rm -p 3000:3000 -it <μ΄λ―Έμ§>
- 리μ‘νΈμ κ°μ κ²½μ° λΈλΌμ°μ μμ μ€νλκΈ° λλ¬Έμ κ°λ° νκ²½μμ API server(node)λ₯Ό μ¬μ©(ex:
fetch('https://localhost/api'
))νλ€λ©΄ API server(node) 컨ν μ΄λλ₯Ό μ€νν λ ν¬νΈ(ex 8000)λ₯Ό κ°μν΄μΌ ν©λλ€.
λ°μΈλ λ§μ΄νΈ example
docker run -v <νλ‘μ νΈ κ²½λ‘/src($(pwd))>:<λ§€ν κ²½λ‘/src> --name <컨ν
μ΄λ μ΄λ¦> --rm -p 3000:3000 -it <μ΄λ―Έμ§>
'Docker Study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Kubernetes μν€ν μ²μ κ°λ (0) | 2023.05.03 |
---|---|
λ컀 μ»΄ν¬μ¦ (0) | 2023.03.18 |
λ컀 λ³Όλ₯¨κ³Ό λ°μΈλ λ§μ΄νΈ (0) | 2023.02.21 |
λ컀 μ΄λ―Έμ§μ 컨ν μ΄λ (0) | 2023.01.26 |
Docker (0) | 2023.01.12 |