DevOps/Docker

[Docker] Container

jjuya 개발 기록 2024. 8. 6. 20:08

컨테이너 생성

  • 이미지를 바탕으로 컨테이너 생성
  • 실행시키지는 않음
  • 생성만 하고 생성하고 실행시키지 않는 경우는 없으므로 잘 사용하지 않는다
  • 다운로드한 이미지가 없을 경우 ( 다운로드하여서 컨테이너 생성함 )
# 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로 종료할 수 있음

 

개념 정리

💡 포그라운드(Foreground)
- 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태
- 다른 프로그램을 조작할 수가 없음

💡백그라운드(Background)
- 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태
- 프로그램이 어떻게 실행되고 있는 지에 대한 정보를 화면에서 확인할 수 없음

$ docker run nginx 를 실행할 경우 포 그라운드에서 실행이 된다.

실행되는 내용이 눈에 바로 보이는 장점이 있지만 다른 명령어를 조작 할수가 없다! 

다시 ctrl + c눌러서 빠져나온 후 백그라운드에서 실행시켜 볼 수 있다

 

컨테이너 백그라운드에서 실행

# 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번 포트로 연결하도록 설정한다.

 

 

 

컨테이너 조회

실행중인 컨테이너 조회

$ docker ps
  • ps : process status의 약자

 

모든 컨테이너 조회 

  • 작동중인 컨테이너 + 중지된 컨테이너 모두 조회
$ docker ps -a
  • -a : all의 약자

 

컨테이너 중지

  • 대부분의 상황에서 stop으로 종료 시키기!
$ 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)

 

 

컨테이너 로그 조회

특정 컨테이너의 모든 로그 조회

# 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
  • -f : follow의 약어

 

기존 로그는 조회하지 않기 + 생성되는 로그를 실시간으로 보고 싶은 경우

$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]

 

 

실행중인 컨테이너 내부에 접속하기 (exec -it)

# docker exec -it 컨테이너명[또는 컨테이너 ID] bash

$ docker run -d nginx
$ docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
$ ls # 컨테이너 내부 파일 조회
$ cd /etc/nginx 
$ cat nginx.conf
  • 컨테이너 내부에서 나오기 : exit / ctrl + d
  • bash : 쉘(shell)의 일종
  • -it : 명령어를 입력하고 결과를 확인할수 있다
  • 적지 않으면 명령어 한번 실행시키고 종료해버림