Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- @Transactional
- dockerhub
- CORS
- kafka
- 페이징
- JWT
- Routing Key
- 쿠버네티스
- securitycontextholderfilter
- DLQ
- Dead Letter Queue
- Spring
- Spring Container
- MSA
- Web
- docker compose
- redis
- JPQL
- mybatis
- Spring Data JPA
- 컨테이너
- docker
- DI
- 서블릿 컨테이너
- 스프링 부트
- JPA
- AWS
- JdbcTemplate
- 지연 로딩
- @ComponentScan
Archives
- Today
- Total
look-forest
현업에서 자주 사용하는 Docker CLI 익히기 본문
이미지
이미지 다운로드
# docker pull 이미지명
$ docker pull nginx # docker pull nginx:latest와 동일하게 작동
# docker pull 이미지명:태그명
$ docker pull nginx:stable-perl
- DockerHub에서 이미지를 다운받는 것이다. Dockerhub은 Github처럼 이미지를 저장 및 다운받을 수 있는 저장소 역할
- 태그명은 이미지의 특정 버전을 의미한다. 태그명을 생략하면 자동으로 :lastest가 붙는다.


이미지 조회/삭제
다운받은 모든 이미지 조회
$ docker image ls(list)

- REPOSITORY: 이미지명
- TAG: 버전
이미지 삭제
$ docker image rm [이미지 ID 또는 이미지명]
# 컨테이너에서 사용하고 있지 않은 이미지만 전체 삭제
$ docker image rm $(docker images -q)
# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
$ docker image rm -f $(docker images -q)
- id는 기니까 앞자리 일부만 입력해도 된다.
- 컨테이너에서 사용 중인 이미지를 삭제하려면 -f 옵션을 붙여야 한다. (단, 중단 상태여야 한다)
- docker images -q : 시스템에 있는 모든 이미지의 ID를 반환한다.
여기서 -q 옵션은 quite를 의미하며, 상세 정보 대신에 각 이미지의 고유한 ID만 표시하도록 지시한다.
컨테이너
컨테이너 생성/실행
컨테이너 생성
# docker create 이미지명[:태그명]
$ docker create nginx
$ docker ps -a # 모든 컨테이너 조회
- 이미지를 바탕으로 컨테이너를 생성한다. 이 때, 컨테이너를 실행시키지는 않는다.
(컨테이너를 실행하지 않고 생성만 하는 경우가 잘 없어서, 이 명령어는 잘 사용하지 않는다.) - 로컬 환경에 다운받은 이미지가 없다면 Dockerhub으로부터 이미지를 다운(docker pull)받아서 컨테이너를 생성한다.
컨테이너 실행
$ 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
컨테이너에 이름 붙여서 생성 및 실행하기
# docker run -d --name [컨테이너 이름] 이미지명[:태그명]
$ docker run -d --name my-web-server nginx

호스트의 포트와 컨테이너의 포트를 연결하기
# docker run -d -p [호스트 포트]:[컨테이너 포트] 이미지명[:태그명]
$ docker run -d -p 4000:80 nginx
docker run -d nginx으로 실행시키고 ps로 조회하면 아래와 같다.
이때 localhost:80으로 요청을 보내도 응답이 없다. 왜냐면 host 컴퓨터와 컨테이너는 네트워크가 분리되어 있기 때문이다.

docker run -p 4000:80 라고 명령어를 입력하게 되면, 도커를 실행하는 호스트의 4000번 포트를 컨테이너의 80번 포트로 연결하도록 설정한다.


