EC2 내에 Docker띄우기

장재영·2024년 12월 12일
0

ecs를 활용하여 데디서버를 생성해보기 위해 테스트를 진행하였고
테스트 결과 ecs를 이용해 인스턴스가 생성되는 것을 확인하였고
1인스턴스 = 1게임서버 형태로 서버가 만들어지는것을 확인하였다.

팀 내에 회의 결과
ecs를 배운다는 입장에서 활용해 보는 것도 좋을 거 같긴 하지만 시간 관계상 그리고 비용 문제로 테스트를 성공한 정도로 만족하고 ec2 인스턴스 내에서 도커를 띄우는 방향으로 가게되었다.


EC2 Docker 추가하기

  1. Node.js 설치(인스턴스)
    curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
    sudo apt-get install -y nodejs

yarn을 사용하였기에 yarn 설치
1. Yarn GPG 키 추가
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
2. Yarn 공식 리포지토리 추가
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
3. 패키지 리스트 업데이트
sudo apt update
4. Yarn 설치
sudo apt install yarn

  1. Docker 설치(인스턴스)
    sudo apt update
    sudo apt install -y docker.io
    sudo systemctl start docker
    sudo usermod -aG docker $USER

  2. Docker로 빌드한 이미지를 .tar파일로 저장(Docker)
    docker save -o dedicated-server.tar dedicated-server

  3. EC2에 tar파일로 저장(배쉬)
    scp -i /key.pem /dedicated-server.tar ubuntu@:/home/ubuntu/

  4. tar파일 EC2내 Docker에 이미지로 저장(인스턴스)
    docker load -i dedicated-server.tar

  5. EC2내 Docker 이미지 확인
    docker images


코드

  1. Docker 실행하기
  import { spawn } from 'child_process';
  
    const runProcess = spawn('docker', [
      'run',
      '-d',
      '--rm',
      '--name',
      containerName,
      '-e',
      `INVITE_CODE=${inviteCode}`,
      'dedicated-server', //띄울 Docker 이미지 명
    ]);
  1. 띄운 Docker 서버에서 포트번호 송신
tcpServer.listen(3000, config.server.tcpHost, () => {
      console.log(`새로운 게임이 포트 ${tcpServer.address().port}에 생성`);
      console.log(tcpServer.address());

      const roomServer = net.connect({ host: '172.17.0.1', port: 6666 }, () => {
        console.log('발송');
        roomServer.write(
          JSON.stringify(`${inviteCode}:${tcpServer.address().port}`),
        );
      });
    });
  • EC2 인스턴스 내 Docker를 실행한 호스트 서버의 ip는 172.17.0.1로 기본 브릿지 설정이 되어있음
  • 윈도우 에서는 host.docker.internal로 사용
profile
개발 하고 싶은 비버

0개의 댓글