DockerFile
- DockerFile은 Docker 컨테이너 이미지를 생성하기 위해 필요한 명령어와 지침을 담고 있는 텍스트 파일
- Dockerfile을 사용하여 특정 애플리케이션을 실행하는 데 필요한 환경을 정의하고, 그 정의를 기반으로 이미지를 빌드
일관된 환경 구축
개발, 테스트, 배포 환경이 일관되게 유지
모든 설정과 종속성을 명확히 정의하여 어디서나 동일한 환경에서 애플리케이션을 실행할 수 있다
자동화된 배포
빌드 및 배포 과정을 자동화
CI/CD 파이프라인에 통합하여 코드 변경 시마다 자동으로 이미지를 빌드하고 배포
버전 관리
소스 코드와 함께 버전 관리가 가능
특정 버전의 애플리케이션에 맞는 환경을 쉽게 재현
Portability (이식성) :
어플리케이션이 하나의 플랫폼에서 다른 플랫폼으로 옮기는 것이 용이한 것
Docker 이미지는 운영체제에 관계없이 동일하게 작동
Dockerfile을 통해 작성된 이미지는 다양한 플랫폼과 클라우드 서비스에서
이식성 있게 배포
명령어
- FROM: 베이스 이미지를 선택
- MAINTAINER: 이미지를 만든 사람의 정보를 입력
- RUN: 이미지에 명령을 실행하여 파일을 추가하거나 삭제
- COPY: 파일을 이미지에 복사
- EXPOSE: 컨테이너가 노출할 포트를 설정
- CMD: 컨테이너가 실행될 때 실행할 명령을 설정
docker buildx build -t my-nginx:latest .
docker build -t my-nginx:latest . # 위 명령이 실행되지 않는 경우 실행
docker run -d -p 80:80 my-nginx:latest
docker stop my-nginx
-> Docker 이미지는 Docker 레지스트리를 사용하여 다른 사용자와 공유 가능
Docker 레지스트리를 사용하면 Docker 이미지를 저장하고 공유할 수 있고, 다른 사용자가 이미지를 다운로드하여 사용할 수 있다
FROM ubuntu:22.04
MAINTAINER naebaecaem <nbcamp@spartacoding.co>
LABEL purpose='nginx test'
RUN apt update && apt upgrade -y && apt autoremove && apt autoclean
RUN apt install openjdk-21-jdk
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["npm", "start"]
ENV STAGE staging
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
WORKDIR /app
COPY index.html /usr/share/nginx/html
RUN ["useradd", "user"]
USER user
RUN ["/bin/bash, "-c", "ls"]
EXPOSE 80
EXPOSE 443
편하게 설정하기: Docker Compose는 여러 컨테이너를 한 파일에 적어서 설정할 수 있음
이 파일에는 컨테이너가 무슨 이미지를 쓸지, 어떤 포트를 사용할지, 환경 변수는 뭐가 필요한지 등을 적어둔다
이렇게 하면 여러 컨테이너를 한 번에 쉽게 설정할 수 있기 때문이다
자동으로 배포하기: 설정 파일이 있으면, Docker Compose가 알아서 컨테이너들을 만들어 주고 실행해 줌
개발자가 일일이 명령어를 입력할 필요가 없다
의존성 관리: 컨테이너들이 서로 의존하는 관계가 있으면, Docker Compose가 이를 관리
예를 들어, A 컨테이너가 B 컨테이너를 필요로 하면, A를 먼저 켜고 나서 B를 실행하는 식
모니터링과 로깅: Docker Compose는 컨테이너들이 어떻게 돌아가는지 지켜보고, 로그도 모아줌
이렇게 하면 문제가 생겼을 때 빨리 찾아서 고칠 수 있다
= 확장성: 여러 컨테이너를 하나의 그룹으로 관리할 이게 좋은 이유는, 예를 들어 웹 앱을 만드는 여러 컨테이너를 한꺼번에 관리하고 확장하기 쉽기 때문
유연성: Docker Compose는 개발 환경, 테스트 환경, 실제 운영 환경에서도 같은 설정 파일을 써서 일관성을 유지
보안 강화: 컨테이너들의 네트워크를 분리해서 외부로부터의 접근을 제한
유지보수가 쉬움: 설정 파일 하나로 컨테이너들을 관리-> 뭔가 바꿀 일이 있으면 파일만 수정하면 된다그러면 Docker Compose가 알아서 변경사항을 적용
docker-compose.yaml
파일에 있는 애플리케이션들은 모두 같은 네트워크에 자동으로 연결
이렇게 하면 복잡한 네트워크 설정 없이도 여러 컨테이너가 서로 쉽게 통신 가능
각 애플리케이션의 Dockerfile 작성하기
docker-compose.yaml 파일 작성하기
docker compose up
으로 실행하기
YAML 파일은 컴퓨터가 읽을 수 있는 설정 파일