자주 사용하는 도커 CLI 명령어

WAS·2025년 5월 12일
0

도커

목록 보기
2/6

✅ CLI 창 클린 하는 방법
cls : clean screen


이미지 를 다운받는 명령어
docker pull 이미지명
ex) docker pull nginx
뒤에 태그명(버전)을 붙이지 않으면 latest 가 자동으로 붙어서 최신 버전이 다운받아짐


✅ 다운받은 이미지 를 확인하는 명령어

  • docker image ls

dockerhub
깃허브에서 여러프로젝트를 저장하고 pull 을 이용해서 다운받는 것처럼
dockerhub 에서도 이미지를 저장, 다운받을 수 있는 저장소 역할을 하는 서비스이다

이미지를 다운받을 때 원하는 버전을 다운 받을 수 있음
TAG : 이미지의 특정 버전을 나타내는 이름
본인이 특정 버전의 Nginx를 다운받고 싶으면
docker pull nginx:태그명
ex) docker pull nginx:stable-alpine3.19-perl

ECR (Elastic Container Registry)
필요한 이미지를 다운받을 때, dockerhub 에서 다운받는다고 설명했다
이와 동일한 역할을 하는 AWS ECR 이라는 것이 있다.
AWS ECR 도 이미지를 저장 및 다운받을 수 있는 저장소 역할을 한다

dockerhub 대신 AWS ECR 을 사용하는 가?
-> 최근에는 AWS 클라우드 환경에서 인프라를 구축하는 일이 많아짐에 따라
다른 AWS 자원(EC2, RDS.. 등)들과도 연동이 편하고, AWS 내에서 한번에 관리할 수 있는 편리함이 있기 때문이다

AWS ECR 의 가장 큰 특징은 이식성 이다
도커만 깔려있으면, 어디에서는 내가 원하는 프로젝트를 실행시킬 수 있다
즉 프로젝트에 필요한 코드에 대해서만 Docker 이미지로 빌드해서, EC2에서는 그 이미지만 다운받아서
실행하는 방식이다

결론은 AWS ECR은 프로젝트를 훨신 간단하게 배포하고 실행시키기 위해서다


이미지 를 삭제하는 명령어

  • docker image rm [이미지 ID 또는 이미지명]
    컨테이너에서 사용하고 있지 않은 이미지만 삭제 가능

  • docker image rm -f [이미지 ID 또는 이미지명]
    중지된 컨테이너에서 사용하고 있는 이미지까지 강제 삭제
    실행 중인 컨테이너에서 사용하고 있는 이미지는 강제로 삭제 불가능해서
    직접 중지시키고 삭제해야함

  • docker image rm $(docker images -q)
    컨테이너에서 사용하고 있지 않은 이미지만 전체 삭제

  • docker image rm -f $(docker images -q)
    컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
    docker images -q 가 시스템에 있는 모든 이미지의 ID를 반환한다


컨테이너 를 생성하는 명령어

  • docker create 이미지명[:태그명] : 이미지 를 바탕으로 컨테이너 를 생성
    이때 컨테이너만 생성하고 실행을 하지 않은 상태 (컴퓨터를 안킨거임)

create 를 이용하여 컨테이너를 생성하면 이미지를 다운받지 않는 상황이여도
자동으로 Dockerhub에서 이미지를 다운 받아서 컨테이너를 생성한다

  • docker ps -a : 모든 컨테이너를 조회 (실행중, 정지, 종료)
  • docker ps : 현재 실행중인 컨테이너만 조회

컨테이너 를 실행하는 명령어

  • docker start 컨테이너명[또는 컨테이너 ID]
    생성한 컨테이너의 본체를 켜서 컴퓨터를 실행시킨거임

