조직 내에서 동일한 이미지를 배포하는 것은 매우 중요하다.
도커 이미지를 별도로 저장하거나 다른 장치로 옮기려면 단일 파일로 이미지를 저장해야 한다.
이 과정에서 커맨드, 이미지명, 태그 등이 모두 저장된다.
docker save -o ubun-with-nginx.tar my-ubun-nginx:latest
-o 옵션: 로컬에 압축된 출력 파일로 저장함ubun-with-nginx.tar조직원이 위 파일을 받아 실행할 때:
docker load -i ubun_with_nginx.tar
Loaded image: my_ubun_nginx:latest 로 표시됨exit
docker ps -a => my_ubun 확인
docker ps -a |grep my_ubun
docekr commit my_ubun my_ubun_nginx => 새로운 이미지 생성
docker images => my_ubun_nginx 확인
docker save -o ubun_with_nginx.tar my_ubun_nginx:latest
=> 앞에 이름으로 저장 (tar형식으로)
docker load -i ubun_with_nginx.tar
=>이미지 로드
다음은 이미지 속 텍스트의 정리본입니다.
docker export
컨테이너의 파일 시스템을 tar 파일로 추출한다.
docker import
export로 추출된 파일을 새로운 이름의 이미지로 저장한다.
docker export는 컨테이너를 동작시키는 데 필요한 모든 파일을 압축한 것으로,
tar 파일 안에 컨테이너의 루트(/) 파일 시스템 전체가 포함된다.
반면, docker save는 이미지의 Layer 구조까지 포함한 형태로 압축된다.
즉, 단순한 파일 백업이 아니라 이미지의 계층(Layers) 구조 정보까지 보존된다.
동일한 Docker 이미지를 백업하더라도
export와save는 압축 구조와 디렉터리 형태가 다르다.
export로 생성한 tar 파일은 import로 복원save로 생성한 파일은 load로 불러와 사용✅ 일반적으로는 save/load 방식으로 이미지 전체를 보존하고 공유하는 것이 좋다.

우분투 16으로 컨테이너 생성.

다음은 이미지 속 텍스트의 정리본입니다.
조직에 적합한 도커 이미지를 생성했다면, 여러 방법을 통해 이미지를 배포하여
조직원들이 쉽게 이용할 수 있다.
Docker Hub에서 다운로드하여 사용
docker pull <이미지명>
→ hub.docker.com에서 원하는 이미지를 다운로드 후 사용
현재 컨테이너를 기반으로 새로운 이미지 생성
docker commit <컨테이너명> <새로운_이미지명>
→ 현재 이미지에 필요한 내용을 추가 후 커밋하여 새로운 이미지 생성
Dockerfile 스크립트를 이용한 이미지 생성
docker build -t <이미지명> .
Tag 변경을 통한 새로운 이미지 생성
docker tag <기존이미지> <새로운태그>
→ 태그만 변경해도 새로운 이미지로 인식됨
공개 저장소(Public Repository)
누구나 이미지를 사용할 수 있으며,
https://hub.docker.com 에 사용자 계정으로 로그인 후
자신의 도커 이미지를 업로드(배포)할 수 있다.
비공개 저장소(Private Repository)
1개의 이미지는 무료로 Private 설정 가능하지만,
여러 개를 Private으로 유지하려면 추가 요금이 발생한다.
✅ 정리 요약
도커 이미지는
pull (다운로드)commit (수정본 생성)build (Dockerfile로 생성)tag (태그로 분리)docker tag comm_con2 herowoong2/comm_con2:0.0
docker push herowoong2/comm_con2:0.0

docker login
doceker pull herowoong2/comm_con2:0.0

kali에 들어가서도
docker run -it herowoong/comm_com

