아래 배울 명령어를 이해하기 전에 알고가면 좋을 용어
docker의 image의 list 확인하기
docker image ls
docker hub에서 nginx의 최신버전 이미지를 다운로드
docker pull nginx
docker hub에서 nginx의 특정 버전 이미지를 다운로드
docker pull nginx:stable-perl
이미지 목록 중 ID가 c8ba로 시작하는 이미지를 삭제
docker image rm c8ba
하지만 컨테이너에 포함되어있는 이미지는 삭제할 수 없다
이럴 경우에도 삭제하고싶다면
docker image rm -f c8ba
로 중지되어있는 컨테이너의 이미지를 강제로 삭제 가능
컨테이너에서 사용하고 있지 않은 모든 이미지들을 삭제
docker image rm $(docker imagex -q)
모든 컨테이너들의 상태를 확인
docker ps -a
nginx라는 이미지의 컨테이너를 생성(아직 중지 상태)
docker create nginx
nginx 이미지로 생성된 (컨테이너 ID가 cb28로 시작하는)컨테이너를 실행
docker start cb28
만약 mysql 이미지를 다운로드 받지 않은 상태에서
docker create mysql
라고 작성한다면
알아서 docker hub에서 이미지도 같이 다운로드 받아줌
cb28로 시작하는 ID의 컨테이너를 삭제
docker rm cb28
nginx 이미지의 docker 컨테이너를 생성 + 실행 동시에
docker run nginx
run으로 실행하게되면 포그라운드(foreground)로 실행되기 때문에 ctrl+c
를 눌러 탈출한다.
만약 백그라운드(background)로 실행시키고 싶다면
docker run -d nginx
nginx 이미지로 my-web-server 라는 이름의 컨테이너를 백그라운드에서 생성 + 실행
docker run -d --name my-web-server nginx
위에서 진행한 명령어들은 현제 컨테이너 안에서 nginx를 생성하고 실행했기 때문에
호스트와 연결이 되어있지 않은 상태이기 때문에
localhost:80으로 접속해도 아무 것도 뜨지 않는다.
호스트와 컨테이너는 독립적이기 때문에 이 둘을 연결해주어야한다!
docker run -d -p 4000:80 nginx
docker ps
로 확인 가능하다.
이제 localhost:80으로 접속하려하면?
당연히 아무것도 뜨지 않는다.
사용자는 localhost:4000과 연결되기 때문이다.
docker stop과 docker kill 둘 다 종료하는건데 차이가 뭐지?
docker stop ~
: 정상적인 종료
docker kill ~
: 강제 종료(파일 손상의 위험이 있으나 어쩔 수 없는 경우)
docker rm은 컨테이너가 중지되어있는 상태에서만 가능하다.
docker stop ~
docker rm ~
중지되어있는 모든 컨테이너들을 삭제
docker rm $(docker ps -qa)
실행되고있는 컨테이너는 삭제가 불가능하지만, 강제적으로 삭제가 가능하다.
docker rm -f ~
컨테이너의 로그를 확인하고 싶을 때
docker logs ~
로그가 너무 많이나와... 마지막 10줄 정도만 확인하고싶어
docker logs --tail 10 ~
기존의 로그들이랑 추가적으로 실시간 생성되는 로그를 확인하고싶어
docker logs -f ~
원래 있던 로그들은 필요없고, 새로 생성되는 로그들만 확인하고싶어
docker logs --tail 0 -f
특정 컨테이너의 내부로 (bash 환경으로)접속하고싶어
docker exec -it ~ bash
컨테이너 환경에서 나와서 호스트로 돌아가고싶어
exit