docker run alpine ls 를 예로 든다면, 이미지 이름 뒤 다른 명령어가 붙어서 원래의 명령어가 무시되고 ls 명령어가 실행된다. 하지만 hello-world 이미지로는 ls 명령을 한다면 실행할 수 있는 파일을 못찾는다는 오류가 발생한다.
즉, 파일 스냅샷에 따라서 사용할 수 있는 커맨드가 존재한다.
이름 | 내용 |
---|---|
CONTAINER ID | 컨테이너의 고유한 아이디 해쉬값 |
IMAGE | 컨테이너 생성 시 사용한 도커 이미지 |
COMMAND | 컨테이너 시작 시 실행될 명령어 → 대부분 이미지에 내장되어 있으므로 별도 설정이 필요 X |
CREATED | 컨테이너가 생성된 시간 |
STATUS | 컨테이너의 상태 → 실행 중: Up, 종료: Exited, 일시정지: Pause |
PORTS | 컨테이너가 개방한 포트와 호스트에 연결한 포트 → 특별한 설정을 하지 않은 경우 출력되지 않는다. |
NAMES | 컨테이너 고유한 이름 → 컨테이너 생성 시 --name 옵션으로 이름 설정 가능 → id와 마찬가지로 중복이 안되고, 아래와 같이 docker rename명령어로 이름을 변경 가능 docker rename original-name changed-name |
실행되지 않은 모든 컨테이너를 보고 싶다면 -a
옵션을 추가해 주면 된다.
docker run 을 docker create, docker start로 쪼개서 볼 수 있다.
docker create
명령시, 파일 스냅숏을 컨테이너의 하드디스크로 가져오고 docker start
명령시, 시작 커맨드를 이용해 어플리케이션을 실행한다.
이때 -a 옵션은 output을 화면에 출력하도록 하는 것이다.
docker rm `docker ps -a -q`
모든 컨테이너 삭제run
은 새로 컨테이너를 생성해 전달하고 exec
는 실행 중인 컨테이너에 명령어를 전달한다는 점이 다르다.레디스 서버 실행 후, 레디스 클라이언트를 통해 서버에 명령어 전달
하지만 도커로 redis를 실행한 후, 클라이언트를 실행하려고 할때 컨테이너 밖이라 실행이 안된다.
따라서, 레디스 클라이언트도 컨테이너 내에서 실행하도록 해야 한다.
docker exec을 이용해 명령어를 전달했었는데, 터미널 환경으로 접속이 가능하다.