이미지란?
설정 명령과 코드가 포함된 공유 가능한 패키지
이미지는 컨테이너의 설계도이며 컨테이너는 이미지의 실행 인스턴스이다.
인스턴스화
이미지를 컨테이너로 인스턴스화 하려면
docker run <이미지 이름>
을 실행한다.
컨테이너를 멈춤려면
docker stop <컨테이너 ID | 컨테이너 이름>
을 실행한다.
이미지 만드는 법
이미지를 만들기 위해서는 Dockerfile을 작성해야 한다.
FROM <베이스 이미지> #운영체제 레이어
WORKDIR <작업할 폴더> # 작업 폴더
COPY <이미지로 복사되어야할 파일 위치> <이미지 내부의 경로> # 이미지로 파일 복사
RUN <명령어> # 이미지 빌드시 실행해야하는 명령어
EXPOSE <외부에 공개할 포트번호> # 공개할 포트 번호
CMD [ "<명령어>", "<인자1>", "<인자2>" ] # 컨테이너 실행 시 실행해야 하는 명령어
Dockerfile을 작성한 후 터미널에 docker build <Dockerfile의 위치>
를 입력한다.
From <베이스 이미지>
- 운영체제 레이어를 추가한다.
WORKDIR <작업할 폴더>
- 작업할 폴더를 명시한다.
COPY <이미지로 복사되어야할 파일 위치> <이미지 내부의 경로>
- 이미지로 파일을 복사한다.
- ❗️이미지의 파일시스템은 로컬 파일시스템과 분리되어있다.
RUN <명령어>
- 이미지 빌드시 실행해야하는 명령어를 작성한다.
EXPOSE <외부에 공개할 포트번호>
- 외부에 공개할 포트를 명시한다.
- ❗️실제로는 아무것도 하지 않는다. 그저 명시적으로 이 포트를 공개해야한다고 알리기 위해 작성한다.
외부에 포트를 공개하기 위해서는 -p
옵션을 사용해야한다.
docker run -p <외부포트>:<내부포트> 컨테이너 이름
CMD[ "<명령어>", "<인자1>", "<인자2>" ]
- 컨테이너 실행 시 실행해야 하는 명령어를 작성한다.
레이어 기반 아키텍처
Dockerfile
의 모든 명령어는 레이어를 나타내며 이를 레이어 기반 아키텍처라고 한다.
이미지는 이런 레이어를 층층이 쌓아 만들어진다.
build
명령어를 입력하면 Dockerfile
의 명령어의 결과를 캐싱하고 다시 build
명령어를 입력했을 때 달라진게 없다면 캐시된 값을 사용한다.
만약 변경된 사항이 있다면 변경된 레이어부터 새로 만든다.
만들어진 이미지는 읽기 전용이어서 코드가 변경되면 다시 빌드를 해야한다.
컨테이너는 이미지위에 CMD
명령어를 실행한 레이어를 쌓아 만들어진다.
도커 기본 명령어
docker ps
- 실행중인 컨테이너 프로세스를 볼 수 있다.
docker run <이미지 식별자>
- 이미지를 인스턴스화 하여 컨테이너를 실행한다.
- 이 때 컨테이너는
attached mode
를 디폴트로 실행된다 attached mode
는 컨테이너의 출력결과를 수신한다.
attached mode
로 실행하고 싶지 않다면 -d
옵션을 준다.
-i
:interactive 옵션과, -t
:터미널 할당 옵션을 줘서 컨테이너와 상호작용할 수 있다.
docker stop <이미지 식별자>
- 실행중인 컨테이너를 중지한다.
docker start <컨테이너 식별자>
- 중지된 컨테이너를 다시 실행한다.
- 이 때 컨테이너는
detached mode
를 디폴트로 실행된다.
-a
옵션을 줘서 attached mode
로 실행할 수 있다.
detached mode
인 컨테이너를 attach
하고 싶다면 docker attach <컨테이너 식별자>
를 입력한다.
docker log <컨테이너 식별자>
- 컨테이너의 출력결과를 볼수 있다.
docker rm <컨테이너 식별자>
- 중지된 컨테이너를 삭제한다.
컨테이너를 시작할 때 --rm
옵션을 주면 컨테이너 중지시 자동으로 삭제된다.
docker rmi <이미지 식별자>
- 이미지를 삭제한다.
이미지가 컨테이너에서 사용되지 않는 경우에만 삭제할 수 있다.
docker image prune
- 사용하지 않는 이미지들을 모두 삭제한다.
docker inspect <이미지 식별자>
- 이미지의 구성 요소를 살펴볼 수 있다.
docker cp <파일|폴더> <컨테이너 식별자>:<컨테이너 내부 폴더>
docker cp <컨테이너 식별자>:<컨테이너 내부 폴더> <파일|폴더>
- 로컬 파일시스템에서 컨테이너로 혹은 컨테이너 파일시스템에서 로컬로 파일을 복사한다.
'Docker' 카테고리의 다른 글
[Docker] 🦮월월월월의 컨테이너와 네트워크 (0) | 2024.08.25 |
---|---|
Docker Compose 한 줄로 빌드부터 컨테이너 구동까지 해결하기 (0) | 2024.08.25 |
[Docker] 🦮월월월월의 도커 볼륨이란 (0) | 2024.07.28 |
[Docker] 🐳도커 1편 (0) | 2024.07.14 |
[Docker] 🦮월월월월의 컨테이너란? (0) | 2024.07.14 |