하나의 홈 서버를 구축해서 사용하려고 하는데 친구도 같이 쓰고 싶다고 해서 포트를 열어주고 개인 디렉터리를 설정해 작업할 수 있도록 한 상태이다. 작업하면서 설정관련해 겹치거나 권한 부족으로 인해 요청하는 게 귀찮?고 불편했음.... 그래서 하나의 서버에서 개별 서버를 운영하는 것처럼 하기 위해 자료를 찾아보다가 docker의 ubuntu 컨테이너를 사용해 개별 서버처럼 사용할 수 있다는 글을 보고 환호를 지르며, 이에 대한 포스팅을 하려고 한다.
출처: https://xo.dev/articles/setup-virtual-environment-for-guests-with-docker
감사합니다~ ㅎ
이제부터 시작!!!
우선 ubuntu 이미지를 pull 한다.
// 지금 사용하는 버전과 같은 버전을 사용하기 위해 ubuntu 22.04 버전을 사용했다.
# docker pull ubuntu:22.04
// ssh와 web으로 접근하기 위해 22, 80, 443번 포트를 열어줘야 하는데 host의 포트를 그대로 사용할 수 없기 때문에 내가 원하는 임의의 포트로 바인딩해주었다.
# docker run -dit -p xxx22:22 -p xxx80:80 -p xx443:443 --name [컨테이너명] ubuntu:22.04
// 이제 컨테이너에 접속해서 추가적인 설정을 해야 하기 때문에 컨테이너로 접속해 준다.
# docker exec -it [컨테이너명] bash
이때부터는 현재 사용하고 있는 ubuntu 서버를 시작했을 때, 했던 걸 다시 해준다고 생각하면 된다.
// 패키지 매니저를 업데이트해 주고 vim과 openssh-server 패키지를 설치해 준다.
# apt-get update
# apt-get install vim openssh-server
// ubuntu container로 접속할 새로운 사용자를 생성해 준다.
# useradd [계정ID]
// 사용자 계정의 비밀번호를 변경하고, 이를 통해 ubuntu container에 접속할 예정이다.
# passwd [계정 ID]
// 이후 하라는 대로 비밀번호를 설정하면 된다.
// ssh로 접속할 수 있도록 sshd_config의 설정값을 변경해 준다.
# vim /etc/ssh/sshd_config
// sshd_config의 가장 아래에 아래와 같이 설정을 추가해 주면 된다.
// Match User [계정 ID]
// AllowTcpForwarding no
// X11Forwarding no
// ssh 서버를 실행해서 ssh로 접근할 수 있도록 해준다. 그럼 이제 사용자는 ssh root@[ip주소] -p xxx22로 ubuntu container에 접속할 수 있다.
# service ssh start
위 작업에서 기존에 사용했던 systemctl을 사용해 openssh-server를 시작하려고 했으나...
container에서는 systemctl을 사용할 수 없다고 한다. 그래서... service를 사용하시면 됩니다!!!!
이제 끝...인 줄 알았으나...
진짜 마지막으로 해당 container로 접속할 수 있도록 포트포워딩을 해주어야 한다.
위에서 ssh접속 기본 포트인 22번 포트를 xxx22에 바인딩했으므로
# sudo ufw allow xxx22/tcp
해당 포트를 허용해 준다.(공유기에서도 해당 포트를 포트포워딩을 설정해주어야 한다.)
아래의 명령어로 terminal에서 ssh 접속을 시도하면 이제 진짜진짜로 접속이 되는 것을 확인할 수 있다.
# ssh -p [공유기에서 포트포워딩 해준 포트] [계정 ID]@[ip 또는 도메인]