소켓
소켓(socket)은 운영체제에서 프로세스 간 통신을 위한 특수 파일입니다. 소켓을 통해 프로세스들은 서로 데이터를 주고받을 수 있습니다.
Docker의 경우, 도커 엔진은 /var/run/docker.sock
유닉스 소켓 파일을 통해 Docker 클라이언트와 통신합니다. 이 소켓 파일을 통해 Docker 클라이언트는 Docker 엔진에 명령을 전달하고 응답을 받습니다.
Jenkins 컨테이너에서 /var/run/docker.sock
를 호스트의 소켓과 공유하는 이유는 Jenkins 컨테이너 내부에서 Docker 클라이언트 역할을 하여 Docker 엔진에 명령을 내릴 수 있게 하기 위함입니다. 이렇게 하면 Jenkins 내에서 Docker 이미지 빌드, 컨테이너 실행 등의 작업을 수행할 수 있습니다.
소켓은 유닉스 계열 운영체제뿐만 아니라 Windows 등의 다른 운영체제에서도 프로세스 간 통신을 위해 사용됩니다. 프로그래밍에서 소켓은 네트워크 프로그래밍의 핵심 개념 중 하나입니다.
프로세스
프로세스(Process)는 운영체제에서 실행 중인 프로그램의 인스턴스를 말합니다. 프로그램이 메모리에 적재되어 실행되면 프로세스가 생성됩니다.
프로세스는 다음과 같은 특징을 가지고 있습니다:
- 메모리 영역: 코드, 데이터, 힙, 스택 등을 포함하는 독립적인 메모리 영역을 가집니다.
- 실행 환경: 프로세스 마다 독립된 실행 환경(CPU 레지스터, 스케줄링 정보 등)을 가지고 있습니다.
- 프로세스 ID(PID): 운영체제에서 프로세스를 유일하게 구분하기 위해 할당된 고유한 ID 값입니다.
- 리소스 할당: CPU 시간, 메모리, 파일, 네트워크 소켓 등의 시스템 자원이 할당됩니다.
- 상태 정보: 실행, 대기, 중지 등의 프로세스 상태 정보를 가지고 있습니다.
운영체제는 프로세스를 스케줄링하고 관리하여 여러 프로그램이 동시에 실행될 수 있게 합니다. 예를 들어, 텍스트 편집기, 웹 브라우저, 데이터베이스 서버 등은 각각 별도의 프로세스로 실행됩니다.
Docker 데몬도 하나의 프로세스입니다. Docker를 설치하면 Docker 데몬 프로세스가 백그라운드에서 실행되어 Docker 명령을 수신하고 처리합니다. 이 Docker 데몬 프로세스가 컨테이너를 생성하고 관리하는 역할을 합니다.
프로세스는 운영체제에서 작업을 실행하는 기본 단위이며, 자원 관리와 격리를 통해 여러 프로그램이 동시에 실행될 수 있게 해줍니다.