컨테이너 가상화 : 호스트 운영체제에서 논리적인 구역을 만들어 서로 독립적인 애플리케이션을 실행하는 기술!!!
이 논리적인 구역을 컨테이너라 하며, 여기에 애플리케이션과 필요한 라이브러리를 추가할 수 있다. 컨테이너 가상화는 주로 커널 기능을 사용하며, 이는 서버 가상화보다 리소스를 효율적으로 사용하거나 애플리케이션을 빠르게 배포 가능!!!
하이퍼바이저 : 호스트가 소프트웨어 파티셔닝을 할 수 있게 만들어주는 소프트웨어
가장 널리 알려져 있는 하이퍼바이저는 VMware, Xen, VirtualBox, KVM이 있다.
도커 설치(centos)
1. 도커 패키지 저장소에 연결하거나 도커를 사용하면서 필요한 패키지들이다
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2) yum 저장소 설정 yum-config-manager로 doker-ce 패키지 저장소에 연결한다
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3) docker-ce 설치 docker-ce패키지를 설치
sudo yum install -y docker-ce docker-ce-cli containerd.io
4) 서비스 실행 및 활성화
패키지가 설치되었으면 서비스를 실행한다
sudo systemctl start docker
서비스가 부팅 이후에도 동작하도록 활성화한다
sudo systemctl enable docker
5) docker 그룹 지정
사용자가 sudo 명령을 사용하지 않더라도 docker명령을 사용할 수 있게 설정해야됨
sudo usermod -aG docker $USER >>> 이 설정을 하고 난 뒤에는 로그아웃 했다가 로그인 해야됨
6) 도커 버전 확인
docker version
7) hello world 컨테이너 실행
docker run hello-world
docker 명령
(1) 이미지 다운로드
도커 허브 : 도커 허브는 도커의 기본 이미지 저장소이다. 도커 허브에서 이미지를 검색하거나 특정 이미지를 사용해 컨테이너를 실행하는 방법에 대해서도 알 수 있다.
도커 허브의 기본적 기능은 이미지의 공유이다. 따라서 도커 회사가 개발한 오피셜 이미지 외에도 사용자들이 개발한 이미지들도 업로드되어있고, 다운로드받을 수 있다.
도커 허브에 저장된 이미지의 이름은 저장소리음:태그 형태이다. 따라서 이미지를 검색할 때 사용자 허브id로 검색하거나 저장소 이름으로 검색하면 원하는 이미지를 찾을 수도 있다.
이미지 검색 및 다운로드
이미지를 다운로드하려면 먼저 검색할 수 있어야됨 물론 이미지의 이름을 알고 있다면 바로 다운로드할 수도 있다.
1) docker search >>> 명령을 사용해 이미지를 검색할수 있다
docker search --help
centos 키워드를 사용해 이미지를 검색한 결과

name : 이미지의 저장소 이름
DESCRIPTION : 이미지에 대한 설명
STARS : 이미지에 대한 평가점수
OFFICIAL : 공식 이미지 여부
AUTIMATED : 자동화 빌드 여부
## 원하는 이미지를 정확하게 검색하려면 도커 허브를 사용해야된다.
docker pull >> 이미지를 다운로드할 떄 사용한다
docker pull --help
centos 이미지를 태그 없이 다운로드 한다.

httpd 이미지에 latest 태그를 추가하여 이미지를 다운로드 한다.

mysql 이미지 중 5.7 태그인 것을 다운로드 한다.

이미지 관리
이미지를 다운로드했다면 확인하거나 사용하지 않으면 삭제할 수 있다.
1) docker images >> 현재 호스트에 저장되어있는 이미지 목록을 나열한다

RSPOSITORY를 지정하면 해당 저장소의 이미지만 나열할 수 있다.

2) docker rmi 명령을 사용해 이미지를 삭제할 수 있다.

만약 해당 레이어를 다른 컨테이너 또는 이미지가 사용하고 있다면 삭제하지 않는다.
docker rmi 명령을 실행한 뒤 이미지 목록을 확인한다.

