해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Continaer Vs Container image


Container

  • 컨테이너는 하나의 Application 프로세스
  • 컨테이너는 완벽히 독립적인 공간에서 실행(Cpu, memory, network, disk 등등이 별도..)
  • docker Host ⇒ docker를 설치해서 daemon을 실행하는 것.(docker를 실행할 수 있는 platform 세팅)

Container image

  • build할 때 이 구조를 따라야 함.

Container와 Container image 도식화

  • Docker Host에 docker daemon 실행.
  • 하드 디스크에 file 형태로 container image들이 존재.
  • 메모리에 application이 running 중 ⇒ running 중인 프로세스(이미지) container

컨테이너 동작


  • 도커 허브에 여러 image들 저장.
  • docker search nginx를 하면 docker hub에 nginx 이미지를 가져옴
  • docker pull nginx:latest하면 nginx의 이미지를 docker hub에서 가져와 disk에 저장.
  • docker run -d —name web -p 80:80 nginx:latest으로 실행

용어정리

  • Docker Host(Linux Kernel): 도커를 실행한 client
  • Docker Daemon: docker가 실행되어 있는 환경
  • Docker Client Command:
  • Docker Hub: docker image 집합소
  • Container Images: disk로 가져온 image
  • Container: image를 실행한 Process

Docker Hub에서 컨테이너 이미지 검색


  • docker version
    • 현재 docker daemon 버전 확인
  • systemctl status docker
    • docker 상태 확인.
  • docker search <image>
    • docker hub에 해당 Image가 있는지 확인.
  • docker images
    • 내 컴퓨터 내 docker image 확인

  • docker pull <Image>
    • docker hub에 Image download
    • 다음과 같이 7개의 layer로 구성
  • docker run --name web -d -p 80:80 nginx
    • 독립적인 container id를 통해서 container 실행
  • docker ps
    • 현재 실행중인 docker process

  • docker stop web
    • web이라는 Image stop
  • docker rm web
    • 컨테이너 삭제
  • docker rm image web or docker rmi web
    • web이라는 Image 지우기
  • 현재 이미지를 사용하는 모든 컨테이너를 중지 및 삭제
    • docker stop $(docker ps -aq --filter ancestor=mv1-1/gis:latest)
    • docker rm $(docker ps -aq --filter ancestor=mv1-1/gis:latest)

Container Image layer


var/lib/docker/overlay2

image layer가 존재하는 디렉토리

docker run option

더보기
  • --name [컨테이너 이름] : 컨테이너 이름을 설정
  • -d (또는 --detach): 컨테이너를 백그라운드 모드로 실행. 이 옵션을 사용하면 컨테이너가 실행되고 나서도 현재 터미널 세션과 상호 작용하지 않고 백그라운드에서 동작.
  • -p (또는 --publish): 호스트와 컨테이너 간의 포트 매핑을 설정. '-p 호스트_포트:컨테이너_포트'와 같은 형식으로 사용되며, 호스트의 특정 포트를 컨테이너 내부의 포트와 연결하여 외부와 컨테이너 간 통신을 가능하게 함.
  • -v (또는 --volume): 호스트와 컨테이너 간의 볼륨 매핑을 설정. '-v 호스트_경로:컨테이너_경로'와 같은 형식으로 사용되며, 호스트의 경로와 컨테이너의 경로를 연결하여 데이터를 공유하거나 저장할 수 있게 함.
  • -e (또는 --env): 컨테이너 내부에서 사용할 환경 변수를 설정. '-e 변수=값' 형식으로 사용하여 컨테이너 내부의 프로세스에서 환경 변수를 사용할 수 있음.
  • -it (또는 --interactive와 --tty): 컨테이너와 상호 작용하는 대화형 모드로 컨테이너 내부의 터미널에 접속. 이 옵션을 사용하면 컨테이너 내부에서 명령어를 실행하고 터미널 세션을 유지할 수 있음.

참조

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (1) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
[Docker] Container를 쓰는 이유  (2) 2024.06.14
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

요구사항

💡 CPU: 2core, memory: 2GB이상
컴퓨터: (bareMetal 또는 Virtual Machine)
운영체제 필수

Virtualbox 설치 / VM 생성


VirtalBox 다운로드 후 설치

https://www.virtualbox.org/

 

Oracle VM VirtualBox

Welcome to VirtualBox.org! News Flash New May 3rd, 2024VirtualBox 7.0.18 released! Oracle today released a 7.0 maintenance release which improves stability and fixes regressions. See the Changelog for details. New April 16th, 2024VirtualBox 7.0.16 released

www.virtualbox.org

으로 이동 후 설치.

VirtualBox-Network 구성

  • NAT 네트워크 추가: 파일 - 환경설정 - 네트워크 - 추가
  • 네트워크 이름: localNetwork
  • 네트워크 CIDR: 10.100.0.0/24
  • DHCP 지원
  • 포트포워딩
    • 이름, 프로토콜, 호스트IP, 호스트포트, 게스트IP, 게스트포트 구성.
    • ex) docker1, TCP, 127.0.0.1, 105, 10.100.0.105, 22

