✅ 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
stop
과 kill
의 차이는
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 이미지명[:태그명]
docker run nginx
포그라운드
실행 하게 됨포그라운드
에서 빠져나오려면 컨트롤 + C
를 누르면 됨백그라운드
로 하고 싶으면 -> docker run -d nginx
입력-d
(디태치트 모드) -> 웬만하면 -d
옵션을 사용해서 백그라운드로 사용하자!포그라운드
: 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태
(직접적으로 바로바로 확인할 수 있는 상태)
장점 : 프로그램이 어떻게 실행되는지 또는 실시간으로 어떤 로그들이 찍히는지 확인할 수 있다
단점 : 다른 프로그램을 조작할 수 없다
백그라운드
: 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태
장단점은 포그라운드와 반대임
✅ 컨테이너에 이름 붙여서 생성 및 실행하기
docker run -d --name [컨테이너 이름] 이미지명[:태그명]
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
입력