발전하는 춘배
[원고 / GCP, Docker, Code Server] GCP VM에 코드서버 띄우기 본문
GCP VM 인스턴스 생성
code-server로 사지방에서 코딩하기 - 1 (GCP 인스턴스 생성)
code-server로 사지방에서 코딩하기
velog.io
근데 여기서 너무 과한 걸 쓰는 거 같아서
e2-medium (vCPU 2개, 메모리 4GB)
저장용량 10GB 썼음. 한달에 30몇달러
아근데 무료크레딧 300달러라 아껴 쓰려고 이렇게 한거였는데 나중에 보니까 90일 기간도 있었음. 아 이래서 걍 가격 맞춰서 리소스 좋은 거 쓴거구나 쩝
code-server로 사지방에서 코딩하기 - 2 (docker로 code-server 실행)
code-server로 사지방에서 코딩하기
velog.io
도커 설치
]https://blog.dalso.org/google-cloud-platform-2/nas-project/8618
[GCP]VM(ubuntu OS) Docker 설치하기.(portainer 추가) - 달소씨의 하루
Google Cloud Platform을 이용한 NAS 시스템 구축 의 세번째 글입니다. 생각보다 빠르게 진행되고있네요. 물론, 지금까지는 어려운부분도 없는 기본셋팅 수준이였고 제대로 보여줄만한건 나오지 않았
blog.dalso.org
도커 쓴 이유: GPT형님이 (추천)해줌
1️⃣ Docker로 code-server 실행 (추천)
장점 👍
- 환경 재현성: VM 새로 만들어도 컨테이너만 다시 띄우면 동일 환경
- 관리 쉬움: 삭제 / 재설치 / 업그레이드 간단
- 포트 / 볼륨 관리 깔끔
- 나중에 Nginx, SSL, 다른 서비스랑 조합하기 쉬움
예시:
--name code-server \
-p 8080:8080 \
-v "$HOME/.config:/home/coder/.config" \
-v "$HOME/project:/home/coder/project" \
-e PASSWORD="yourpassword" \
codercom/code-server:latest
GCP에서는 보통:
- VM 생성
- Docker 설치
- 위 컨테이너 실행
- 방화벽 8080 오픈
하면 바로 접속 가능.
2️⃣ VM에 직접 설치
예:
장점 👍
- 설정이 단순
- Docker 모르는 사람에게 직관적
단점 👎
- 환경 망가지면 복구 어려움
- 패키지 충돌 가능
- 다른 서비스와 격리 안됨
접속

웹에서 외부IP/login으로 접속했더니 잘 된다.
근데 어케되는건지 궁금해져서 물어봄. 사실 도커를 처음 써보다보니 공부된 게 없어서 이거에 관한 이해 부족으로 인한 궁금증인 듯.
질문:
궁금한 게 있어. 도커랑 이 코드 서버가 구동되는 흐름이 이해가 잘 안 돼. 이해하기 쉽게 설명해 줄래?
지금 gcp의 /home/USER1/에는 code-server과 projects 폴더가 있고 code-server 안에는 config가 있고, projects 안에는 아무것도 없는 상황이야. 근데 왜 http://외부IP로 접속해서 vscode terminal을 띄워 보면 coder@5cf6e8601834:~/project로 경로가 되어 있는 건지 이해가 안됨
답변:
당신이 실행한 명령:
docker run -d \
--name code-server \
-p 80:8080 \
-v ~/projects:/home/coder/project \
-v ~/code-server/config:/home/coder/.config \
-e PASSWORD=비밀번호 \
codercom/code-server:latest
- -v ~/projects:/home/coder/project
→ 호스트의 ~/projects 폴더를 컨테이너의 /home/coder/project와 연결 - -v ~/code-server/config:/home/coder/.config
→ 호스트의 ~/code-server/config를 컨테이너의 /home/coder/.config와 연결
즉, 컨테이너 내부의 디렉토리는 실제로 호스트 디렉토리와 같은 공간을 가리키게 됩니다.
GCP VM Docker 컨테이너
/home/USER1/projects <-> /home/coder/project
/home/USER1/code-server/config <-> /home/coder/.config
- 왼쪽: VM 실제 파일 시스템
- 오른쪽: 컨테이너 내부
- docker run -v로 연결 → 동기화됨
그래서 컨테이너에서 아무 파일을 만들어도 호스트에 그대로 반영됩니다.
반대로 호스트에서 파일을 넣어도 컨테이너에서 바로 보입니다.
요약하면
- Docker 컨테이너 안에서는 독립된 파일 시스템이 있음
- -v 옵션으로 호스트 경로를 연결 → 동기화 공간 생성
- code-server는 컨테이너 안에서 /home/coder를 홈으로 사용
- 터미널 열면 /home/coder/project가 기본 경로
→ 실제 호스트에서는 ~/projects와 같은 곳
음 대충 이해가 된다.
도커 컨테이너 안에 파일 시스템이 따로 있고 실제 VM 파일 시스템이랑 일대일로 동기화되어있단 소리구나.
테스트를 해본다.

이렇게 만들면 컨테이너 내부의 /home/coder/project에 파일을 하나 추가했으니깐.. 거기 동기화되어있는 VM의 ~/projects에 파일이 추가되어있을 것이다.
USER1@instance-20260306-073209:~$ cat projects/test.txt
Hello World!!
오 도커 신기하다. 더 자세히는 알아보지 않기로 한다.
앞으로 개발할 땐 웹상에서 project 안에 project1, project2 .... 이런 식으로 디렉토리 추가해서 하면 될 것이다.
마지막으로 궁금한 거 하나 더 질문하고 마무리.
질문
잠깐, http://외부IP 로 접속했을 때, GCP VM의 80번 포트로 들어가게 되는 건가?
답변
맞아요, 딱 그게 핵심입니다. 👍
흐름을 단계별로 설명하면 이렇게 돼요:
1️⃣ 브라우저에서 접속
- 외부IP → GCP VM의 외부 IP (Compute Engine 인스턴스)
- 포트 기본값 → 80 (HTTP 기본 포트)
2️⃣ GCP VM 방화벽 확인
- GCP는 기본적으로 VM 포트가 막혀 있음
- 그래서 VPC → Firewall rules에서 TCP 80 포트 허용해야 접속 가능
3️⃣ Docker 컨테이너 포트 매핑
- 왼쪽(호스트): 80 → GCP VM 내부
- 오른쪽(컨테이너): 8080 → code-server 내부 포트
즉:
4️⃣ 결과
- 브라우저에서 http://외부IP → 컨테이너 안의 code-server 웹 페이지가 뜸
- 컨테이너 내부 터미널이나 /home/coder/project 경로도 그대로 유지
✅ 핵심 요약
- 브라우저 → VM 외부IP → VM 포트 80 → Docker 컨테이너 8080 → code-server
- -p 80:8080이 없으면 외부IP로 접속 불가
- GCP 방화벽에서 TCP 80 허용 필수
여기까지 이해완료.
