Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

미션: 내 컴퓨터에 개발자용 '작업실' 꾸미기

프로젝트 개요

코드가 "내 컴퓨터에서만" 돌아가는 문제를 줄이고, 팀원 누구나 같은 방식으로 실행, 배포, 디버깅할 수 있는 환경 구성

  • 핵심 도구 : CLI(Terminal), Docker, Git, Github

  • 목표 :

    • 터미널로 작업 디렉토리와 권한 관려
    • Docker를 설치, 점검하고 컨테이너 실행/관리
    • 웹서버를 Dockerfile로 컨테이너화, 포트 매핑, 접속 확인
    • 바인드 마운트/볼륨으로 "변경 반영", "데이터 영속성'을 검증
  • ⚠️ "왜 이런 설계가 필요한지"를 설명 가능한 형태로 정리

실행 환경

항목
OS macOS 15.7.7(24G720) 3.1 GHz 6코어 Intel Core i5
Shell / 터미널 /bin/zsh
Docker 28.5.2(orbstack)
Git 2.53.0
편집기 VSCode

⚠️ 본 미션은 관리자 권한이 없는 Mac에서 Docker Desktop 대신 OrbStack으로 수행

수행 항목 체크 리스트

  • OrbStack 환경 확인 → 로그 01
  • 터미널 기본 조작 (pwd/ls/cd/mkdir/cp/mv/rm/cat/touch) → 로그 02
  • 권한 실습 — 파일 1 + 디렉토리 1, 변경 전/후 비교 → 로그 03
  • Docker 설치/점검 (--version, info) → 로그 04
  • hello-world 실행 → 로그 04
  • ubuntu 컨테이너 진입 및 내부 명령, attach/exec 차이 관찰 → 로그 04
  • Dockerfile 직접 작성 → 커스텀 이미지 빌드/실행 → Dockerfile, 로그 05
  • 포트 매핑 접속 2회 (8080, 8081) → 로그 05 image01 image02
  • 바인드 마운트 변경 반영 → 로그 06
  • 볼륨 영속성 (컨테이너 삭제 전/후) → 로그 06
  • Git 설정 + GitHub/VSCode 연동 → 로그 07 image03 image04 image05
  • (보너스) Compose 멀티 컨테이너 + 네트워크 통신 + 환경 변수 → 로그 08
  • (보너스) Github SSH 키 설정 → 로그 09

파일 시스템 구조

mission-1/
├── README.md              # 본 문서
├── Dockerfile             # 직접 작성한 커스텀 이미지 정의
├── docker-compose.yml     # 보너스: web + redis 멀티 컨테이너
├── app/                   # 웹 서버 정적 콘텐츠
│   └── index.html
└── docs/
    ├── logs/              # 수행 로그 (명령어 + 출력)
    └── images/            # 접속/연동 스크린샷

재현 방법

git clone https://github.com/newids/codyssey-e1-1.git
cd codyssey-e1-1

# 커스텀 이미지 빌드 및 실행
docker build -t mission1-web:1.0 .
docker run -d -p 8080:80 --name mission1-web-8080 mission1-web:1.0
curl http://localhost:8080            # 또는 브라우저에서 접속

# 보너스: Compose로 실행
docker compose up -d
curl http://localhost:8083
docker compose down

검증 방법 요약 (무엇을 어떤 명령으로 확인했는가)

검증 대상 명령 확인 내용 증거
데몬 동작 docker info Server 버전/컨텍스트 응답 로그 04
설치 정상 docker run hello-world "Hello from Docker!" 출력 로그 04
컨테이너 수명 docker ps -a 비교 메인 프로세스 종료 = 컨테이너 종료 로그 04
이미지 빌드 docker build + docker images mission1-web:1.0 생성 로그 05
포트 매핑 curl × 2포트 8080/8081 모두 HTTP 200 로그 05
접속 화면 브라우저 페이지 렌더링 images/
마운트 반영 호스트 파일 수정 → curl v1 → v2 즉시 반영 로그 05
볼륨 영속성 rm -f 후 재연결 → cat 데이터 유지 확인 로그 06
Git 설정 git config --global --list user/defaultBranch 설정 로그 07
컨테이너 간 통신 nc -zv redis 6379 서비스 이름으로 연결 성공 로그 08

학습 정리 (과제 목표 6항목)

📌 절대 경로 vs 상대 경로

  • 절대 경로는 루트(/)부터 시작해 현재 위치와 무관하게 항상 같은 곳을 가리킨다: /Users/newids7705/Documents/codyssey-e1-1
  • 상대 경로는 현재 디렉토리 기준이다: ../..(두 단계 위), codyssey-e1-1/app
  • 실습 증거: 로그 02

📌 파일 권한 r/w/x와 755, 644 해석 규칙

  • 권한은 소유자(u)/그룹(g)/기타(o) 세 자리, 각 자리는 r(4)+w(2)+x(1)의 합.
  • 755 = rwxr-xr-x, 644 = rw-r--r--.
  • 디렉토리의 x는 진입(cd), w는 내부 파일 생성/삭제 권한 — chmod 500 상태에서 touch 실패로 직접 확인.
  • 실습 증거: 로그 03

📌 기존 Dockerfile 기반 커스텀 이미지

  • nginx:alpine 베이스에 LABEL/ENV/COPY/HEALTHCHECK를 추가해 커스텀 이미지를 빌드했다.
  • 이미지는 설계도, 컨테이너는 실행 인스턴스 — 같은 이미지로 8080/8081 두 컨테이너를 띄워 확인.
  • 증거: Dockerfile, 로그 05

📌 포트 매핑이 필요한 이유

  • 컨테이너는 격리된 네트워크 네임스페이스에서 동작하므로, -p host:container로 호스트 포트를 포워딩해야 외부에서 접속할 수 있다.
  • 호스트 포트만 바꾸면 같은 서비스를 여러 개 동시 실행할 수 있다 (8080/8081 실험).
  • 증거: 로그 05

📌 Docker 볼륨 (영속 데이터)

  • 컨테이너 쓰기 레이어는 컨테이너 삭제와 함께 사라지지만, 볼륨은 Docker 관리 영역에 독립적으로 존재한다.
  • 컨테이너를 rm -f로 삭제한 뒤 새 컨테이너에 같은 볼륨을 연결해도 데이터(persistent-hello)가 유지됨을 확인.
  • 증거: 로그 06

📌 Git vs GitHub 역할 차이

  • Git: 로컬에서 완결되는 분산 버전 관리 시스템 (커밋/브랜치/이력).
  • GitHub: Git 저장소를 호스팅하는 원격 협업 플랫폼 (PR/이슈/CI).
  • GitHub 없이도 Git은 동작하며, GitHub는 Git 기반 서비스 중 하나다.
  • 정리: 로그 07

📌 보안 및 개인정보

  • 문서/로그의 이메일은 <masked> 처리했고, 토큰·비밀번호·개인키는 어떤 로그에도 포함되지 않았다.
grep -rniE "ghp_|github_pat_|password|api[_-]?key|token|<내 이메일>" \
  README.md docs/ app/ Dockerfile
  • 커밋 전 git grep으로 ghp_, token, password 등 민감 패턴 부재를 확인했다.
git grep --cached -nE "ghp_[A-Za-z0-9]{36}|(token|password|secret|api[_-]?key)\s*[:=]"

About

E1-1 내 컴퓨터에 개발자용 '작업실' 꾸미기

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages