SMAIVNN
article thumbnail
Published 2023. 7. 26. 16:43
[Docker] docker 개념 잡기, 명령어 Infra

해당 게시글은 위키북스의 <따라하며 배우는 도커와 CI 환경, 안재원 지음>을 바탕으로 작성 되었습니다.

도커란?

어떤 프로그램을 내려받는 과정을 간단하게 만들기 위한 것이다.

 

프로세스 격리 기술들을 사용해 컨테이너라는 유닛을 기반으로 실행하고 관리하며 환경에 구애받지 않고 애플리케이션을 배포, 확장할 수 있다.

 

컨테이너란?

도커 컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위다.

 

이미지란?

도커 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지다.

 

즉, 도커 이미지가 프로그램을 실행하는 데 필요한 설정이나 종속성을 갖고 있고, 이런 이미지를 이용해 컨테이너를 생성하는 것. 그리고 생성한 도커 컨테이너를 이용해서 프로그램을 실행한다.

 

도커의 실행 흐름

  1. 도커 클라이언트(CLI)에 원하는 명령을 위한 명령어를 입력한다.
  2. 도커 서버(도커 데몬)가 도커 클라이언트에 입력한 명령어를 전달받으면 명령어에 따른 이미지를 생성하고, 컨테이너를 실행합니다. 그리고 해당 컨테이너에서 애플리케이션을 실행한다.

ex)

만약 클라이언트가 서버로 a를 요청하면 서버는 로컬에 a가 있는지 확인한다.

없다면 이미지가 저장된 도커 허브에서 a의 이미지를 가져오고 로컬에 보관한다. 이 이미지를 이용해 컨테이너를 생성하고. 실행한다.

 

정리

도커 컨테이너는 한 장비에 여러 어플리케이션을 구동하기 위한 인프라 가상화 기능을 지원하는 것일 뿐이고(단위), 사실은 도커 이미지에 존재하는 이 base image 덕분에 인프라 환경에 구애받지 않고 프로그램이 실행될 수 있는 것이다.

 

도커 이미지를 실행하면 도커 컨테이너가 만들어지고 해당 컨테이너에 이미지의 파일 스냅샷이 옮겨진 후 컨테이너가 도커 엔진에 의해 실행되면서 Dockerfile에 정의된 프로그램 시작 명령어가 실행되며 프로세스가 host OS 위에서 구동된다.

 

기본적인 명령어

도커 컨테이너 실행하기

docker run <이미지 이름>

도커 이미지 이름 뒤에 명령어를 추가하면 원래 이미지 안에 있던 컨테이너의 실행 시 작동 명령어를 무시하고 추가한 명령어를 실행한다.

docker run <이미지 이름> <명령어>

컨테이너(이미지) 내부 파일 구조 보기. 어떤 파일이 있는지 보여준다.

docker run <이미지 이름> ls

현재 어떤 컨테이너가 실행 중인지 나열한다.

docker ps

CONTAINER ID 컨테이너의 고유한 아이디 해시값. 실제로는 더 길고 일부만 출력된다.

IMAGE 컨테이너 생성 시 사용한 도커 이미지 이름.

COMMAND 컨테이너 시작 시 실행될 명령어. 대부분 이미지에 내장돼 있으므로 별도 설정 필요하지 않음.

PORTS 컨테이너가 개방한 포트와 호스트에 연결한 포트. 특별한 설정 하지 않으면 출력되지 않는다.

NAMES 컨테이너의 고유한 이름. 컨테이너 생성시 이름을 설정하지 않으면 도커 엔진이 임의로 설정한다. 중복 안됨.

 

원하는 항목만 나열하기

docker ps --format 'table {{.Names}} \\t table {{.Images}}'

모든 도커 컨테이너 나열하기

docker ps -a

도커 컨테이너의 생명 주기

생성(create) → 시작(start) → 실행(running) → (멈추고 싶다면) 중지(stop) → (앞으로 안쓴다면) 삭제(delete)

 

도커 컨테이너 생성하고 실행하기

docker run <이미지 이름> = docker create <이미지 이름> + docker start <컨테이너 아이디/이름>

 

docker run <이미지 이름> 엄밀히 말하면 create이후 start가 실행되는 과정이다.

 

docker create <이미지 이름> <이미지 이름> 안에있는 파일들이 도커 컨테이너의 하드디스크로 다운로드 된다.

 

docker start <컨테이너 아이디/이름> 도커 이미지 안에 있던 시작 지 실행할 명령어가 컨테이너 안에서 작동되면서 애플리케이션이 실행된다. 이때 유의할 점은docker start -a <컨테이너 아이디/이름> 과 같이 -a (attach) 옵션을 붙여줘야 입력 받은 내용을 터미널에서 볼 수 있다.

도커 컨테이너 멈추기

진행중인 프로세스를 정리하고 마치기.

docker stop <컨테이너 ID/이름>

즉시 프로세스 멈추고 도커 컨테이너 종료하기

docker kill <컨테이너 ID/이름>

도커 컨테이너 삭제하기

컨테이너 삭제를 위해서는 컨테이너가 중지된 상태여야 한다.

docker rm <중지할 컨테이너 ID/이름>

중지된 모든 컨테이너 삭제하기

docker rm `docker ps -a -q`

도커 이미지 삭제하기

docker rmi <이미지id>

사용하지 않는 데이터 삭제하기. 중지된 모든 컨테이너와 네트워크, 이미지 등이 삭제되며 삭제된 목록, 확보한 공간의 사이즈를 알려준다.

docker system prune

실행중인 컨테이너에 명령어 전달하기

이미 실행중인 컨테이너에 명령어를 전달한다.

docker exec <컨테이너 ID> <명령어>

예를들어 컨테이너 ID a5f6ff84bb4가 실행중일때 이 컨테이너의 내부를 보고싶다면 docker exec a5f6ff84bb4 ls를 하면 된다.

 

실행 후 명령어 지속하기

docker exec -it <컨테이너 ID> <명령어>

-it 옵션을 적어줘야 명령어를 지속할 수 있다.

-i interactive -t terminal로 둘의 합임.

 

만약 실행중인 컨테이너에 이렇게 하나하나 명령어를 적으면 너무 번거로움. 그래서 한번에 쉘 환경으로 접속할 수 있음. 명령어에 sh를 사용하면 된다. 만약 새로 생성하는 컨테이너에 쉘 환경으로 접속하기 위해서는 exec대신 run을 쓴다.

docker exec -it <컨테이너 ID> sh
docker run -it <컨테이너 ID> sh

ctrl+D를 통해서 쉘 환경을 벗어난다.

'Infra' 카테고리의 다른 글

[Docker] compose, 개발과 운영 환경  (0) 2023.07.31
[Docker] 이미지와 volumn  (0) 2023.07.26
[AWS] aws 리소스 개념 잡기  (0) 2023.05.15
profile

SMAIVNN

@SMAIVNN

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!