[📋] docker
개요
CI/CD를 하면서 docker를 다룰 필요가 생겼다.
매번 docker hub로 그냥 필요한 프로그램 찾아서 이미지 저장하고 컨테이너에 올리기만 했어서,
dockerfile을 직접 다룬 경험은 처음 배울 때? 다른 사람이 쓴 글 보면서 필요한 부분 긁어올 때? 그 때 말고는 없었단 걸 깨달았다.
많이 사용해왔고, 사용해야 하는 기술인데 내부 로직을 아예 모르면 안 될 것 같다는 생각에 조금씩 정리해보려고 한다.
이론
Docker란?
Docker는 개발자가 컨테이너를 구축, 배포, 실행, 업데이트 및 관리할 수 있게 해주는 오픈 소스 플랫폼이다.
컨테이너는 운영체제와 모든 환경에서 실행이 가능하기 때문에, 가상 머신을 설치하고 올릴 필요 없이 편하게 docker 이미지 하나만으로 프로그램을 실행할 수 있게 도와준다.
docker에 대해 이야기하려면 dockerfile과 docker image를 빼놓을 수 없다.
먼저 정리하면,
- dockerfile : docker 이미지를 빌드할 때 필요한 설정이 들어있는 텍스트 파일
- dockerfile 스크립트 -> 이미지 생성
- docker image : 실행 가능한 애플리케이션 소스 코드 + 컨테이네 실행을 위한 모든 tool
- docker image 실행 -> 컨테이너의 한(여러) 인스턴스
- 레이어로 구성되고, 각 레이어는 이미지의 버전임
- 개발자가 이미지를 변경할 때마다 레이어가 생성되고, 이전 이미지를 덮어씀
- 롤백 가능
- 이미지에서 컨테이너를 만들 때마다 컨테이너 레이어가 생성
- 컨테이너에 대한 변경 사항(파일 추가 & 삭제)은 컨테이너 레이어에 저장되며 컨테이너가 실행되는 동안 존재
문법
구문 | 설명 |
# | 주석 및 코멘트 |
FROM | 베이스 이미지(base image) 저장 |
MAINTAINER | 이미지를 생성한 사람의 이름 및 정보 |
LABEL | key-value 형식으로 메타 데이터 저장 |
RUN | 컨테이너 빌드를 할 때 사용하는 커멘드 |
COPY | 컨테이너 빌드 시, 호스트 파일을 복사 |
ADD | 컨테이너 빌드 시, 호스트의 (tar, url)을 ㅂ고사 |
WORKDIR | 컨테이너 빌드 시, 명령어를 실행할 위치 |
ENV | 이미지에서 실행할 애플리케이션의 환경 변수 설정 |
EXPOSE | 컨테이너 동작 시, 사용할 포트 지정 |
CMD | 컨테이너 동작 시, 실행할 서비스 및 스크립트 |
ENTRYPOINT | CMD와 함께 사용, 커멘드 지정 시 사용함 |
참고
https://aws.amazon.com/ko/docker/
Docker란 무엇입니까? | AWS
Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc
aws.amazon.com
https://velog.io/@tjdwns2243/dockerfile-%EB%AC%B8%EB%B2%95-%EC%9E%91%EC%84%B1%EB%B2%95
dockerfile 문법 + 작성법
dockerfile이란? docker 이미지를 작성할 수 있는 기능 이미지는 스크립트를 기반으로 생성되는데, dockerfile은 이 스크립트가 dockerfile문법으로 이루어져 있다. 이 dockerfile을 활용하여 나만의 이미지를
velog.io
https://www.ibm.com/kr-ko/topics/docker
Docker란? | IBM
Docker는 개발자가 컨테이너화된 애플리케이션을 구축, 배포, 실행, 업데이트 및 관리할 수 있도록 지원하는 오픈 소스 플랫폼입니다.
www.ibm.com
느린 개발자
프론트엔드 백엔드 학습정리 및 정보공유 블로그입니다.
stack94.tistory.com