새로운 organization도 만들 수 있다.
다음은 이미지 속 텍스트의 정리본입니다.
소프트웨어 개발 등에서는 혼자 작업하지 않고 여러 명이 함께 작업하는 경우가 많다.
이때 대부분은 웹 상에서 공동 작업공간(Organization) 을 생성하여 관련자들만 이미지를 이용하게 한다.
이를 위해 웹에서 Organization을 생성하고, 여기에 팀원들을 추가하여
팀원들끼리만 이미지를 공유시키는 방식으로 활용할 수 있다.
앞서 생성한 Organization을 사용할 수도 있지만,
WebHook을 만들어 팀원들끼리만 이미지를 공유하는 방법도 있다.
저장소에 새로운 이미지가 추가될 때,
예를 들어 ownCloud 서버에서 배포용 애플리케이션을 작성할 경우
이 WebHook이 유용하다.
→ 해당 사이트는 URL로 HTTP 요청을 받아 새로운 배포 이미지를 자동으로 전달해 준다.
Docker Hub(https://hub.docker.com)처럼 외부 웹에서 Organization이나 WebHook을 이용할 수도 있지만,
조직 내부에서 이미지를 공유하기 위한 자체 레지스트리(Registry) 를 만들 수도 있다.
이 레지스트리는 내부 전용 Docker 저장소로서,
이미지를 업로드(push)하거나 내려받기(pull) 할 수 있다.
예시:
docker push <레지스트리주소>/<이미지명>
docker pull <레지스트리주소>/<이미지명>
이미지를 저장할 때는 Docker Volume을 생성하여
컨테이너의 내부 디렉터리에 마운트하고,
외부에서는 docker pull 명령으로 이미지를 받아 사용할 수 있다.
Linux에서도 이 자체 레지스트리와 유사하게
이미지 저장 전용 컨테이너를 만들어 운영할 수 있다.
✅ 요약
| 구분 | 설명 |
|---|---|
| Organization | 팀 단위로 이미지를 공유할 수 있는 공동 작업 공간 |
| WebHook | 서버나 애플리케이션에서 새로운 이미지 배포를 자동화하는 기능 |
| Registry | 내부에서 이미지를 저장·관리하는 전용 공간 (외부 Docker Hub와 유사) |
레지스트리
docker run -d --name my_registry -p 5000:5000 --restart=always registry:2.6
docker tag hello-world:latest 192.168.100.180:5000/hello-world:0.0



도커 레지스트리에 저장된 이미지를 제거할 때는 아래와 같은 방법을 사용한다.
레지스트리에 저장된 이미지를 삭제하려면 다음 명령을 실행한다:
docker image remove 192.168.100.101:5000/hello-world:0.0
현재 실행 중인 도커 레지스트리 컨테이너를 삭제하더라도,
이미지는 레지스트리의 볼륨(volume)에 그대로 남아 있게 된다.
따라서 완전히 삭제하려면 레지스트리 컨테이너와 함께
볼륨까지 제거해야 한다.
docker rm -f --volumes myregistry
✅ 정리 요약
| 구분 | 명령어 | 설명 |
|---|---|---|
| 특정 이미지 삭제 | docker image remove <레지스트리주소>/<이미지명>:<태그> | 해당 이미지 제거 |
| 레지스트리 삭제 | docker rm -f --volumes myregistry | 컨테이너와 볼륨(저장된 이미지 데이터) 모두 삭제 |
도커 컨테이너에서 발생하는 이벤트(event) 와
현재 도커 컨테이너가 가지고 있는 자원(Resource) 상태를
docker events 명령을 통해 확인할 수 있다.
도커 컨테이너에서는 다양한 상황이 이벤트로 발생한다.
예를 들어:
이러한 모든 동작을 이벤트(event) 라고 부른다.
docker events 명령을 실행하면
컨테이너에서 수행되는 각종 작업과 이벤트 발생 시점을 실시간으로 보여준다.
이는 Windows 서버의 이벤트 로그(event log) 와 유사한 개념이다.
docker events --filter 'type=image'
→ 이미지(image) 관련 이벤트만 필터링하여 출력한다.
✅ 정리 요약
| 구분 | 설명 |
|---|---|
| 명령어 | docker events |
| 기능 | 컨테이너 및 도커 전체의 실시간 이벤트 모니터링 |
| 필터 옵션 | --filter 'type=image' → 특정 리소스 유형만 보기 |
| 비유 | Windows의 이벤트 로그(Event Viewer)와 유사 |
docker events

일반적으로 시스템에서 리소스(resource) 란
HDD, CPU, RAM 사용량 등을 의미한다.
넓게 보면 사용자, 데이터, 컴퓨터, 프린터 등의 자원도 포함된다.
현재 실행 중인 도커 컨테이너의 리소스 정보를 확인하려면
다음 명령어를 사용할 수 있다:
docker stats
이 명령어를 통해 각 컨테이너의 CPU, 메모리, 네트워크 I/O 등
실시간 사용량을 모니터링할 수 있다.
또한 다음 명령으로 시스템 전체 리소스를 확인할 수도 있다:
docker system --help
cAdvisor는 Google에서 만든 컨테이너 모니터링 도구로,
단일 컨테이너의 리소스 사용량을 시각적으로 확인할 수 있다.
많은 컨테이너를 모니터링해야 하는 경우에는
추후 Prometheus 등의 추가 모니터링 도구를 함께 사용하는 것이 좋다.
✅ 요약 정리
| 구분 | 명령어 / 도구 | 설명 |
|---|---|---|
| 컨테이너 리소스 확인 | docker stats | 실행 중인 컨테이너의 CPU, 메모리 등 실시간 사용량 확인 |
| 시스템 리소스 도움말 | docker system --help | 시스템 관련 명령어 확인 |
| 모니터링 도구 | cAdvisor | Google이 만든 컨테이너 단위 모니터링 도구 |
| 대규모 모니터링 | Prometheus | 여러 컨테이너 리소스 종합 관리용 도구 |
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest


한편 일반 프로그래밍 언어로 Docker를 제어할 수 있다.
pip3 install docker
python3 => 파이썬 실행
import docker => import
client = docker.DockerClient(base _url='unix://var/run/docker.sock')
client.info()
한편 파이썬 파일로
도커 컨테이너를 만들 수 있다.



도커 이미지를 생성하는 방법은 여러 가지가 있다.
Docker Hub에서 제공하는 기본 이미지를 다운로드하여 사용한다.
예시:
docker pull rockylinux:8
기존 이미지(Base Image)에 필요한 설정이나 파일을 추가한 뒤,
새로운 이미지로 커밋(Commit)한다.
docker commit --name rockylinux8-1 rockylinux8
기존 이미지에 새 태그를 붙여 새로운 이미지처럼 관리할 수도 있다.
docker image tag rockylinux8 rockylinux8-2
Dockerfile은 이미지 생성 과정을 코드로 정의한 파일이다.
Bare Image에 필요한 설정을 추가하여 새로운 이미지를 자동으로 빌드할 수 있다.
이때 build 명령을 사용하며, 특정 이미지명을 함께 지정할 수 있다.
예시:
docker build -t my-rockylinux:1.0 .
Dockerfile이란?
도커 이미지 정의를 위한 DSL(Domain Specific Language, 도메인 특화 언어) 형식의 스크립트 파일이다.
특정 도커 이미지를 정의하고, 필요한 요소들을 설정하여 이미지를 생성한다.
Dockerizing이란?
애플리케이션을 Dockerfile 기반으로 이미지화하는 과정.
이는 DevOps나 CI/CD 과정에서 핵심적인 단계이다.
| 구분 | 방법 | 설명 |
|---|---|---|
| 1 | docker pull | Hub에서 기본 이미지 다운로드 |
| 2 | docker commit | 기존 이미지 수정 후 새로운 이미지로 저장 |
| 3 | docker tag | 기존 이미지에 새 태그 부여 |
| 4 | docker build | Dockerfile을 이용해 새로운 이미지 빌드 |
| Dockerfile | DSL 기반 스크립트 | 이미지 정의 및 자동화된 빌드 설정 파일 |
✅ 정리하자면:
Dockerfile은 “도커 이미지를 어떻게 만들 것인가”를 코드로 정의한 설정 파일이며,
필요한 요소(패키지 설치, 환경 설정 등)를 명시하고
이를 실행하면 자동으로 새로운 도커 이미지가 생성된다.
docker run --name website1 -v $(pwd):/usr/share/nginx/html -p 8080:80 -d nginx:latest


label이라고 하는 것은 service, ingress, egress


docker build -f Dockerfile1 -t website3 .

-P => 32768

-P => 32769
nano Dockerfile3
docker build -f Dockerfile3 -t website5 .
nano Dockerfile4
root@ubuntu18-1:/home/ubuntu/dockerfile# docker build -f Dockerfile4 -t ubuntu-with-git .
=> image 생성
docker images => 확인
docker run -it ubun-with-git:latest bash
=> 생성 및 접속
git clone https://github.com/nacyot/docker-moniwiki.git

dockerfile 내용 편집
docker images => paul-moni
docker run -p 9999:80 -d paul-moni:latest
docker ps => 컨테이너 생성 확인.
exit
firefox http://localhost:9999/moniwiki


Cloud와 Docker Image Container(또는 Kubernetes의 Pods)가 활용되면서
기존의 웹 서버 서비스 환경이 다음과 같이 바뀌었다.
a) non-blocking I/O
b) Single-thread 기반
c) Google V8 엔진 사용
d) 내장 HTTP 및 Socket 모듈 지원
| 구분 | 설명 |
|---|---|
| Node.js | 서버 측 자바스크립트 런타임 (비동기·단일 스레드) |
| Express.js | Node.js용 경량 웹 서버 프레임워크 |
| Tomcat | 자바 기반 웹 서버 (JSP, Servlet 실행용) |
| Apache | 정적 웹 서버 |
| Socket | IP:Port 기반 통신 모듈 |
| React.js | 프론트엔드(UI) 개발용 라이브러리 |
👉 한 줄 요약:
Node.js는 비동기 처리로 빠르고 가벼운 서버 환경을 제공하고,
Express.js는 그 위에서 REST API나 웹 서버를 간단하게 구성할 수 있는 핵심 프레임워크이다.
Werkzeug 툴킷과 Jinja2 템플릿 엔진 기반의 BSD 라이선스 오픈소스 웹 서버이다.| 구분 | 주요 역할 |
|---|---|
| 프론트엔드 (Front-End) | 화면 UI, 사용자 인터페이스, 디자인, 웹페이지 구조 |
| 백엔드 (Back-End) | 서버 로직, 데이터베이스 관리, API 설계 및 클라이언트 데이터 처리 |
| 구분 | Flask | Express.js + Node.js |
|---|---|---|
| 언어 기반 | Python | JavaScript |
| 프레임워크 유형 | 마이크로 프레임워크 | 서버사이드 프레임워크 |
| 특징 | 경량, 확장성 높음 | 비동기 처리, 빠른 요청 응답 |
| 서버 구동 | 내장 서버 (Werkzeug) | Node.js 자체 서버 |
| 주요 용도 | REST API, 웹 앱 | 실시간 웹 서버, API 서버 |
| 확장성 | 다양한 플러그인 기반 | npm 패키지 기반 |
👉 결론:

node.js 웹 서버
다음은 이미지 내용 정리본입니다.
index.html 이다.index.html만 되는 건 아니고, index.php, index.js 같은 포맷으로도 홈페이지 파일을 만들어 둘 수 있다. 그러면 해당 파일이 웹 페이지처럼 보이게 된다.브라우저에서 오른쪽 클릭 → Inspect(검사) 를 누르면 현재 화면에 표시되는 HTML 소스를 볼 수 있다.
거기에는 우리가 서버에서 짠 원래 Node.js 코드가 나오는 게 아니라,
서버가 실행해서 만들어낸 최종 HTML 만 들어 있다.
예를 들어 Node.js로 “Hello World”를 보냈다면, 검사창에서는
<body>Hello World</body>
이런 식으로 보인다.
서버에서 어떤 언어(PHP, Node.js, Python…)로 만들든, 브라우저가 받는 건 결국 HTML 이고, 브라우저는 그 HTML만 화면에 그려준다.

예전에는 Front-End(사용자에게 보여지는 영역)와 Back-End(DB, 파일 서버, 로직 처리 등)가
명확히 분리되어 있었다.
즉, Front-End는 단순히 HTML·CSS·JavaScript로 화면만 구성하고,
Back-End에서 데이터를 처리해 전달하는 구조였다.
하지만 최근 클라우드 기술과 프레임워크의 발전으로 인해
Front-End와 Back-End의 경계가 점점 사라지고 있다.
| 구분 | 과거 | 현재 |
|---|---|---|
| Front-End | HTML, CSS, JS로 화면 구성만 담당 | 서버 데이터 요청·처리까지 수행 (React, Vue 등) |
| Back-End | DB, 로직, 데이터 가공 담당 | API 제공 중심 역할로 변화 |
| 전체 흐름 | Front → 요청 → Back → 응답 | Front에서 API 통신 및 데이터 렌더링까지 수행 |
✅ 결론:
React는 클라이언트 측에서 UI를 동적으로 생성하고 서버와 직접 통신할 수 있게 해주는
현대적인 프론트엔드 핵심 기술이며, Node.js 및 Express.js와 함께 사용될 때
전체 웹 애플리케이션의 효율성과 속도를 높여준다.
*.html 파일이 어디에 있든, 해당 파일을 불러와서 웹에서 실행되게 할 수 있다.✅ 요약
Flask는 Python으로 만들어진 경량 웹 프레임워크로,
HTML 파일을 렌더링하여 클라우드 환경에서도 간단하게 웹 서버를 구축할 수 있다.