docker rmi 명령은 해당 이미지를 사용하는 컨테이너가 있으면 삭제되지 않는다.

이 경우 이미지를 삭제하려면 -f 옵션을 사용할 수 있다. 하지만 실행중인 컨테이너에 영향을 미치기 떄문에 권장하지 않는다.
3) docker inspect : 이미지뿐만 아니라 도커 오브젝트의 정보를 자세히 확인할떄 사용
docker inspect centos:latest >>> centos 이미지의 정보를 자세히 확인한다.


config 섹션의 cmd는 이 이미지를 컨테이너로 생성할 떄 컨테이너가 실행하는 애플리케이션이다.
volumes는 뒤에서 학습할 도커 볼륨과 관련된 내용인데, 이 이미지로 컨테이너를 생성하면 도커 볼륨이 함께 생성된다.
이것은 나중에 뒤에서 자세히 다루도록 하자
workingDir은 컨테이너가 접근했을 때의 디렉토리이며 비어있으면 보통 "/" 이다.
Entrypoint도 cmd와 마찬가지로 컨테이너가 실행할 애플리케이션인데, Entrypoint와 cmd 관계는 명령과 인자의 관계와 비슷하다.
Entrypoint가 지정되지 않으면 Cmd가 명령으로 동작함, Entrypoint와 Cmd가 함께 있으면 Entrypoint가 명령이고 Cmd가 인자처럼 동작한다.
마지막으로 RootFS 섹션의 값은 이미지의 레이어를 나타내는데, 현재 centos:latest 이미지는 레이어가 하나인 것을 알 수 있다.
4) docker save / load
docker save 명령은 호스트에 저장된 이미지를 아카이브 파일로 복사하는 명령어,
docker load 명령은 아카이브 파일을 불러오는 명령이다.
docker save 명령은 -o 옵션을 사용해 생성되는 파일의 경로를 지정해야한다.
docker load 명령은 -i 옵션을 사용하여 지정된 파일을 로드한다.
docker save -o img.tar centos:latest httpd:latest >>> centos:latest와 httpd:latest 이미지를 아카이브 파일로 복사한다
tar명령으로 img.tar 파일의 내용을 확인한다

img.tar 파일을 로드하기 위해 centos:latest와 httpd:latest를 삭제해보자
docker rmi centos:latest httpd:latest
docker load를 사용하기 전에 이미지 목록을 확인한다.

docker load -i img.tar >> 이미지 로드

이미지 로드가 완료되면 이미지 목록을 확인해보자

httpd 와 centos가 있는것을 확인!!!
컨테이너 실행
(1) 컨테이너 생성 및 확인 : 컨테이너를 생성하고 시작하는 방법과 한 번에 실행하는 방법이 있다. 그리고 컨테이너가 실행되고 있는지 중지되어 있는지 알 수 있는 명령어, 리소스의 사용량을 확인할 수 있는 명령어를 알아본다.
1) docker ps >> 컨테이너 목록을 확인할 수 있다.(현재 실행중인 컨테이너를 출력)

CONTAINER ID : 컨테이너의 고유 id
IMAGE : 컨테이너가 사용하는 이미지
COMMAND : 컨테이너에서 실행중인 애플리케이션
CREATED : 컨테이너가 생성된 날짜
STATUS : 컨테이너의 상태
PORTS : 컨테이너에서 사용 중인 포트
NAMES : 컨테이너의 이름
docker ps 명령에 -a 옵션을 사용하면 현재 호스트에 존재하는 모든 컨테이너를 출력한다.

hellow-world 이미지를 사용하는 brave_mclean 컨테이너는 /hello라는 애플리케이션을 싱행중이며 상태는 종료되었다.
이 컨터이너는 설치 후 실행했던 hello-world이다.
2) docker create >>> 컨테이너를 생성할 수 있따.
옵션)
-i : 연결되어있지 않아도 표준입력을 유지
-t : 가상 터미널 지정
--name : 컨테이너 이름 지정
httpd:latest 이미지를 사용해 이름이 web1인 컨테이너를 생성해보자

