도커 이미지의 내부 파일 구조 보기 - docker run ls
도커 이미지의 내부 파일 구조를 보는 명령어는 다음과 같다.
docker run <도커 이미지 이름> ls
- docker : 도커 클라이언트 언급
- run : 컨테이너 생성 및 실행
- <이미지 이름> : 이 컨테이너를 위한 이미지
- ls : 이미지의 기본 시작 명령어 대신 실행할 명령어(ls는 파일 목록을 출력)
실행 예시
실행 과정
- alpine 이미지를 이용해 컨테이너 생성
- 컨테이너를 생성할 때 alpine 이미지 안에 들어 있던 파일 스냅숏(bin, dev, etc 등....)이 컨테이너 안에 있는 하드디스크로 다운로드된다.
- 이미지 이름 뒤에 다른 명령어를 추가했기 때문에(docker run alpine ls) 원래 이미지에 들어 있는 기본 명령어는 무시되고, ls 명령어가 실행된다.
모든 도커 이미지에서 ls를 사용할 수 있는 것은 아니다. 이렇게 ls 명령어를 사용할 수 있는 이유는 이미지의 파일 스냅숏 안에 ls 명령어를 사용할 수 있는 파일이 들어 있기 때문이다.
컨테이너 나열하기 - docker ps
현재 어떤 컨테이너를 실행 중인지 나열하는 명령어는 다음과 같다.
docker ps
- docker : 도커 클라이언트 언급
- ps : process status의 약자
실행 예시(ping 명령어를 유지하기 위해 ping google.com을 입력)
- CONTAINER ID : 컨테이너의 고유한 아이디 해시값, 실제로는 더 길지만 일부분만 출력됨.
- IMAGE : 컨테이너 생성 시 사용한 도커 이미지 이름.
- COMMAND : 컨테이너 시작 시 실행될 명령어, 대부분 이미지에 내장되어 있어 별도 설정 필요하지 않음.
- CREATED : 컨테이너가 생성된 시각
- STATUS : 컨테이너의 상태, 실행중은 Up, 종료는 Exited, 일시정지는 Pause
- PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트, 특별한 설정을 하지 않은 경우 출력되지 않음.
- NAMES : 컨테이너의 고유한 이름, 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 설정, 중복을 허용하지 않고, 'docker rename <원래이름> <변경할 이름>'로 이름을 변경할 수 있다.
나열 시 원하는 항목만 볼 수도 있다.
docker ps --format 'table {{.Names}} \t table {{.Image}}'
- docker : 도커 클라이언트 언급
- ps : process status의 약자
- --format : 원하는 항목만 보기
- 'table {{.Names}} : 컨테이너의 고유한 이름
- \t : 탭
- table {{.Image}}' : 도커 이미지
또 중단된 컨테이너를 포함한 모든 도커 컨테이너를 나열 할 수도 있다.
docker ps -a
- docker : 도커 클라이언트 언급
- ps : process status의 약자
- -a : all
도커 컨테이너 생성 및 실행 - docker run <이미지 이름>
도커 컨테이너는 다음과 같은 명령어를 통해 생성하고 실행 할 수 있다.
docker run <이미지 이름>
docker run <이미지 이름> 명령어는 docker create <이미지 이름>와 docker start <컨테이너 아이디/이름> 명령어로 쪼개어 볼 수 있다.
- docker create <이미지 이름> : 도커 이미지를 이용해 도커 컨테이너를 생성한다.
- docker start <컨테이너 아이디/이름> : 생성된 컨테이너를 시작해서 실행한다.
도커 컨테이너를 중지하기 - docker stop <컨테이너 ID/이름>
docker stop은 SIGTERM이라는 것을 보내서 진행 중인 프로세스를 정리하는 시간을 갖고 SIGKILL을 보내서 컨테이너를 중지 시킨다.
도커 컨테이너를 즉시 중지하기 - docker kill <컨테이너 ID/이름>
docker kill은 명령어를 입력하는 순간 바로 SIGKILL을 보내서 모든 프로세스를 멈추고 도커 컨테이너를 중지 시킨다.
도커 컨테이너 삭제 - docker rm <컨테이너 ID/이름>
중지된 도커 컨테이너를 삭제하는 명령어로 반드시 삭제할 컨테이너는 중지되어있는 상태여야 한다. 만약 실행 중인 컨테이너를 삭제하려고 하면 오류가 발생한다.
docker rm`docker ps -a -q`를 사용하면 중지된 모든 컨테이너를 삭제할 수 있다.
docker rm`docker ps -a -q`
docker rmi <이미지 id>를 사용하면 도커 이미지를 삭제할 수 있다.
docker rmi <이미지 id>
사용하지 않는 데이터 삭제하기 - docker system prune
중지된 모든 컨테이너와 네트워크, 이미지 등이 삭제되고, 삭제된 목록들과 삭제하므로써 확보한 공간의 사이즈를 알려준다.
실행 중인 컨테이너에 명령 전달하기 - docker exec
컨테이너 실행 중에 명령어를 전달해야 하는 경우가 있는데 이때 docker exec <컨테이너 ID> <명령어>를 사용한다.
docker exec <컨테이너 ID> <명령어>
또 실행 중인 컨테이너에서 터미널을 사용할 수 있다.
실행 중인 컨테이너에 명령을 여러번 전달해야 할 경우 다음과 같은 명령어를 전달할 때 마다 입력하는 것은 비효율적이다.
docker exec -it <컨테이너 ID> 명령어
그래서 컨테이너에 셸이나 터미널 환경으로 접속하는 방법이 따로 존재한다.
docker exec -it <컨테이너 ID> sh
다음과 같은 명령어를 사용하면 된다.
쉘 환경에서 빠져 나오려면 Control + D를 이용해 빠져 나올 수 있다.
'Container > Docker' 카테고리의 다른 글
[Docker] 도커 이미지 PUSH, PULL (0) | 2023.08.08 |
---|---|
[Docker] 도커로 Node.js, flask 서버 이미지 만들어 사용하기 (0) | 2023.08.08 |
[Docker] 도커 이미지 생성하기 (0) | 2023.07.27 |
[Docker] 도커 기본 개념 (0) | 2023.07.18 |
[Docker] 도커(Docker) (0) | 2023.07.12 |