* 이전 글에 이어지는 내용 입니다.
아래 링크를 먼저 확인하세요.
- AWS EC2, docker를 활용한 ubuntu18.04 개발환경의 구축
🏁 목표
- 이전 글에서 AWS EC2에 docker를 설치 해 ubuntu18.04 환경을 구축하는 데까지 알아보았습니다.
- 이번에는 이렇게 구축한 ubuntu18.04 환경을 Local 컴퓨터의 VS Code에서 실행할 수 있도록 설정하는 방법에 대해 알아봅시다.
이전 글에서 설명 했듯이,
아래 내용을 통해 우리는 위와 같은 형태의 개발 환경을 구축합니다.
본인이 사용 중인 EC2 에 Docker를 설치하고, 여기에 Ubuntu18.04 이미지를 이용해 컨테이너를 적재합니다.
우리는 딱 ‘버전 이슈(종속성 에러)의 방지’를 위해 Docker를 통해 Ubuntu18.04 환경을 이용할 뿐 입니다.
- 이번 글에서는 EC2 내 Docker 안에서 돌고있는 Ubuntu18.04 컨테이너에 ssh 연결을 위해 포트 번호를 부여한 뒤 포트를 열어주고,
포트 포워딩 (Port Forwarding)을 이용 해 클라이언트로부터 특정 포트 번호로 요청이 들어오면 이를 통해 컨테이너로 원격 연결이 가능하도록 해주는 방법론을 담았습니다.
우선, 첫 번째로 할 일은 EC2 환경에서 dockerfile을 수정해주는 일 입니다.
본인 EC2에 접속 해 줍니다.
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
dockerfile
을 수정하고 새로 빌드할 것이기 때문에, 이미 빌드한 'ubuntu18.04' 컨테이너가 있을 경우, 이를 중지 하고 삭제 해 줍니다.sudo docker stop -d --name ubuntu18.04 ubuntu18.04
sudo docker rm ubuntu18.04
ubuntu18.04
디렉토리가 존재 할 겁니다.cd ~
cd ubuntu18.04
dockerfile
문서가 존재할 겁니다. (ls
명령어로 확인할 수 있습니다.)dockerfile
을 nano 편집기에서 열어줍니다.nano dockerfile
nano 편집기가 설치가 안되어 있어 열리지 않는 경우,
sudo apt install nano
명령어를 입력 해 설치 해 준 후 열어주면 됩니다.
이전 글을 그대로 따라오신 분들이라면, 아마 아래와 같은 내용이 들어가 있을 겁니다.
# Ubuntu 18.04 이미지를 베이스로 사용
FROM ubuntu:18.04
# apt 패키지 목록 업데이트 및 기본 패키지 설치
RUN apt-get update && apt-get install -y \
curl \
vim \
git \
sudo \
net-tools \
iputils-ping \
locales \
&& apt-get clean
# 로케일 설정 (UTF-8 로케일 설정)
RUN locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# 사용자 {사용자 이름} 추가 및 sudo 권한 부여
RUN useradd -ms /bin/bash 여기 사용자 이름 && adduser 여기 사용자 이름 sudo
# root 비밀번호 변경 (원하는 비밀번호로 변경)
RUN echo "root:여기 원하는 패스워드" | chpasswd
# {사용자 이름}의 사용자 비밀번호 변경 (원하는 비밀번호로 변경)
RUN echo "여기 사용자 이름:여기 원하는 패스워드" | chpasswd
# 홈 디렉토리로 워킹 디렉토리 설정
WORKDIR /home/여기 사용자 이름
# {사용자 이름}으로 스위치하여 bash 사용
USER 여기 사용자 이름
# 컨테이너 종료 방지: 무한 대기 프로세스 실행(docker는 컨테이너 내부에서 돌아가는 프로세스가 없으면 스스로 컨테이너 종료 시킴, 따라서 무한대기 프로세스 생성)
CMD ["tail", "-f", "/dev/null"]
ssh
연결을 위해 22번 포트를 열어주는 내용이 추가 되었습니다.# Ubuntu 18.04 이미지를 베이스로 사용
FROM ubuntu:18.04
# apt 패키지 목록 업데이트 및 기본 패키지 설치
RUN apt-get update && apt-get install -y \
curl \
vim \
git \
sudo \
net-tools \
iputils-ping \
locales \
openssh-server\
&& apt-get clean
# 로케일 설정 (UTF-8 로케일 설정)
RUN locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# 사용자 {사용자 이름} 추가 및 sudo 권한 부여
RUN useradd -ms /bin/bash 여기 사용자 이름 && adduser 여기 사용자 이름 sudo
# root 비밀번호 변경 (원하는 비밀번호로 변경)
RUN echo "root:여기 원하는 패스워드" | chpasswd
# {사용자 이름}의 사용자 비밀번호 변경 (원하는 비밀번호로 변경)
RUN echo "여기 사용자 이름:여기 원하는 패스워드" | chpasswd
# SSH 서버 설정
RUN mkdir /var/run/sshd
RUN echo 'choiminkyu ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# SSH 접속 시 비밀번호 인증을 허용하도록 설정
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/ss>
# 홈 디렉토리로 워킹 디렉토리 설정
WORKDIR /home/여기 사용자 이름
# 포트 22를 열어 SSH 접속 허용
EXPOSE 22
# SSH 서버 실행 및 컨테이너 종료 방지: 무한 대기 프로세스 실행
CMD ["/usr/sbin/sshd", "-D"]
수정이 끝났다면, ctrl+x
를 누르고 Y
를 누르고 enter
해 줍니다.
이렇게 하면, ssh
연결을 위한 dockerfile
준비는 끝났습니다.
우리는 포트 포워딩(Port Forwarding)을 이용 해 외부로부터 특정 포트 번호로 요청을 받아 이를 EC2 내 docker 위에서 돌아가고 있는 ubuntu18.04 컨테이너로 연결 해 줄 것 입니다.
이 때, 한 가지 고려해야 할 사항이 있습니다. Amazon에서 제공하는 EC2 서비스는 보안을 위해 사용자가 설정해주지 않는 한 접근을 차단하고 있습니다.
EC2에서 우리가 이용 할 포트 번호를 보안 그룹 설정에서 열어주어야 합니다.
크게 어렵지 않습니다.
EC2 페이지에서 본인이 사용 중인 인스턴스 화면으로 들어가 줍니다.
https://ap-northeast-2.console.aws.amazon.com/ec2/home
보안
탭에서 위와 같이 보안 그룹
링크를 클릭 해 접근 해 줍니다.인바운드 규칙 편집
을 클릭 해 줍니다.규칙 추가
버튼을 클릭하고, 포트 범위에 원하는 포트 번호
를 적어 주시면 됩니다. 0~65535 숫자를 입력 해 주시면 되는데, 낮은 포트 번호일 수록 시스템이 사용 중일 수 있으니 랜덤한 수를 추천 드립니다.다시 쉘 화면으로 돌아옵시다. EC2에 연결된 상태 이어야 합니다.
수정된 dockerfile을 기반으로, ubuntu18.04 컨테이너를 다시 빌드 합니다.
sudo docker build -t ubuntu18.04
sudo docker run -d -p {설정한 포트번호}:22 --name ubuntu18.04 ubuntu18.04
ex) 만약, 설정한 포트 번호가 4987 이라면
sudo docker run -d -p 4987:22 --name ubuntu18.04 ubuntu18.04
이렇게 포트포워딩까지 설정 해 컨테이너를 시작했다면, 이제 연결 과정은 사실상 끝났습니다.
로컬 컴퓨터(본인 컴퓨터)에서 VS Code를 열어 줍시다.
Ctrl+Shift+P
단축키를 입력하거나, 화면 상단의 검색
창을 클릭 하고, >Remote-SSH:호스트에 연결
을 접근 해 줍니다.
SSH 호스트 구성
을 클릭해주고, 아래와 같이 C:\Users\user\.ssh\config
에 접근 해 줍니다.
해당 문서에 아래와 같은 내용을 추가하고 저장합니다.
다시 상단의 검색 창을 열어주고, >Remote-SSH:호스트에 연결
을 클릭 합니다.
ubuntu18.04
탭이 위와 같이 생겼을 겁니다. 이 탭을 클릭 하고, dockerfile
을 작성하며 썼던 패스워드를 입력 해 원격 연결을 할 수 있게 됩니다.
* 리눅스 환경에서의 ssh_config 문서
- ubuntu 환경에서 루트 디렉토리
/
경로로 간 다음,
/etc/ssh
디렉토리로 들어가면 ssh_config 문서를 확인할 수 있습니다.
- 시작 폴더에서 상위로 두 디렉토리 나간 다음,
etc/ssh
폴더에서ls
명령을 내리면 위와 같이ssh
와 관련된 문서들을 확인할 수 있습니다.// cat 명령으로 ssh_config 문서의 내용을 확인 해보자. cat ssh_config
- 아래와 같이 이 문서에서 ssh와 관련된 설정들을 관리할 수 있습니다.