인프라/docker

Postgresql Docker 컨테이너에서 부팅 시 SSH 서비스 자동 실행 방법

nix-be 2024. 4. 24. 10:44
728x90

Dockerfile을 사용하여 SSH 서버를 포함하는 이미지를 만들고, 컨테이너 시작 시 SSH 서비스가 실행되도록 구성해야 합니다.

 

docker window 설치 후 진행

1단계: Dockerfile 생성 및 설정

  1. Dockerfile 작성: 아래는 SSH 서비스를 포함하는 기본 Dockerfile 예시입니다. 이 Dockerfile은 Ubuntu를 기반으로 하지만, 필요에 따라 다른 베이스 이미지를 사용할 수 있습니다.
FROM postgres:latest

RUN apt-get update && apt-get install -y vim && apt-get install -y net-tools

RUN apt-get install -y openssh-server

# SSH를 위한 디렉토리 생성
RUN mkdir /var/run/sshd

# root 사용자를 위한 비밀번호 설정 (여기서는 'your_password'를 사용자의 비밀번호로 변경)
RUN echo 'root:qwe123!@#' | chpasswd

# root 로그인 허용 (실제 운영 환경에서는 보안을 위해 비권장)
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH 서버가 데몬 모드로 실행되지 않도록 설정 (Docker에서 권장)
RUN sed -i 's/.*UsePAM.*/UsePAM no/' /etc/ssh/sshd_config

# SSH 및 PostgreSQL 서비스 실행
CMD /usr/sbin/sshd && docker-entrypoint.sh postgres

2단계 docker-compose.yml 파일

version: "3.9"
services:
  db:
    build:
      context: .
      dockerfile: Dockerfile
    platform: linux/x86_64 #(필요한 경우에만 포함)
    restart: always
    ports:
      - "5432:5432"
      - "2222:22"
    environment:
      POSTGRES_PASSWORD: qwe123!@#
      POSTGRES_DB: testdb
      POSTGRES_USER: user
      TZ: Asia/Seoul
    volumes:
      - ../db/postgres/data:/var/lib/postgresql/data

3단계 docker-compose 명령어로 실행

//명령어 실행 경로 : C:\dockerfile
docker-compose -f .\docker-compose.yml up -d

4단계 확인

//ssh 접근
127.0.0.1:2222 

// postgres 접근
root@68f2b794b3d9:~# psql -U user testdb
psql (16.2 (Debian 16.2-1.pgdg120+2))
Type "help" for help.

testdb=# \\du
                             List of roles
 Role name |                         Attributes
-----------+------------------------------------------------------------
 user      | Superuser, Create role, Create DB, Replication, Bypass RLS

testdb=# \\list
testdb=# exit
root@68f2b794b3d9:~# postgres -v
-bash: postgres: command not found

728x90