☑️ 명령어
docker run [이미지 이름] ls
docker 명령어의 4번째 자리 역할 : 원래 이미지가 가지고 있는 시작 명령어를 무시하고 이 자리에 있는 커멘드를 실행하게 함.
ls : 현재 디렉토리의 파일 리스트 표출
☑️ 작동 순서
ex) docker run alpine ls
☑️ 결과
☑️ 기타
docker run hello-world ls
위 명령어는 에러가 뜨는데 hello-world 이미지 안의 파일 스냅샷 안에는 ls 명령어를 실행할 수 있는 파일이 들어가 있지 않기 때문이다.
☑️ 명령어
docker ps
ps : process status
☑️ 결과
CONTAINER ID : 컨테이너의 고유한 아이디 해쉬값. 실제로는 더욱 길지만, 일부분만 표출.
IMAGE : 컨테이너 생성 시 사용한 도커 이미지.
COMMAND : 컨테이너 시작 시 실행될 명령어. 대부분 이미지에 내장되어 있으므로 별도의 설정 필요 X.
CREATED : 컨테이너가 생성된 시간.
STATUS : 컨테이너의 상태.
PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트, 특별한 설정을 하지 않은 경우 출력 X.
NAMES : 컨테이너 고유한 이름. 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 조합해 설정. id와 마찬가지로 중복이 안되고 docker rename 명령어로 이름을 변경할 수 있음.
☑️ 기타
실행되지 않은 모든 컨테이너를 보고 싶으면 아래 명령어 사용.
docker ps -a
☑️ 명령어
docker run
= docker create
+ docker start
docker create
: 컨테이너를 생성함과 동시에 이미지의 파일 스냅샷을 컨테이너의 하드디스크에 넣어 준다.docker start
: 이미지에 저장된 시작 시 실행될 명령어를 컨테이너에 넣어 줌으로써 컨테이너를 실행한다.docker stop
vs docker kill
docker stop
: 그동안 하고 있던 작업들을 완료하고 컨테이너를 중지시킨다.docker kill
: stop과 달리 그 즉시 컨테이너를 중지시킨다.docker rm <아이디/이름>
: 중지된 컨테이너를 삭제한다.
docker rm 'docker ps -a -q
: 모든 컨테이너를 삭제한다.
docker rmi <이미지 ID>
: 이미지를 삭제한다.
docker system prune
: 한번에 컨테이너, 이미지, 네트워크 모두를 삭제한다(실행중인 것은 영향 x).
이미 실행중인 컨테이너에 명령어를 전달할 때는 docker exec <컨테이너 id>
를 사용한다.
☑️ 명령어
docker exec vs docker run
docker exec
: 이미 실행 중인 컨테이너에 명령어 전달.docker run
: 새로 컨테이너를 만들어서 실행. redis를 통해 exec 명령어에 대해 자세히 알아보도록 하겠다. redis는 아래 그림과 같이 먼저 redis server 실행 후 redis client를 통해서 server에 명령어를 전달해줘야 한다.
하지만 위와 같이 docker run redis
를 통해 서버를 실행한 후 첫번째 터미널에서는 아무것도 할 수 없어서 다른 터미널을 통해 redis-cli
를 입력했지만 인식을 못했다.
인식을 못 하는 이유는 아래와 같이 redis client가 redis server가 있는 컨테이너 밖에서 실행하려 하니 redis server에 접근할 수 없어서이다.
따라서 redis client도 컨테이너 안에서 실행을 시켜야한다. 앞서 살펴본 docker exec
를 사용하면 redis 서버가 실행 중인 컨테이너에 redis client도 실행시킬 수 있다.
아래와 같이 정상적으로 redis client에 접속했음을 확인할 수 있다.
it : it를 붙여줘야 명령어를 실행한 후 계속해서 명령어를 적을 수 있다. it가 없으면 redis client만 키고 밖으로 나간다.
지금까지 실행 중인 컨테이너에 명령어를 전달할 때 docker exec -it <컨테이너 ID> 명령어
이런 식으로 커멘드를 하나하나 입력해야 했다. 이러한 번거로움을 해결하고자 컨테이너 안에 쉘이나 터미널 환경으로 접속할 수 있다.
docker exec -it <컨테이너 ID> sh
: 컨테이너를 쉘 환경으로 접근
그다음 ls, touch new-file등 명령어를 자유롭게 사용하면 된다.
ctrl+d
: 쉘 환경 빠져나오기.