컨테이너의 이름을 주소처럼 사용 가능하다. tomcat-mysql을 연동할때 항상 mysql의 컨테이너 IP를 조회해서 찾아가는 건 너무 번거롭다.
root@contem:~# docker run -d --name dbdb -e MYSQL_ROOT_PASSWORD=1234 mysql:8
root@contem:~# docker run -it --name tom --link dbdb tomcat:latest bash
tomcat 웹 루트 디렉토리 : /usr/local/tomcat/webapps/ROOT
나만의 Docker hub를 생성한다고 생각하면 된다.
wp:1를 내가 만든 사설저장소에 push
1. 레지스트리 주소를 포함한 이미지를 빌드하거나 변경.
root@contem:~# docker tag wp:1 211.183.3.100:5000/wp:1
이때 우리는 HTTP 통신을 하기 때문에 daemon.json을 생성해서 경고를 수정해준다.
root@contem:/docker/wp# vi /etc/docker/daemon.json
{
"insecure-registries": ["211.183.3.100:5000"]
}
자바 - spring,springboot
=> 빌드된 앱 + openjdk(런타임) + tomcat이 필요
파이썬 - flask,Django,fastapi
=> python(런타임) 및 의존성파일 설치
자바스크립트 - nodejs(엄밀히 따지면 프레임워크는 아니다)
=> nodejs 및 npm, 의존성파일 설치
root@contem:~/sb_code# mvn clean package
root@contem:~/sb_code# java -jar target/springbootApp.jar
이제 컨테이너 화 해보겠다
1. 호스트에서 빌드한 다음 app파일을 컨테이너이미지에 넣어서 실행
FROM adoptopenjdk/openjdk8
WORKDIR /app
COPY target/springbootApp.jar app.jar
CMD ["java","-jar","app.jar"]
root@contem:/docker# git clone https://github.com/oolralra/sb_code
# 배포할 소스코드를 준비.
root@contem:/docker# cd sb_code/
root@contem:/docker/sb_code# vi Dockerfile
# 소스코드와 동일한 경로에 도커파일 작성.
maven:3.9-amazoncorretto-8
# 내가 베이스 이미지로 쓸 것.
# corretto = 아마존이 만든 openjdk
FROM maven:3.9-amazoncorretto-8
WORKDIR /app
COPY . .
RUN mvn clean package
CMD ["java","-jar","target/springbootApp.jar"]
컨테이너 이미지 빌드시 넣지 않고 싶은, 불필요한 파일을 제외시킬 수 있다.
root@contem:/docker/smart# vi Dockerfile
# 도커파일 작성
FROM python:3.9.21-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# 패키지 목록에 있는 라이브러리 설치
COPY . .
# 소스코드 복사
CMD ["gunicorn","-b","0.0.0.0:8080","main:app"]
# 0.0.0.0 = 0.0.0.0/0
root@contem:/docker/smart# docker build -t mypy:1 .

컨테이너 이미지를 만들면서 빌드 등에는 필요하지만, 최종 컨테이너 이미지에는 필요 없는 환경을 제거할 수 있도록 단계를 나누어 기반 이미지를 만드는 방법
출처: https://kimjingo.tistory.com/63#google_vignette [김징어의 Devlog:티스토리]
예를 들어서 Dockerfile을 제작 하면
FROM maven:3.9-amazoncorretto-8 AS builder
# 이 스테이지를 builder라는 이름으로 명명.
WORKDIR /app
COPY . .
# 호스트의 Dickerfile의 위치에 있는 모든 파일이
# 컨테이너 내부의 /app 에 복사.
RUN mvn clean package
# target 폴더에 springbootApp.jar 생성
# 여기부터 다음스테이지
FROM public.ecr.aws/docker/library/openjdk:8-jre-slim
WORKDIR /app2
COPY --from=builder /app/target/springbootApp.jar app.jar
# 이전 builder라는 스테이지에서 생성된 파일을 현재 이미지로 복사
CMD ["java","-jar","app.jar"]
nodejs - 백엔드 런타임. 프론트엔드도 가능하고, 백엔드도 가능하다.
프론트엔드 - React , VUE, Svelte. 브라우저에서 실행 가능. nginx 같은 웹서버로 배포가능.
백엔드 - Express, NestJS, Node.js 서버에서 구동해야함.
vue로 만든 프론트엔드 페이지를 멀티스테이지 빌드할 예정.
root@contem:/docker/vue-fastapi# cd frontend/
root@contem:/docker/vue-fastapi/frontend# vi default.conf
nginx의 리버스 프록시을 확인한다.
proxy_pass http://backend:8000/;
root@contem:/docker/vue-fastapi/frontend# cd ..
root@contem:/docker/vue-fastapi# cd backend/
root@contem:/docker/vue-fastapi/backend#
# 다시 백엔드로 돌아와서.
root@contem:/docker/vue-fastapi/backend# vi Dockerfile
root@contem:/docker/vue-fastapi/backend# docker build -t back:1 .
root@contem:/docker/vue-fastapi/backend# docker run -dp 8000:8000 --name backend back:1
# 백엔드컨테이너의 이름을 'backend'로 했다. 나중에 프론트엔드 코드에서 명시.
root@contem:/docker/vue-fastapi/frontend# docker build -t front:1 .
root@contem:/docker/vue-fastapi/frontend# docker run -dp 4989:80 --name web --link backend front:1
Dockerfile은 작성된 것을 가져와서 한것이고 우린 어떻게 연동하는지 어떻게 띄울지에 대한 실습을 했다고 생각하면된다.