null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
임베디드 개발자를 위한 네트워크 기초 — IP 주소부터 PHY 레지스터까지
Structure
ip-addressing
•
공인 IP, 사설 IP, 그리고 NAT가 존재하는 이유
•
고정 IP vs 유동 IP — DHCP의 동작 원리
•
네트워크 클래스 — IP 주소를 나누는 논리
•
서브넷 마스크와 게이트웨이 — 네트워크를 쪼개는 방법
•
CIDR 표기법 — /24가 의미하는 것
•
DNS — 이름을 IP로, IP를 이름으로
mac-transmission
•
MAC 주소와 OUI — 하드웨어 식별의 기초
•
유니캐스트, 멀티캐스트, 브로드캐스트 — 전송 방식의 선택
•
멀티캐스트 MAC 주소 — IP에서 MAC으로의 변환 원리
•
VLAN — 하나의 스위치에서 여러 네트워크 분리하기
port-and-layer
•
포트(Port) — 하나의 IP에서 수천 개의 통신 채널을 분리하는 법
•
PDU — 프레임, 패킷, 세그먼트의 차이
•
OSI 7계층 vs TCP/IP 모델 — 두 모델이 공존하는 이유
physical-layer
•
NIC와 PHY — 임베디드 이더넷 하드웨어 구조
•
MDC/MDIO — PHY 레지스터를 제어하는 2-Wire 인터페이스
•
NLP, FLP, Auto-negotiation — PHY가 링크를 협상하는 방법
•
Extended Register — Clause 22의 32개 제한을 넘는 법
•
"Docker 기초 — 컨테이너의 모든 것"
•
Store-and-Forward vs Cut-through
wireshark-debug
•
Wireshark에서 IP Checksum이 0인 이유
•
"Docker Compose — 멀티 컨테이너 오케스트레이션"
•
FCS/CRC와 Wireshark의 4바이트 미스터리
•
"TypeScript 기초 — JavaScript에 타입을 더하다"
•
임베디드 이더넷 디버깅 — Wireshark 실전 사용법
Flow Structure
Extended Register — Clause 22의 32개 제한을 넘는 법
18 / 24
Store-and-Forward vs Cut-through
☆ Star
↗ Full
"Docker 기초 — 컨테이너의 모든 것"
#docker
#container
#devops
#인프라
@devpc
|
2026-05-05 15:44:42
|
GET /api/v1/flows/23/nodes/418?fv=2&nv=2
Context:
Flow v2
→
Node v2
0
Views
1
Calls
## Docker란? Docker는 **컨테이너** 기술을 기반으로 애플리케이션을 격리된 환경에서 실행하는 플랫폼이다. ### 가상머신 vs 컨테이너 | 항목 | 가상머신 (VM) | 컨테이너 | |------|-------------|---------| | 부팅 시간 | 분 단위 | 초 단위 | | 리소스 | OS 전체 포함 (수 GB) | 앱 + 라이브러리만 (MB) | | 격리 수준 | 하드웨어 수준 | 프로세스 수준 | | 이식성 | 낮음 | 매우 높음 | 핵심 차이: VM은 OS 전체를 가상화하지만, 컨테이너는 **호스트 OS 커널을 공유**하면서 프로세스만 격리한다. --- ## 핵심 개념 ### 이미지 (Image) 컨테이너 실행에 필요한 **불변 스냅샷**. 코드, 런타임, 라이브러리, 환경변수를 포함. ``` Docker Hub (레지스트리) ↓ pull 이미지 (Image) ↓ run 컨테이너 (Container) — 실행 중인 이미지 ``` ### Dockerfile 이미지를 빌드하는 **레시피** 파일. ```dockerfile # 베이스 이미지 FROM python:3.11-slim # 작업 디렉토리 설정 WORKDIR /app # 의존성 먼저 복사 (레이어 캐시 활용) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 소스 복사 COPY . . # 포트 노출 EXPOSE 8000 # 실행 명령 CMD ["python", "main.py"] ``` **레이어 캐시 팁**: `COPY requirements.txt` → `RUN pip install` 순서로 작성하면, 소스 변경 시에도 의존성 설치 레이어를 캐시에서 재사용한다. --- ## 필수 명령어 ```bash # 이미지 빌드 docker build -t myapp:latest . # 컨테이너 실행 docker run -d -p 8000:8000 --name myapp myapp:latest # -d : 백그라운드(detach) # -p 호스트:컨테이너 포트 매핑 # 실행 중인 컨테이너 목록 docker ps # 로그 확인 docker logs myapp -f # 컨테이너 내부 접속 docker exec -it myapp /bin/bash # 컨테이너 중지 & 삭제 docker stop myapp && docker rm myapp # 이미지 목록 & 삭제 docker images docker rmi myapp:latest ``` --- ## 볼륨 (Volume) 컨테이너는 종료 시 데이터가 사라진다. **볼륨**으로 호스트와 데이터를 공유·영속화. ```bash # 호스트 디렉토리 마운트 docker run -v $(pwd)/data:/app/data myapp # named volume (Docker가 관리) docker run -v mydata:/app/data myapp ``` --- ## 환경변수 ```bash docker run -e DATABASE_URL=postgresql://... myapp # .env 파일 사용 docker run --env-file .env myapp ``` --- ## 실습: Hello World부터 웹 앱까지 ```bash # 1. nginx 이미지 실행 docker run -d -p 8080:80 nginx # → http://localhost:8080 접속 # 2. Python 스크립트 일회성 실행 docker run --rm python:3.11-slim python -c "print('Hello Docker')" # 3. 인터랙티브 Ubuntu 쉘 docker run -it --rm ubuntu bash ``` --- ## .dockerignore `.gitignore`처럼 빌드 컨텍스트에서 제외할 파일 목록. ``` .git __pycache__ *.pyc .env node_modules ``` ## 정리 - **이미지** = 불변 템플릿, **컨테이너** = 이미지의 실행 인스턴스 - `Dockerfile` → `docker build` → 이미지 → `docker run` → 컨테이너 - 레이어 캐시를 활용하면 빌드 속도가 크게 향상됨 - 볼륨으로 데이터 영속화, 환경변수로 설정 분리
Extended Register — Clause 22의 32개 제한을 넘는 법
Store-and-Forward vs Cut-through
// COMMENTS
Newest First
ON THIS PAGE
No content selected.