✅ 실행중인 컨테이너 를 중단하기

  • docker stop [실행시킨Container ID]

  • docker kill [실행시킨Container ID

stopkill 의 차이는
stop 은 정상적으로 시스템 종료버튼을 눌러서 컴퓨터를 종료한거고
kil 은 컴퓨터가 먹통이 되었을 때, 본체 버튼을 눌러서 강제로 종료한것이다


컨테이너 를 삭제

  • docker rm [삭제할Container ID]

stop -> rm 순서로 할까? : 안전하게 컨테이너를 정리하기 위해서

docker rm 은 실행중인 컨테이너는 삭제할 수 없다 -> 그래서 먼저 stop 을 해야함

하지만 -f (force) 옵션을 사용하면 컨테이너가 실행중이여도 강제로 종료 + 삭제 까지 해줌
docker rm -f 컨테이너명[또는 컨테이너 ID]

docker rm $(docker ps -qa) : 중지되어있는 컨테이너들을 모두 삭제


실제로 현업에서는 이미지를 다운 (1) 받고, 컨테이너를 생성 (2) 하고, 컨테이너를 실행 (3)
을 따로 하지않고 한번에 하는 명령어를 사용한다

✅ 컨테이너 생성 + 실행

  • docker run 이미지명[:태그명]
    ex) docker run nginx
    이 명령어는 특별한 옵션이 없으면 터미널을 포그라운드 실행 하게 됨
    포그라운드 에서 빠져나오려면 컨트롤 + C 를 누르면 됨
    내가 위 명령어를 백그라운드 로 하고 싶으면 -> docker run -d nginx 입력
    -d (디태치트 모드) -> 웬만하면 -d 옵션을 사용해서 백그라운드로 사용하자!

포그라운드 : 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태
(직접적으로 바로바로 확인할 수 있는 상태)

장점 : 프로그램이 어떻게 실행되는지 또는 실시간으로 어떤 로그들이 찍히는지 확인할 수 있다
단점 : 다른 프로그램을 조작할 수 없다

백그라운드 : 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태
장단점은 포그라운드와 반대임

✅ 컨테이너에 이름 붙여서 생성 및 실행하기

  • docker run -d --name [컨테이너 이름] 이미지명[:태그명]
    ex) docker run -d --name my-web-server nginx : 이름이 my-web-server라는 컨테이너가 생성됨

이제 실행시킨 컨테이너를 인터넷으로 접속해보겠다
nginx 를 실행시키면 대부분 80번 포트로 실행될것이다
하지만 localhost:80 으로 접속이 안되는것을 확인할 수 있다

그 이유는 컨테이너를 생성 = 미니 컴퓨팅 환경 = 독립적인 환경
즉 호스트 컴퓨터의 네트워크와 분리된 환경이다
그래서 외부에서 컨테이너 를 접속할 수 있도록 포트를 연결해줘야 한다

✅ 호스트의 포트와 컨테이너의 포트를 연결
docker run -d -p [호스트 포트]:[컨테이너 포트] 이미지명[:태그명]
ex) docker run -d -p 4000:80 nginx
즉 위 명령어와 같이 컨테이너를 생성하면 외부에서 localhost:4000을 입력하면
도커를 실행하는 호스트의 4000번 포트를 컨테이너의 80번 포트로 연결하도록 설정한다는 뜻

쉽게 말하면 사용자가 외부에서 4000번 포트로 요청을 보내면 컨테이너의 80번 포트랑 연결시키겠다라는 뜻


✅ 컨테이너 로그 조회

  • docker logs [컨테이너 ID 또는 컨테이너명] : 모든 로그 조회
  • docker logs --tail 10 [컨테이너 ID 또는 컨테이너명] : 최신 로그 10줄만 조회
  • docker logs -f [컨테이너 ID 또는 컨테이너명] : 기존 로그 조회 + 실시간으로 생성되는 로그 조회
  • docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명] : 기존 로그 조회 X + 실시간 생성 로그

✅ 실행중인 컨테이너 내부 접속

  • docker exec -it [실행되고 있는 컨테이너 ID] bash
    를 입력하면 접속되고 다시 호스트 환경으로 돌아오고 싶으면 exit 입력 or Ctrl + D 입력
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN