
컨테이너 생성 / 실행
[컨테이너 생성]
이미지를 바탕으로 컨테이너를 생성한다. 이때 컨테이너를 실행시키지는 않는다.
(컨테이너를 실행하지 않고 생성만 하는 경우가 잘 없어서, 이 명령어는 잘 사용하지 않는다)
# 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 이미지 삭제

- 실행중인 컨테이너를 중지 시킴
- 컨테이너 중지가 완료되어있는지 확인
- 해당 컨테이너 ID를 작성하여 중지된 컨테이너 삭제
- 이미지도 삭제
컨테이너 생성 / 실행 - 2
[컨테이너 생성 + 실행]
이미지를 바탕으로 컨테이너를 생성한 뒤, 컨테이너를 실행까지 run 명령어로 한번에 할 수 있다.
# docker run 이미지명[:태그명]
$ docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수가 없음)
# Ctrl + C로 종료할 수 있음
- 로컬 환경에 다운받은 이미지가 없다면 Dockerhub으로부터 이미지를 다운(docker pull)받아서 실행시킨다.
- Dockerhub로부터 새롭게 갱신된 이미지를 다운 받고 싶다면 docker pull 명령어를 활용해야 한다.
[컨테이너를 백그라운드에서 실행시키기]
기본 개념
- 포그라운드는 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태를 뜻한다. 그러다보니 포그라운드 상태에서는 다른 프로그램을 조작할 수가 없다.
- 백그라운드는 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태를 의미한다. 그래서 프로그램이 어떻게 실행되고 있는 지에 대한 정보를 화면에서 확인할 수 없다. 이런 특성 때문에 다른 명령어를 추가로 입력할 수도 있고, 새로운 프로그램을 조작할 수도 있다.
# 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
- -d : 백그라운드 모드로 실행 (터미널에 계속 묶여있지 않고 뒤에서 돌아가도록 함)
- -p 4000:80 : 내 (호스트)컴퓨터 포트 4000과 컨테이너 내부의 80번 포트를 연결해줌.

- 컨테이너 안 쪽에는 Nginx 웹 서버가 80번 포트를 통해서 서비스를 제공합니다.
- 하지만 컨테이너는 호스트 컴퓨터 내부에 격리된 환경이기 때문에 외부(사용자)가 직접 컨테이너 안의 80번 포트로 접속할 수 없습니다.
- 그래스 -p 4000:80 처럼 포트 매핑을 해줍니다
- 호스트 컴퓨터(내 컴퓨터)의 4000번 포트로 들어오는 요청을 컨테이너의 80번 포트로 전달해주는 다리 역할을 합니다.
- 결과적으로 호스트 컴퓨터(내 PC)에서 http://localhost:4000으로 접속하면 Docker가 그 요청을 컨테이너 안의 80번 포트로 넘겨줍니다.
- 컨테이너 안에서 동작 중인 Nginx가 해당 요청을 받아서 응답을 돌려주면 그 응답이 다시 4000번 포트를 통해 내 컴퓨터 화면에 표시되는 겁니다.
정리하면
- docker run -> Docker 컨테이너 실행
- -p 4000:80 -> 내 PC 포트 4000 -> 컨테이너 포트 80 연결
- Nginx -> Nginx 웹 서버 이미지를 사용
컨테이너 조회 / 중지 / 삭제
컨테이너 조회
[실행 중인 컨테이너들만 조회]
$ docker ps
- ps : process status의 약자
[모든 컨테이너 조회 (작동 중인 컨테이너 + 작동을 멈춘 컨테이너)]
$ docker ps -a
- -a : all의 약자
컨테이너 중지
$ docker stop 컨테이너명 또는 컨테이너 ID
$ docker kill 컨테이너명 또는 컨테이너 ID
- 집에 있는 컴퓨터로 비유하자면 stop은 시스템 종료 버튼을 통해 정상적으로 컴퓨터를 종료하는 걸 의미하고, kill은 본체 버튼을 눌러 강제적으로 종료하는 걸 의미합니다. 강제적으로 종료시에 파일이 깨질 수 있으니 kill은 웬만해서 사용하지 맙시다!
컨테이너 삭제
[중지되어 있는 특정 컨테이너 삭제]
$ docker rm 컨테이너명 또는 컨테이너 ID
- 실행 중인 컨테이너는 중지한 후에만 삭제가 가능합니다.
[실행되고 있는 특정 컨테이너 삭제]
$ docker rm -f 컨테이너명 또는 컨테이너 ID
[중지 되어 있는 모든 컨테이너 삭제](이거 많이 쓸 수 있음)
$ docker rm $(docker ps -qa)
[실행되고 있는 모든 컨테이너 삭제]
$ docker rm -f $(docker ps -qa)
컨테이너 로그 조회
컨테이너를 실행시키고나서 실행시킨 컨테이너가 잘 실행되고 있는지, 에러가 발생한 건 아닌지 로그를 확일 할 수 있어야 합니다.
디버깅할 때 필수로 확인해야 하는게 로그입니다.
컨테이너 로그 조회
[특정 컨데이너의 모든 로그 조회]
# docker logs 컨테이너 ID 또는 컨테이너 명
$ docker run -d nginx
$ docker logs [nginx가 실행되고 있는 컨테이너 ID]
[최근 로그 10줄만 조회]
# docker logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너 명]
$ docker logs --tail 10 [컨테이너 ID 또는 컨테이너명]
[기존 로그 조회 + 생성되는 로그를 실시간으로 보고 싶은 경우]
# docker logs -f [컨테이너 ID 또는 컨테이너명]
# Nginx의 컨테아너에 실시간으로 쌓이는 로그 확인하기
$ docker run -d -p 80:80 nginx
$ docker logs -f
- -f : follow의 약어
[기존 로그는 조회하지 않고, 생성되는 로그를 실시간으로만 보고 싶은 경우]
$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너 명]
실행중인 컨테이너 내부에 접속하기(exec - it)
각각의 컨테이너마다 자기만의 컴퓨터 공간(OS, 저장 공간, 프로그램, 파일 등)을 가지고 있다. 우리는 그걸 확인하고 싶은데 어떻게 할까?
[실행 중인 컨테이너 내부에 접속하기]
# docker exec -it [컨테이너명 또는 컨테이너 ID] bash
$ docker run -d nginx
$ docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
$ ls # 컨테이너 내부 파일 조회
$ cd /etc/nginx # nginx 디렉토리로 이동
$ cat nginx.conf # nginx 파일 열어보기
- 컨테이너 내부에서 나오려면 ctr + c를 입려
- bash : 쉘의 일종
- -it : -it 옵션을 사용해야 명령어를 입력하고 결과를 확인할 수 있다. -it 옵션을 적지 않으면 명령어를 1번만 실행시키고 종료되어 버린다. 즉 -it 옵션을 적어야 계속해서 명령어를 입력할 수 있다.

'Back-End > Docker' 카테고리의 다른 글
| Docker Volume을 이용해 MySQL 실행하기 (0) | 2025.01.27 |
|---|---|
| Docker Volume (0) | 2025.01.27 |
| 현업에서 자주 사용하는 Docker CLI (이미지 편) (0) | 2025.01.25 |
| Docker의 전체 흐름(Nginx 설치 및 실행) (0) | 2025.01.25 |
| Docker란?(Container, Image) (0) | 2025.01.25 |