가상머신 만들기

  • docker-ubuntu
    • CPU(2core), Memory(2GB), network(localNetwork), disk(20GB)
  • docker-centos
    • CPU(2core), Memory(2GB), network(localNetwork), disk(20GB)

Ubuntu 20.04 설치


https://ubuntu.com

 

Enterprise Open Source and Linux | Ubuntu

Ubuntu is the modern, open source operating system on Linux for the enterprise server, desktop, cloud, and IoT.

ubuntu.com

접속 후 ubuntu 설치.

시스템 -> 마더보드 -> 기본메모리 4GB로 설정(4096MB)

저장소 -> disk file -> 방금 설치한 파일 선택

시동디스크 -> iso 파일로 설치.

이후 리눅스 설치와 동일.

도커 설치


https://docs.docker.com/engine/install/

 

Install Docker Engine

Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.

docs.docker.com

접속 후 운영체제에 맞게(ubuntu 20.04) docs 확인.

설치방법

Repository를 이용하여 직접 설치

# 오래된 도커 버전 지우기
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

# apk setup
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# latest 버전 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 설치되었는지 확인
sudo docker run hello-world

# 도커 시작
systemctl start docker
docker version

# 도커 나가기
exit

# 도커 확인
docker ps
systemctl status docker

계정 추가

docker ps 명령어가 (권한문제로)동작안할 시 권한 추가

# 이후 암호 입력
su - 

# 권한추가
usermod -a -G docker <username>

su - <username>

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (1) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Container를 쓰는 이유  (2) 2024.06.14
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Container


시대가 바뀌어 가면서 애플리케이션은 점점 커지면서 소프트웨어 운영 플랫폼이 바뀜.

하드웨어는 용량은 커지고, 싸지며 성능 또한 좋아짐.

소프트웨어 운영 플랫폼이 바뀌는 중

소프트웨어 운영 플랫폼

  • Bare Metal
    • 하나의 시스템의 OS 위에 여러개의 Application을 띄워서 사용하는 형식. 
    • 예전 시스템 및 애플리케이션들은 용량을 많이 차지 하지 않았기 때문에 하나의 컴퓨터에서 동작하기도 충분했었음.
  • Virtualization(HypervisorX)
    • Virtal Machine을 이용하여(하나의 컴퓨터) 새로운 Application을 띄우는 형식.
    • 하나의 컴퓨터에서 가상 머신을 사용하여 여러개의 프로그램이 여러개의 컴퓨터에서 돌아가도록 하는 형식.
    • 하지만 가상화 플랫폼은 Scale-in / Scale-out 기능이 어려웠음.
  • Any Infrastructure
    • 하나의 서버를 여러개 띄우는 Scale-out / Scale-in 구조 적용 가능.
    • OS 위에 Container Engine
      • Docker는 Container Engine 중에 하나
      • container platform을 사용.
    • Container는 아주 적은 용량만 차지.
    • isolate된 공간에서 작동. => 확장 및 배포가 쉬움.

Container의 역할

Container 도식화

Container는 즉 App을 실행시키는 환경을 세팅하는 것.

App을 실행하는데 필요한 library, SW Platform(node.js, java 등...) 등을 독립된 공간에 대한 환경을 세팅해줌.

리눅스에서 돌려야 하는 이유


컨테이너는 리눅스의 커널 기능을 사용해야 함.

  • chroot
    • 독립된 공간 형성
  • namespace
    • isolate 기능 지원(6가지 독립 컨테이너를 위한 공간)
  • cgroup
    • 필요한만큼 HW 지원
  • 세가지 명령어로 커널 + 컨테이너를 만듦.
  • 리눅스 커널을 도커 플랫폼(컨테이너 플랫폼)에서 사용할 수 있도록 해주는 것이 컨테이너 엔진
💡 리눅스가 아닌 환경에서 docker를 실행하려면??
windows, macos에서는 Hypervisor(리눅스를 돌릴 가상환경) 활성화 후 그 위에 컨테이너 띄우기

프로그램 VS 컨테이너


하는 일은 프로그램과 컨테이너 둘이 같지만 구조가 다름.

// cat app.js

const http = require('http');
const os = require('os');
console.log("Test server starting...");
var handler = function(req, res) {
	res.writeHead(200);
	res.end("Container Hostname: " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);

이러한 코드가 있을 때

일반 프로그램

  • 일반 프로그램 
    • 해당 app.js를 실행시키기 위해
    • (운영체제에 맞는) node.js를 설치
    • 그 위에서 app.js 실행

컨테이너

 

  • 컨테이너
    • 컨테이너 구축 환경 설정
    • node 기반, app.js 실행
# DockerFile
FROM node:12
COPY app.js /app.js
ENTRYPOINT ["node", "app.js"]

 

Container를 사용하는 이유


개발자가 만든 프로그램이 어디서든 동작하도록.

운영환경과 배포환경이 다르기때문에 hw가 다르면 동일하게 돌아가지 않을 수 있음.

컨테이너화를 시키면 개발자가 만든 환경으로 어디서든 돌아갈 수 있음.

확장/취소가 쉽고, MSA, DevOps에 적합

컨테이너는 용량이 작음. 

작은 용량 덕분에 서비스 연속성 및 확장성, scale-out 용이

참조

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (1) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16

+ Recent posts