이미지 내부 파일 시스템 구조 보기
docker run 이미지이름 ls
- ls 자리(이미지이름 뒤)는 원래 이미지가 갖고 있는 시작 명령어를 무시하고 여기에 있는 커맨드를 실행하게 한다.
- 시작할 때 하드디스크로 파일 스냅샷(bin, dev, etc...)이 들어가는데, 파일 스냅샷에 담긴 파일에 따라 ls와 같은 특정 명령어 실행 가능 여부가 나뉜다.
컨테이너 나열
docker ps(process status) -a
// -a: 종료된 컨테이너까지 모두 보여줌
docker rename original-name changed-name
// 이름 변경
docker ps --format 'table{{.Names}} \t table{{.Image}}'
// \t는 탭 설정해서 정렬해서 보이도록 해줌
- CONTAINER ID: 컨테이너 고유 아이디 해시값
- IMAGE: 컨테이너 생성시 사용한 도커 이미지
- COMMAND: 컨테이너 시작시 실행될 명령어
- CREATED: 컨테이너 생성 시간
- STATUS: 컨테이너 상태(Up, Exited, Pause)
- PORTS: 컨테이너가 개방한 포트와 호스트에 연결한 포트
- NAMES: 컨테이너 이름. 컨테이너 생성할 때 --name 옵션으로 설정하지 않으면 도커 엔진이 임의로 형용사와 명사 조합해서 설정 ex. vibrant_volhard
컨테이너 생명주기
- 생성 -> 시작 -> 실행 -> 중지 -> 삭제
생성, 실행
docker run
// docker create(아이디 생성) + docker start(실행)
중지
docker stop
// 하던 작업들을 완료하고 중지시킴(SIGTERM, SIGKILL)
docker kill
//바로 컨테이너 중지시킴(SIGKILL)
삭제
- 실행중인 컨테이너는 먼저 중지한 후에 삭제가 가능함.
docker rm
// 하나씩 삭제
docker rm docker ps -a -q
// 모든 컨테이너 삭제
docker rmi
// 이미지 삭제
docker system prune
// 한번에 컨테이너, 이미지, 네트워크 모두 삭제(실행중인 컨테이너는 삭제되지 않음)
실행중인 컨테이너에 명령어 전달
docker exec
- run과의 차이점은 실행중이라는 것(run은 새로운 컨테이너를 만들어서 실행한다)
- 컨테이너 밖에서는 안으로 접근할 수 없어 오류가 발생. 클라이언트를 컨테이너 안으로 넣어줘야함.
docker exec -it 아이디 명령어
-it는 interactive terminal