컨테이너 조회 / 중지 / 삭제
컨테이너 조회
# 실행 중인 컨테이너들만 조회
$ docker ps
# 모든 컨테이너 조회 (작동 중인 컨테이너 + 작동을 멈춘 컨테이너)
$ docker ps -a
컨테이너 중지
$ docker stop 컨테이너명[또는 컨테이너 ID]
$ docker kill 컨테이너명[또는 컨테이너 ID] # stop이 안먹힐때 비정상적 강제 종료
컨테이너 삭제
# 중지되어 있는 특정 컨테이너 삭제
$ docker rm 컨테이너명[또는 컨테이너 ID]
# 실행되고 있는 특정 컨테이너 삭제 (강제 종료 후 삭제)
$ docker rm -f 컨테이너명[또는 컨테이너 ID]
# 중지되어 있는 모든 컨테이너 삭제
$ docker rm $(docker ps -qa)
# 실행되고 있는 모든 컨테이너 삭제
$ docker rm -f $(docker ps -qa)
컨테이너 로그 조회
# 모든 로그 조회
# docker logs [컨테이너 ID 또는 컨테이너명]
$ docker logs [nginx가 실행되고 있는 컨테이너 ID]
# 최근 로그 10줄만 조회
# dokcer logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
$ dokcer logs --tail 10 [컨테이너 ID 또는 컨테이너명]
# 기존 로그 조회 + 생성되는 로그를 실시간으로 보고 싶은 경우
# docker logs -f [컨테이너 ID 또는 컨테이너명]
$ docker logs -f [컨테이너 ID 또는 컨테이너명]
# 기존 로그는 조회하지 않기 + 생성되는 로그를 실시간으로 보고 싶은 경우
$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]
- -f : follow의 약어
실행중인 컨테이너 내부에 접속하기 (exec -it)
컨테이너는 미니 컴퓨터라고 표현했다. 즉, 호스트 컴퓨터 안에 다른 새로운 컴퓨터가 여러개 있는 것과 같다. 따라서 각각의 컨테이너는 자기만의 컴퓨터 공간(OS, 저장 공간, 프로그램 등)을 가지고 있다.

# docker exec -it 컨테이너명[또는 컨테이너 ID] bash
$ docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
- bash : 쉘(Shell)의 일종 (bash를 이용해 접속하겠다)
- -it : -it옵션을 사용해야 명령어를 입력하고 결과를 확인할 수 있다.
-it옵션을 적지 않으면 명령어를 1번만 실행시키고 종료되어 버린다. 즉, -it 옵션을 적어야 계속해서 명령어를 입력할 수 있다. - 컨테이너 내부에서 나오려면 Ctrl + D 또는 exit을 입력하면 된다.
[실습]
- 명령어에서 보통 컨테이너/이미지는 맨 끝에 적는다.
- 호스트 컴퓨터와 컨테이너는 독립된 환경을 같는다. 네트워크도 달라서, 포트 매핑을 해줘야 접속할 수 있다.
Docker로 Redis 실행시켜보기

# Redis 이미지를 바탕으로 컨테이너 생성하고 실행시키기(백그라운드, 포트매핑)
$ docker run -d -p 6379:6379 redis
# 다운로드 된 이미지 확인하기
$ docker image ls
# 컨테이너가 잘 실행되고 있는 지 체크
$ docker ps
# 컨테이너 실행시킬 때 에러 없이 잘 실행됐는 지 로그 체크
$ docker logs [컨테이너 ID 또는 컨테이너명]
# Redis 컨테이너에 접속 (redis가 설치된 PC에 접속)
$ docker exec -it [컨테이너 ID 또는 컨테이너명] bash
# 컨테이너에서 redis 사용해보기
$ redis-cli
127.0.0.1:6379> set 1 jaeryang
127.0.0.1:6379> get 1
참고 자료 & 이미지 출처
비전공자도 이해할 수 있는 Docker 입문·실전
'Infra > Docker' 카테고리의 다른 글
| AWS EC2에서 Docker를 활용해 배포해보기 (1) | 2025.08.19 |
|---|---|
| Docker Compose를 활용해 컨테이너 관리하기 (1) | 2025.08.15 |
| Dockerfile 활용해 이미지 직접 만들기 (0) | 2025.08.15 |
| 도커 볼륨을 활용해 데이터 유실 방지하기 (2) | 2025.08.15 |
| Docker 기본 개념 (3) | 2025.08.14 |