도커 컨테이너간 ssh 간단하게 연결하기

gnswp21·2024년 2월 25일
post-thumbnail

우분투 이미지에 ssh 설치 및 공통 설정하기

## 우분투이미지로부터 시작한다.
docker run --name tempContainer -it ubuntu /bin/bash
  • 생성된 컨테이너에서 ssh 설정 수정, hostname 추가
## ssh config
apt update
apt install openssh-server openssh-client -y

## ssh key 설정
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

## add ip to hostname
echo "[container 1의 정적 ip] container1" >> /etc/hosts
# ex)echo "172.20.255.10 container1" >> /etc/hosts
echo "[container 2의 정적 ip] container2" >> /etc/hosts
# ex)echo "172.20.255.101 container2" >> /etc/hosts

정적 ip는 컨테이너 생성 시에 인자로 추가하거나, 후술할 도커 컴포즈에서 지정할 수 있다.

  • 위 임시 컨테이너를 이미지로 커밋해준다.
exit
docker commit tempContainer ssh_base 

도커 컴포즈에서 정적 ip 할당된 컨테이너 만들기

  • dockercompose.yml
version: "3"

services:
  namenode:
    image: ssh_base # 앞서 도커 커밋으로 만든 이미지를 사용한다.
    container_name: container1
    hostname: container1
    command: bash -c "service ssh start && tail -f /dev/null" # 컨테이너가 바로 종료되지 않게 해준다.
    networks:
      my-net:
        ipv4_address: [원하는 고정 IP 주소1] # ex) 172.20.255.10

  workernode:
    image: ssh_base
    container_name: container2
    hostname: container2
    command: bash -c "service ssh start && tail -f /dev/null"
    networks:
      my-net:
        ipv4_address: [원하는 고정 IP 주소2]   # ex) 172.20.255.101

networks:
  my-net:
    ipam:
      driver: default
			config:
        - subnet: [원하는 고정 IP 서브넷] # ex) 172.20.0.0/16
# 도커 컴포즈를 작성한 디렉토리에서
docker-compose -f dockercompose.yml up

SSH 연결

  • 컨테이너1 → 컨테이너2
## host 터미널
docker exec -it container1 /bin/bash

## -> container bash shell
## ssh 연결 확인
ssh root@container2
# yes # 첫 연결시에만 입력해주면 된다.

## -> container2 bash shell
hostname
#contaienr2 # 성공!
# 나가려면 exit을 입력
  • 컨테이너2 → 컨테이너1
## host 터미널
docker exec -it container21 /bin/bash

## -> container bash shell
## ssh 연결 확인
ssh root@container1
# yes # 첫 연결시에만 입력해주면 된다.

## -> container2 bash shell
hostname
#contaienr1 # 성공!
# 나가려면 exit을 입력

0개의 댓글