docker create 명령은 단순히 컨테이너를 생성하는 것일 뿐, 실행하는 것이 아님, 즉 컨테이너가 생성되었으면 docker ps -a 명령으로 확인해야됨

STATUS 필드의 값이 Created로 나타나는데, 이는 컨테이너가 생성된 상태인 것을 의미한다.
docker create -it --name centos:latest 이미지를 사용하여 os1 컨테이너를 생성한다. centos:latest 이미지는 쉘 프로그램을 실행하기 떄문에 표준 입력과 표준 출력/에러를 위한 터미널이 필요하다. 따라서 -it 옵션을 함께 사용해야한다.
docker ps -a 명령을 통해 확인한다.

3) docker start >> 중지되어 있거나 생성된 컨테이너를 시작하는 명령어
옵션)
-i : 컨테이너의 표준입력에 연결
-a : 컨테이너의 표준출력/에러에 연결
앞에서 생성했던 web1 컨테이너를 시작한다.
docker start web1
docker ps -a로 확인해보자

web1 컨테이너의 상태가 UP인 것을 확인할 수 있다.
web1 컨테이너는 웹서비스 컨터이너이므로 컨테이너가 정상적으로 동작하는지 확인하려면 curl 명령을 사용해서 확인한다.
docker inspect web1 | grep -i ipaddress

ip 주소를 확인했으면, curl 명령을 사용해 web1 컨테이너에 접근한다.
curl 172.17.0.2

다음은 os1컨테이너를 시작한다. os1컨테이너는 쉘 프로그램을 실행하고 있음으로 -ai 옵션을 같이 사용하여 시작하면 바로 컨테이너에 접근 가능하다.
docker start -ai os1

4) docker run >> docker run 명령을 사용해 컨테이너를 바로 실행할 수 있다. 이 명령을 사용하면 create와 start를 사용할 필요가 없다.
옵션)
-i : 연결되어있지 않아도 표준입력을 유지
-t : 가상터미널 지정
-d : 컨테이너 실행 시 분리모드로 실행
--name : 컨테이너 이름 지정
docker run -d --name 명령으로 web2 컨테이너를 실행한다.
docker run -d --name web2 httpd:latest
docker ps 명령어를 통해 확인

다음은 CMD에 쉘 프로그램이 지정되어 있는 이미지로 os2 컨테이너를 실행한다
docker run -it --name os2 centos:latest

docker run 명령은 이미지에 지정되어 있는 애플리케이션만 실행하는 것이 아니라 사용자가 지정한 명령을 cmd로 지정할 수 있다. 물론 CMD에 지정하는 명령은 이미지에 존재해야 한다.
os3 컨테이너를 실행하면서 hostname 명령을 실행한다
docker run --name os3 centos:latest hostname
그리고 docker ps -a 명령으로 확인하면 해당 컨테이너가 종료된 것을 알 수 있다.

이는 hostname 이란 명령이 지속적으로 유지되는 프로세스가 아닌 한번 실행하고 종료되는 프로세스이기 떄문, 나중에 종종 이런 형태로 실행되는 컨테이너를 확인할 수 있는데, 이 컨테이너는 수동으로 삭제해야한다.
이 작업이 번거로우면 docker run 명령을 실행할 때 -rm 명령어를 함께 사용하면 편리하다. 앞으로 os3컨테이너는 필요가 없으므로 삭제하도록 한다.
docker rm os3
5) docker stats >>> 컨테이너의 실시간 상태를 확인할 수 있다.
옵션)
-a : 모든 컨테이너 확인
--no-stream : 스트리밍 출력 하지 않음
docker stats >> 실행중인 모든 컨테이너의 실시간 상태를 확인하는 명령어

