Docker 이미지 구조
이미지는 시작시 실행될 명령어+파일 스냅샷이 존재한다
시작시 실행될 명령어 외에 다른 명령어를 이용할 수 있음
docker run alpine ls
시작시 실행될 명령어를 무시하고 ls
라는 명령어를 사용 가능
But, 명령어를 실행 가능하게 하는 파일이 이미지의 스냅샷 내에 없다면 에러가 발생
실행 중인 컨테이너 보기(ps)
docker ps
ps
명령어를 통해 실행 중인 컨테이너들을 확인할 수 있다
CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS, NAMES
docker ps --format 'table{{.Names}}\ttable{{.Image}}'
Names
와 Image
만을 조회하는 옵션을 --format
을 통해 설정해줌
docker ps -a
종료된 컨테이너까지 모두 조회 가
컨테이너 생명 주기
docker create <이미지 이름>
스냅샷이 하드디스크에 설치
docker start -a <이미지 이름>
시작 명령어가 실행
-a
옵션은 attach의 줄임말
컨테이너에 '부착'되어 output들을 화면에 표출해줌
docker run <이미지 이름>
docker stop <컨테이너ID
docker kill <컨테이너ID>
둘 다 실행중인 컨테이너를 중지시킴
stop
은 gracefully하게 컨테이너 중지(하던 일을 마무리 하고 중지)
kill
은 즉시 컨테이너 중지
docker rm <컨테이너ID>
컨테이너 삭
docker rm 'docker ps -a -q'
모든 컨테이너 삭제
docker rmi <이미지ID>
이미지 삭제
docker system prune
컨테이너, 이미지, 네트워크 모두 삭제(실행 중인 컨테이너에는 영향X)
컨테이너에 명령 전달(exec)
docker exec <컨테이너ID> <명령어>
run
과 다르게 실행중인 컨테이너에 명령 전달
컨테이너가 실행중이라도, 컨테이너 밖의 환경에서 컨테이너 내부의 명령을 이용할 수 없음
터미널A: docker run redis
터미널B: redis-cli
--> 에러
실행 중인 컨테이너 내의 프로그램을 사용하기 위해 해당 컨테이너에 exec -it
옵션을 지정해줌
터미널B: docker exec -it f2b6e8659f87 redis-cli
-it
플래그는 interative terminal의 약자로, redis-cli
를 실행하기만 하고 바로 나오는 것이 아니라 redis-cli를 이용할 수 있도록 함
docker exec -it <컨테이너ID> <쉘>
명령어를 사용하면 컨테이너 내부에 쉘 사용 가능
쉘 명령어로는 sh
, bash
, powershell
등 사용 가능
Docker 파일
도커 파일 생성
- 베이스 이미지 명시(파일 스냅샷) - 베이스 이미지: 이미지 내의 여러 레이어의 기반이 되는 OS 역할
- 추가적으로 필요한 파일 다운을 위한 명령어들 명시(파일 스냅샷)
- 컨테이너 시작시 실행될 명령어 명시
# 베이스 이미지 명시
FROM baseImage
# 필요한 파일 다운로드
RUN command
# 시작시 실행될 명령어
CMD ["executable"]
# Dockerfile
# 베이스 이미지 명시
FROM alpine
# 시작시 실행될 명령어
CMD ["echo", "hello"]
도커 파일이 있는 디렉터리에서 docker build ./
명령어를 실행시 아래와 같은 단계로 이미지가 생성됨
- 베이스 이미지를 기반으로 임시 컨테이너 생성
- 임시 컨테이너에 스냅샷 및 시작 명령어 추가
- 임시 컨테이너 기반으로 새로운 이미지 생성 후 임시 컨테이너 삭제
docker build -t <도커ID>/<저장소or프로젝트명>:<버전> ./
도커 이미지명을 직접 설정할 수도 있음
'웹 > Docker' 카테고리의 다른 글
[Docker]Travis CI, EB를 이용한 배포 (0) | 2023.07.25 |
---|---|
[Docker]개발 환경 vs. 운영 환경 (0) | 2023.07.24 |
[Docker]COPY, Volume, Compose (0) | 2023.07.23 |
[Docker]기본 개념 (0) | 2023.07.21 |
댓글