해당 글은 Inflearn(인프런) ‘비전공자도 이해할 수 있는 Docker 입문/실전' 강의를 토대로 작성되었습니다.
1. 이미지(Image) 다운로드
이미지를 다운로드 할 때 Dockerhub이라는 곳에서 이미지를 다운 받는다.
Dockerhub은 Github처럼 이미지를 저장 및 다운받을 수 있는 저장소 역할을 하고 있다.
✅ 이미지 다운로드
[최신 버전(latest) 이미지 다운로드]
# docker pull 이미지명
docker pull nginx # docker pull nginx:latest와 동일하게 작동
[특정 버전 이미지 다운로드]
# docker pull 이미지명:태그명
docker pull nginx:stable-perl
특정 버전을 나타내는 이름을 태그명이라고 한다. 태그명은 dockerhub에서 확인할 수 있다.
nginx - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 1.27.2, mainline, 1, 1.27, latest, 1.27.2-bookworm, mainline-bookworm, 1-bookworm, 1.27-bookworm, bookworm1.27.2-perl, mainline-perl, 1-perl, 1.27-perl, perl, 1.27.2-bookworm-perl, mainline-
hub.docker.com
2. 이미지(Image) 조회 / 삭제
✅ 다운받은 모든 이미지 조회
docker image ls
- ls : list의 약자
- REPOSITORY : 이미지 이름(이미지명)
- TAG : 이미지 태그명
- IMAGE ID : 이미지 ID
- CREATED : 이미지가 생성된 날짜 (다운받은 날짜 X)
- SIZE : 이미지 크기
✅ 이미지 삭제
[특정 이미지 삭제]
docker image rm [이미지 ID 또는 이미지명]
- rm : remove의 약자
- 이미지 ID를 입력할 때 전체 ID를 다 입력하지 않고 ID의 일부만 입력해도 된다. (단, ID의 일부만 입력했을 때, 입력한 ID의 일부를 가진 이미지가 단 1개여야 한다.)
- 컨테이너에서 사용하고 있지 않은 이미지만 삭제가 가능하다.
[전체 이미지 삭제]
# 컨테이너에서 사용하고 있지 않은 이미지만 전체 삭제
docker image rm $(docker images -q)
# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
docker image rm -f $(docker images -q)
- docker images -q : 시스템에 있는 모든 이미지의 ID를 반환한다. 여기서 -q 옵션은 quite를 의미하며, 상세 정보 대신에 각 이미지의 고유한 ID만 표시하도록 지시한다.
3. 컨테이너(Container) 생성 / 실행
✅ 컨테이너 생성
이미지를 바탕으로 컨테이너를 생성한다. 이 때, 컨테이너를 실행시키지는 않는다. (컨테이너를 실행하지 않고 생성만 하는 경우가 잘 없어서, 이 명령어는 잘 사용하지 않는다.)
# docker create 이미지명[:태그명]
docker create nginx
docker ps -a # 모든 컨테이너 조회
✅ 컨테이너 실행
정지되어 있는 컨테이너를 실행시킨다.
# docker start 컨테이너명[또는 컨테이너 ID]
docker start 컨테이너명[또는 컨테이너 ID]
docker ps # 실행중인 컨테이너 조회
# Nginx 컨테이너 중단 후 삭제하기
docker ps # 실행 중인 컨테이너 조회
docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
docker image rm nginx # Nginx 이미지 삭제
✅ 컨테이너 생성 + 실행
이미지를 바탕으로 컨테이너를 생성한 뒤, 컨테이너를 실행까지 시킨다. (처음에 이미지를 바탕으로 컨테이너를 실행시키고 싶을 때, 이 명령어를 자주 사용한다.)
# docker run 이미지명[:태그명]
docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수가 없음)
# Ctrl + C로 종료할 수 있음
- 로컬 환경에 다운받은 이미지가 없다면 Dockerhub으로부터 이미지를 다운(docker pull)받아서 실행시킨다.
- Dockerhub으로부터 새롭게 갱신된 이미지를 다운 받고 싶다면 docker pull 명령어를 활용해야 한다.
[컨테이너를 백그라운드에서 실행시키기]
포그라운드(foreground) 와 백그라운드(background) 의 차이
포그라운드는 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태를 뜻한다.
그러다보니 포그라운드 상태에서는 다른 프로그램을 조작할 수가 없다.
백그라운드는 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태를 의미한다.
그래서 프로그램이 어떻게 실행되고 있는 지에 대한 정보를 화면에서 확인할 수 없다. 이런 특성 때문에 다른 명령어를 추가로 입력할 수도 있고, 새로운 프로그램을 조작할 수도 있다.
# docker run -d 이미지명[:태그명]
docker run -d nginx
# Nginx 컨테이너 중단 후 삭제하기
docker ps # 실행 중인 컨테이너 조회
docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
docker image rm nginx # Nginx 이미지 삭제
[컨테이너에 이름 붙여서 생성 및 실행하기]
# docker run -d --name [컨테이너 이름] 이미지명[:태그명]
docker run -d --name my-web-server nginx
# Nginx 컨테이너 중단 후 삭제하기
docker ps # 실행 중인 컨테이너 조회
docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
docker image rm nginx # Nginx 이미지 삭제
[호스트의 포트와 컨테이너의 포트를 연결하기]
# docker run -d -p [호스트 포트]:[컨테이너 포트] 이미지명[:태그명]
docker run -d -p 4000:80 nginx
- docker run -p 4000:80 라고 명령어를 입력하게 되면, 도커를 실행하는 호스트의 4000번 포트를 컨테이너의 80번 포트로 연결하도록 설정한다.
4. 컨테이너(Container) 조회 / 중지 / 삭제
✅ 컨테이너 조회
[실행 중인 컨테이너들만 조회]
docker ps
[모든 컨테이너 조회 (작동 중인 컨테이너 + 작동을 멈춘 컨테이너)]
docker ps -a
- ps : process status의 약자
- -a : all의 약자
✅ 컨테이너 중지
docker stop 컨테이너명[또는 컨테이너 ID]
docker kill 컨테이너명[또는 컨테이너 ID]
- 집에 있는 컴퓨터로 비유하자면 stop은 시스템 종료 버튼을 통해 정상적으로 컴퓨터를 종료하는 걸 의미하고, kill은 본체 버튼을 눌러 무식하게 종료하는 걸 의미한다.
✅ 컨테이너 삭제
[중지되어 있는 특정 컨테이너 삭제]
docker rm 컨테이너명[또는 컨테이너 ID]
[실행되고 있는 특정 컨테이너 삭제]
docker rm -f 컨테이너명[또는 컨테이너 ID]
[중지되어 있는 모든 컨테이너 삭제]
docker rm $(docker ps -qa)
[실행되고 있는 모든 컨테이너 삭제]
docker rm -f $(docker ps -qa)
5. 컨테이너(Container) 로그 조회
컨테이너를 실행시키고나서 실행시킨 컨테이너가 잘 실행되고 있는 지, 에러가 발생한 건 아닌 지 로그를 확인할 수 있어야 한다. 디버깅할 때 필수로 확인해야 하는 게 로그다.
✅ 컨테이너(Container) 로그 조회
[특정 컨테이너의 모든 로그 조회]
# docker logs [컨테이너 ID 또는 컨테이너명]
docker run -d nginx
docker logs [nginx가 실행되고 있는 컨테이너 ID]
[최근 로그 10줄만 조회]
# dokcer logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
dokcer logs --tail 10 [컨테이너 ID 또는 컨테이너명]
[기존 로그 조회 + 생성되는 로그를 실시간으로 보고 싶은 경우]
# docker logs -f [컨테이너 ID 또는 컨테이너명]
# Nginx의 컨테이너에 실시간으로 쌓이는 로그 확인하기
docker run -d -p 80:80 nginx
docker logs -f
[기존 로그는 조회하지 않기 + 생성되는 로그를 실시간으로 보고 싶은 경우]
docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]
6. 실행중인 컨테이너 내부에 접속하기 (exec -it)
✅ 실행 중인 컨테이너 내부에 접속하기
# docker exec -it 컨테이너명[또는 컨테이너 ID] bash
docker run -d nginx
docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
ls # 컨테이너 내부 파일 조회
cd /etc/nginx
cat nginx.conf
- 컨테이너 내부에서 나오려면 Ctrl + D 또는 exit을 입력하면 된다.
- bash : 쉘(Shell)의 일종
- -it : -it옵션을 사용해야 명령어를 입력하고 결과를 확인할 수 있다. -it옵션을 적지 않으면 명령어를 1번만 실행시키고 종료되어 버린다. 즉, -it 옵션을 적어야 계속해서 명령어를 입력할 수 있다.
'Docker' 카테고리의 다른 글
Docker : Docker Compose를 활용해 컨테이너 관리하기 (0) | 2024.12.02 |
---|---|
Docker : Dockerfile 활용해 이미지 직접 만들기 (1) | 2024.12.02 |
Docker : 도커 볼륨을 활용해 데이터 유실 방지하기 (0) | 2024.12.02 |
Docker : [실습] Docker(Nginx 설치 및 실행) (0) | 2024.12.02 |
Docker : Docker란? (0) | 2024.12.02 |