김무영-1
생활코딩 Docker 입문수업 - 1. 수업소개 → Docker가 왜 필요한가?
생활코딩 Docker 입문수업 - 2. 설치 → Docker 설치 방법
생활코딩 Docker 입문수업 - 3. 이미지 pull → 도커 핵심 용어 / Apache 웹 서버 실행
생활코딩 Docker 입문수업 - 4. 컨테이너 run → 컨테이너 생성 및 관리
생활코딩 Docker 입문수업 - 5. 네트워크 → 웹 서버 동작 방식 / Docker를 이용한 웹 서버 운영
생활코딩 Docker 입문수업 - 6. 명령어 실행 → 웹서버의 index.html 파일을 수정해 웹 페이지 내용 변경
생활코딩 Docker 입문수업 - 7. 호스트와 컨테이너의 파일시스템 연결 → 호스트 파일을 컨테이너에 반영
도커 한방에 정리 🐳 (모든 개발자들이 배워보고 싶어 하는 툴!) + 실습 → Docker vs VM
생활코딩 Docker 입문수업 - 1. 수업소개
핵심 주제: 왜 Docker(도커)가 필요한가?
1. 기존 개발 환경의 불편함
애플리케이션 개발을 위해서는 웹 서버, 데이터베이스 등의 여러 소프트웨어 설치가 필요함.
설치 과정이 복잡하고 오류가 자주 발생함.
그래서 개발자들은 설치가 실패하면 “왜 안 되지?”, 성공하면 “왜 된 거지?”라고 의심하게 됨.
2. 이상적인 개발 환경에 대한 상상
전문가가 미리 설치해둔 서버(웹서버, DB 등)를 그냥 네트워크로 연결해서 쓸 수 있으면 좋겠다고 상상함.
하지만 이러려면 실제 컴퓨터(서버)를 여러 대 써야 하므로 비용이 많이 듦.
3. 그래서 나온 방법: 가상 머신(VM)
한 대의 컴퓨터에 가상 컴퓨터를 만들어서 운영체제를 설치하고 그 위에 필요한 소프트웨어 설치.
VirtualBox 같은 도구가 해당 예시.
하지만 이 방식도 단점 있음:
운영체제를 매번 설치하니 용량이 큼
운영체제가 두 겹이 되니 속도가 느림
4. 그 다음 단계: 컨테이너(Container) 기술
하나의 컴퓨터(🖥️ 호스트)에서 여러 앱을 격리된 환경(📦 컨테이너)에서 실행.
전체를 Host라고 부르고 각 앱 환경을 Container라고 부른다.
각 컨테이너는 전체 운영체제가 아닌 앱을 실행하는데 필요한 라이브러리와 실행 파일만 포함.
운영체제를 공유하므로:
설치할 게 적고
속도도 빠르고
용량도 적고
시간도 절약됨
5. 리눅스와 컨테이너
리눅스 운영체제는 이런 방식의 앱 실행에 최적화돼 있음.
이 기술을 컨테이너 기술이라 부름.
6. 그리고 등장한 도구: Docker(도커)
여러 컨테이너 관리 소프트웨어 중에서 가장 인기 있는 것이 도커.
“Docker”는 항만에서 컨테이너 다루는 노동자를 의미.
이 강의의 목표는 도커 '이용자'가 되는 것.
즉, 복잡한 이론보다 실용적인 개념 위주로 설명 예정.
생활코딩 Docker 입문수업 - 2. 설치
1. 도커(Docker)의 기반 기술
도커는 리눅스 운영체제 기반의 컨테이너 기술이다.
따라서 도커 위에서 동작하는 컨테이너와 그 안의 앱들도 리눅스 기반이다.
2. 리눅스가 아닌 운영체제에서의 도커 사용
윈도우나 macOS 사용자는 직접 리눅스를 설치하지 않아도 된다.
도커가 자동으로 가상머신(VM)을 생성하고 그 안에 리눅스를 설치해준다.
단, 가상머신을 사용하는 구조이므로 리눅스 환경 대비 성능 저하가 일부 있을 수 있다.
그럼에도 도커의 편의성 때문에 윈도우/macOS 사용자들도 많이 사용한다.
3. 도커 설치 방법
도커 공식 홈페이지 (https://www.docker.com ) 접속
Download Docker Desktop 클릭
각 운영체제에 맞는 설치 방법 선택
리눅스: 사용하는 배포판(우분투 등)에 따라 설치 방법이 다름
Windows/macOS:
Docker Desktop for Windows/macOS
다운로드 및 설치
4. 도커 설치 확인 방법
설치 후, 다음 명령어로 정상 설치 여부 확인:
cmd 입력 후 명령프롬프트에 docker images 입력
에러 없이 명령이 실행되면 설치 성공.
Windows:
Docker Desktop
실행 후 고래 로고 확인 → 우클릭 → 대시보드(도커를 그래픽컬한 환경에서 제어할 수 있게 도와주는 도구) 클릭명령어로 도커를 사용하기 위해서는 터미널 실행 → docker images 입력 시 에러가 뜨지 않는다면 성공적으로 설치 된 것
macOS: 메뉴 상단에 고래 아이콘 표시 → 대시보드 진입 가능
리눅스: GUI 도구(Docker Desktop) 없음 → 명령어 중심으로 사용
명령어 실행 시에는 sudo를 앞에 붙여야 함 (ex.
sudo docker images
)
생활코딩 Docker 입문수업 - 3. 이미지 pull
비유를 통한 Docker 개념 이해
앱스토어 vs Docker Hub
우리가 앱스토어에서 필요한 프로그램을 검색하고 다운로드하듯,
Docker에서는 Docker Hub(레지스트리)에서 필요한 소프트웨어를 찾고 다운로드함.
프로그램, 이미지, 컨테이너의 비유
앱스토어에서 다운로드한 파일 → 프로그램
Docker Hub에서 다운로드한 파일 → 이미지 (Image)
프로그램을 실행한 결과 → 프로세스
이미지를 실행한 결과 → 컨테이너 (Container)
이미지 1개로 여러 개의 컨테이너를 실행 가능.
⛓️ 핵심 용어
용어 | 설명 |
---|---|
Registry | 이미지들이 저장된 공간. 대표적으로 Docker Hub. |
Pull | 레지스트리에서 이미지를 다운로드하는 행위. |
Run | 이미지를 실행해 컨테이너로 만드는 행위. |
Image | 컨테이너를 만들기 위한 템플릿. 실행 전 상태. |
Container | 실행 중인 이미지. 실제 동작하는 단위. |
🧪 실습 예시: Apache 웹서버 실행
Docker Hub 접속
'Explore' → 'Containers' 클릭 → 원하는 소프트웨어가 설치되어있는 컨테이너 찾
httpd
검색(아파치 웹서버) → httpd 오피셜 이미지(도커에서 공식적으로 관리하는 믿을 수 있는 이미지) 확인
이미지 다운로드
docs.docker.com 사이트 방문 → reference → docker cli선택 → docker pull → 메뉴어 참고하여 명령어 사용용
docker pull httpd
설치 확인
docker images
출력 결과에서 이미지 이름, 태그, ID, 생성일, 크기 확인 가능
위 작업을 GUI에서 하는 방법
Docker Desktop 설치 시 GUI 제공
Mac, Windows에서 지원
Docker 아이콘 클릭 → Dashboard 진입
'Images' 메뉴에서 현재 가지고 있는 이미지 목록 확인 가능
요약
Docker는 소프트웨어를 이미지 형태로 공유하고, 이를 실행하면 컨테이너가 됨.
이미지는 Docker Hub에서 찾아
docker pull
로 가져오고,docker run
으로 실행함.명령어가 익숙하지 않다면 Docker Desktop GUI를 이용해도 무방함.
생활코딩 Docker 입문수업 - 4. 컨테이너 run
1. Docker Desktop에서 컨테이너 생성 (GUI)
Docker Hub에서 이미지 가져오기 후, 이미지 탭에서 Run 버튼 클릭 → 컨테이너 생성
예:
httpd
이미지 → 컨테이너 이름을ws1
으로 지정하여 Run 버튼 후 생성생성된 컨테이너는 자동 실행됨 (ws1 클릭하여 로그, 통계 확인 가능)
2. 컨테이너 관리 (GUI)
Stop: 실행 중인 컨테이너를 중지
Start: 중지된 컨테이너를 다시 시작
Delete: 컨테이너 삭제
3. CLI에서 컨테이너 실행 및 관리
▸ 컨테이너 실행
docker run httpd
httpd 이미지를 기반으로 컨테이너 실행
컨테이너 리스트 확인:
docker ps # 실행 중인 컨테이너 목록
docker ps -a # 모든 컨테이너 목록 (중지된 것도 포함)
▸ 컨테이너 추가 생성 (하나의 이미지에 여러개의 컨테이너 생성 가능. ws2 생성 해보자)
docker run --name ws2 httpd
▸ 컨테이너 중지 및 시작
docker stop ws2 # 컨테이너 중지
docker start ws2 # 중지된 컨테이너 실행
▸ 로그 확인
docker logs ws2 # 과거 로그 출력
docker logs -f ws2 # 실시간 로그 출력 (follow)
▸ 컨테이너 삭제
docker rm ws2 # 중지된 컨테이너 삭제
docker rm -f ws2 # 실행 중인 컨테이너 강제 삭제
4. 이미지 삭제
▸ GUI
이미지 탭에서 삭제하고 싶은 이미지 우클릭 →
Remove
▸ CLI
docker rmi httpd
이미지 삭제 후
docker images
명령어로 삭제 확인 가능
요약 키포인트
docker run
→ 컨테이너 실행docker ps
,docker ps -a
→ 컨테이너 상태 확인docker stop
,docker start
,docker rm
→ 컨테이너 관리docker logs
,docker logs -f
→ 로그 확인docker rmi
→ 이미지 삭제
생활코딩 Docker 입문수업 - 5. 네트워크
웹 서버와 네트워크의 기본 개념
웹 서버 사용을 위한 전제
네트워크에 대한 기본적인 이해(서버, 클라이언트, 포트 등)가 필요
기본이 부족하다면 웹 원(Web1) 수업 추천
더 깊은 이해를 원한다면 홈서버(집에서 서버 구축) 수업 추천
웹 서버의 기본 동작 방식 (Docker 없이)
두 대의 컴퓨터 필요
클라이언트: 웹 브라우저 설치
서버: 웹 서버(Apache) 설치
파일 시스템에 웹 페이지 배치
예:
/usr/local/apache/htdocs/index.html
웹 서버가 이 디렉토리에서 요청된 파일을 찾아서 전달
데이터가 저장된 공간 → 파일 시스템
포트의 개념
컴퓨터는 약 65,000개의 포트를 사용
어떤 소프트웨어가 어떤 포트를 사용할지 지정 필요
웹 서버는 기본적으로 80번 포트에서 요청을 대기
웹 요청 흐름
사용자가 웹 브라우저에서
example.com
입력 → 80번 포트로 접속웹 서버는 요청을 받아 index.html을 찾아서 클라이언트로 전달
Docker를 활용한 웹 서버 운영
Docker로 웹 서버 설치 시
웹 서버는 컨테이너 안에 설치
컨테이너를 실행하는 운영체제는 호스트(Host) 라고 부름
각 컨테이너는 독립적인 실행 환경을 가지며 포트와 파일 시스템도 별도로 존재
호스트와 컨테이너의 연결
기본적으로 컨테이너는 외부와 연결이 안 됨
-p
옵션으로 호스트 포트 ↔ 컨테이너 포트 연결(포트 포워딩) 필요예:
-p 8080:80
→ 호스트 8080 포트 요청이 컨테이너의 80번으로 전달됨
Docker Desktop 및 CLI 사용 예시
Docker Desktop에서 웹 서버 컨테이너 만들기
이미지:
httpd
컨테이너 이름:
ws2
, 포트 설정:8080:80
생성 후 접속 확인:
http://localhost:8080
CLI(Command Line) 사용 (name : ws3, host port :8081, container port : 80) 생성
Docker CLI에서
docker run --name ws3 -p 8081:80 httpd
docker ps
로 컨테이너 상태와 포트 확인
웹 브라우저 접속 테스트
localhost:8080
또는localhost:8081
로 접속Apache 기본 페이지 출력 및 접속 로그 확인 가능
결론
Docker 없이도 웹 서버를 구축할 수 있지만, Docker를 사용하면 컨테이너로 더 간편하게 설정 가능
포트 포워딩 개념만 이해하면 여러 개의 웹 서버도 쉽게 실행 가능
웹 서버와 클라이언트 간의 통신은 네트워크와 포트 설정이 핵심
생활코딩 Docker 입문수업 - 6. 명령어 실행
목표
컨테이너에 접속하여 웹서버의 index.html 파일을 수정해 웹 페이지 내용을 변경하는 방법을 익힘.
컨테이너 접속 및 명령 실행 방법
🔹 1. Docker Desktop 사용 시
Docker Desktop에서 컨테이너 선택 →
CLI
버튼 클릭CLI에서
pwd
,ls -al
등을 입력하면 컨테이너 내부에서 명령이 실행됨
🔹 2. 터미널(CLI)에서 접속 방법
docker exec [옵션] [컨테이너 이름] [명령어]
docker ps
docker exec ws3 pwd
docker exec ws3 ls -al
docker exec ws3 /bin/sh(사용자가 입력한 명령을 shell 프로그램이 받아서 그것을 운영체제에 전달해주는 일종의 창구 역할)
docker exec -it ws3 /bin/sh
3. 컨테이너 내부로 상호작용 방식으로 진입하려면
docker exec -it ws3 bash → #이 생김 → 지금부터 의 명령은 ws3 에 접속하여 명령하는 것
i: interactive (입력 허용)
t: tty (터미널 출력 제공)
bash: bash 쉘 실행 (없으면 sh 사용)
exit : 나가고 싶을 때
❗ -it 옵션은 컨테이너와 터미널을 지속적으로 연결할 때 필요
index.html 수정 과정
위 정보에 사용자가 요청한 정보를 보관하도록 약속 되어 있음
docker exec it ws3 /bin/bash
cd /usr/local/apache2/htdocs/ (컨테이너 내부 웹서버 디렉토리로 이동)
ls -al (index.html 파일 확인 가능)
nano index.html (없음. 용량 문제로 기본적으로 설치 되어 있지 않음)
편집기 설치 (컨테이너에는 기본적으로 편집기가 없음)
apt update
apt install nano (nano 설치)
파일 수정
nano index.html
내용 예시:
Hello Docker!
저장 방법
Ctrl + X, Y, Enter
웹 페이지 새로 고침 → 변경 내용 확인
요약
단계 | 설명 |
---|---|
1 | docker exec -it [컨테이너명] bash로 접속 |
2 | 웹 루트 디렉토리로 이동 (예: /var/www/html) |
3 | nano 등 편집기 설치 |
4 | index.html 파일 수정 및 저장 |
5 | 웹페이지에서 변경 내용 확인 |
생활코딩 Docker 입문수업 - 7. 호스트와 컨테이너의 파일시스템 연결
목표
도커 컨테이너 안의 파일을 직접 수정하지 않고, 호스트의 파일을 컨테이너에 반영해 안전하고 편리한 개발 환경을 구축하는 방법을 익힌다.
기존 방식의 문제점
컨테이너 내부에서 직접 파일을 수정하면,
→ 컨테이너가 삭제되면 수정한 내용도 사라짐.
도커 컨테이너는 "필요할 때 생성하고, 불필요하면 삭제"하는 것이 일반적이므로
→ 변경사항 유실 위험이 큼.
해결 방법: 호스트와 컨테이너 디렉토리 연결 (볼륨 마운트)
컨테이너 생성 시 -v
옵션을 사용하여
호스트의 디렉토리 (
~/Desktop/htdocs
) 와컨테이너의 디렉토리 (
/usr/local/apache2/htdocs
) 를 연결
docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs httpd
이렇게 하면:
호스트에서 수정한 파일이 자동으로 컨테이너에 반영됨
컨테이너가 삭제되어도, 호스트의 파일은 그대로 유지됨
장점 요약
안전성: 컨테이너 삭제에도 소스 코드 보존
버전 관리: Git 등의 도구로 호스트의 파일을 관리 가능
편리한 수정: 익숙한 에디터로 호스트에서 직접 편집
백업 용이: 호스트의 파일에 대한 백업 수행 가능
결론
실행 환경은 컨테이너에 맡기고, 파일 수정은 호스트에서!
→ 효율적이고 안정적인 개발 환경 구성 가능
[드림코딩] 도커 한방에 정리
도커(Docker)란?
도커는 어플리케이션을 실행하기 위한 환경까지 한 번에 패키징해서 배포할 수 있는 툴입니다.
‘컨테이너(Container)’라는 단위를 사용해 애플리케이션과 실행환경(OS, 라이브러리, 설정 등)을 한 덩어리로 묶어줍니다.
어느 서버, 어느 운영체제에서도 똑같이 작동할 수 있도록 해줍니다.
왜 도커가 필요할까?
개발 환경과 배포 환경의 차이로 인한 오류를 줄이기 위해!
내 PC에선 잘 되는데 서버에선 안 돼요…😵
라이브러리, 환경변수, Node.js 버전 등 각종 설정을 매번 수동으로 맞추는 게 번거로움 → 도커가 해결해줌
도커 vs 가상머신(VM)
항목 | 도커(컨테이너) | VM(가상머신) |
---|---|---|
OS 포함 여부 | ❌ 없음 (호스트 OS 공유) | ✅ 있음 (각자 OS 포함) |
성능 | 빠르고 가벼움 | 무겁고 느림 |
시작 속도 | 빠름 | 느림 |
리소스 사용 | 적음 | 많음 |
도커의 3대 구성요소 (컨테이너 생성 순서)
컨테이너를 만들고 배포하고 구동한다
Dockerfile
컨테이너를 어떻게 만들지 명시하는 설명서 또는 레시피
필요한 라이브러리, 환경변수, 실행 커맨드 등을 정의
Image
Dockerfile로부터 만들어진 템플릿
어플리케이션 실행에 필요한 모든 게 담긴 스냅샷
불변(immutable) 상태
Container
이미지를 실제로 실행한 것
고립된 환경에서 동작하는 애플리케이션
비유하면…
Dockerfile: 레시피
Image: 만들어진 음식 (포장됨)
Container: 포장을 풀고 먹는 과정 (실행 중)
1. 도커 개념 요약
도커란?
애플리케이션을 컨테이너라는 독립된 공간에서 실행할 수 있도록 해주는 플랫폼입니다.
기본 개념 흐름
로컬에서 이미지 생성
컨테이너 레지스트리(예: Docker Hub, GitHub Packages 등)에 푸시
다른 서버나 개발자의 PC에서 해당 이미지를 가져와 실행
이미지를 실행하려면 컨테이너 엔진(도커)이 설치되어 있어야 함
컨테이너 레지스트리 종류
퍼블릭: Docker Hub, GitHub Packages 등
프라이빗: 기업 보안 목적 (Google Cloud, AWS, Azure 등에서도 제공)