자원을 제한하지 않았기에 메모리의 제한이 호스트의 메모리 사이즈와 동일한 것을 알 수 있다.
(2) 컨테이너 중지 및 제거
docker stop >> 실행중인 컨테이너를 중지하라 수 있다.
web1의 컨테이너를 중지한다.
docker ps -a 명령으로 web1 컨테이너의 상태를 확인한다.

17초전 exited된것을 확인할수 있다
web1 컨테이너를 다시 실행하려면 docker start 명령을 사용한다.
2) docker restart >> 컨테이너를 재시작할 수 있다.
docker restart os1 >> os1컨테이너를 재시작
docker ps 를 사용하여

21초전에 시작된것을 확인
3) docker rm >> 컨테이너를 삭제할 수 있다.
이전에 중지했던 web1 컨테이너를 docker rm 명령으로 삭제한다.
docker rm -f web1
docker ps -a | grep web1 >> 컨테이너가 삭제되었는지 확인한다.
다음은 실행중인 os1컨테이너를 삭제하려 시도하는 명령어
docker rm os1

docker rm 명령은 실행중인 컨테이너를 삭제할 수 없고 삭제하려면 stop을 먼저 실행하거나 docker rm -f 명령을 사용해야 한다.
os1컨테이너가 삭제되었는지 확인
docker ps | grep os1
(1) 환경변수
docker run 명령의 -e 옵션을 사용해 컨테이너의 환경변수를 설정할 수 있다.
다음은 centos:latest 이미지를 사용해 os3 컨테이너에 환경변수 LAB에 docker 값을 설정한다.
docker run -it --name os3 -e "LAB=docker" centos:latest

환경 변수를 확인한 뒤에 exit 명령으로 컨테이너를 종료하고 os3 컨테이너를 삭제한다.
docker rm os3
(2) CPU 제한
docker run 명령어의 --cpus옵션을 사용하면 코어의 수를 제한할 수 있다.
정수를 지정하는 방법이 있지만 소수점을 사용하는 방버비 일반적이다.
다음은 os3 컨테이너가 실행되는데 cpu자원을 30%만 사용하도록 한다. 컨테이너가 생성되면 dd 명령으로 부하를 발생시켜 확인한다.
docker run -it --name os3 --cpus 0.3 centos:latest
dd if=/dev/zero of=/dev/null & 이후
ctrl + p 누르고 q누른상태에서
docker stats os3 --no-stream
os3 컨테이너가 현재 cpu자원을 약 30% 사용하는 걸 알 수 있다 cpu 사용량의 백분율은 cpu코어 하나 당 100%씩 계산해야 한다. 만약 코어가 2개라면 최대 200%까지 사용할 수 있다. 확인이 끝나면 os3컨테이너를 제거한다
docker rm -f os3
(3) 메모리 제한
docker run 명령의 --memory 옵션으로 컨테이너가 사용하는 메모리를 제한할 수 있다. 메모리를 제한하지 않으면 호스트의 메모리의 사이즈만큼 사용할 수 있다. 다음은 os3 컨테이너를 생성하면서 메모리 사용을 1024M로 제한하는 명령어
docker run -itd --name os3 --memory 1024m centos:latest
docker stats os3 --no-stream

(4) 자원 제한 변경
docker update 명령을 상용해 제한된 자원을 변경하라 수 있다.
os3컨테이너의 메모리의 제한을 1400m 으로 변경한다
docker update --memory 1400m os3
docker stats os3 --no-stream 명령으로 바뀐것을 확인

확인이 끝나면 os3 컨테이너를 제거한다.
docker rm -f os3
'Docker(도커)' 카테고리의 다른 글
| Docker 이미지와 컨테이너 백업/복원 정리 (0) | 2025.12.18 |
|---|---|
| 도커 이미지 저장 및 로드 (0) | 2024.12.12 |
| 도커 실습연습(wordpress 사이트를 docker로 구축) (1) | 2023.06.29 |
| 도커(3일차) (0) | 2023.06.29 |
| 도커(2일차) (2) | 2023.06.27 |