docker-swarm은 추가적인 설치 필요없이 docker만 있다면 바로 사용할 수 있다.


매니저 노드로 사용할 노드에서 swarm 시작

$ docker swarm init --advertise-addr 10.0.1.105

이 명령어로 스웜 클러스터를 시작한다. 이어서 발급되는 join-token이 포함된 명령어를 복사해 워커 노드로 사용할 노드에서 실행시키면 클러스터의 구성원이 된다.


 

이니셜라이징 이후에도 아래 명령어를 통해 join-token 확인 가능

$ docker swarm join-token manager

join-token 재발급 (join-token이 외부에 노출됨 등의 이유로)

$ docker swarm join-token --rotate manager

정보 출력

$ docker info

클러스터에서 떠나기 (STATUS=Down)

$ docker swarm leave

global 모드 생성은 모든 노드에 하나씩 배포. 모니터링 에이전트 설치 등에 용이

$ docker service create --name global_web --mode global nginx

 

 

 

'IT > Docker' 카테고리의 다른 글

[Docker Compose] 설치 방법 및 기본 명령어  (1) 2021.12.14
[Docker] Container Resource Management  (0) 2021.12.14
Virtualization with Docker  (0) 2021.10.30
Docker Labs  (0) 2021.10.27

docker-compose가 필요한 이유

기존 docker 명령만으로 수많은 옵션을 붙여 컨테이너를 올리는 방식은 번거롭고 불편할 뿐만 아니라 휴먼 에러의 가능성이 크다. 그렇기 때문에 yaml 파일로 미리 정의해두고 한꺼번에 여러 컨테이너를 올릴 수 있는 docker-compose의 사용을 고려해야 한다.

 

docker-compose로 컨테이너 올리기

1. Dockerfile을 이용하여 이미지를 생성한다.

2. docker-compose.yml에 환경을 정의한다.

version: '3'

services:
  nginx:
    image: nginx
    ports:
      - 8080:80
    volumes:
      - ./:/usr/share/nginx/html/

3. docker-compose up -d 명령어로 컨테이너로 만든다.

 

docker-compose 설치

$ curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 

$ chmod +x /usr/local/bin/docker-compose

 

$ docker-compose --version

 

docker-compose 명령어

기본적으로 up, down 제외 docker 명령어와 같다.


컨테이너 최초 실행

$ docker-compose up -d

컨테이너 중지 및 종료(stop & kill)

$ docker-compose down

작동중인 프로세스의 상태를 확인

$ docker-compose ps

이미지 가져오기

$ docker-compose pull

로그 확인

$ docker-compose logs [service_name]

docker-compose.yml에서 작성했던 services 항목을 말한다.


컨테이너 추가 생성

$ docker-compose run -d [service_name]

이런 식으로 반복하여 여러 개의 같은 서비스의 컨테이너 생성 가능


필요한 이미지를 강제로 빌드

$ docker-compose up --build

컨테이너 강제 재시작

$ docker-compose up --force-recreate

컨테이너 자원 사용량 확인

$ docker inspect [container_name]

컨테이너 자원 변경

$ docker update [resource_update] [container_name]

resource_update 예시 :  --cpuset-cpus=0-4(cpu 개수 지정)


도커 데몬에서 실행되는 명령어의 결과를 로그로 출력

$ docker events

실행 중인 모든 컨테이너의 자원 사용량을 스트림으로 출력

$ docker stats

--no-stream 옵션을 붙여 그 순간의 로그만 볼 수 있음


이미지, 컨테이너, 로컬 볼륨의 개수 및 크기 등의 정보 출력

$ docker system df

cAdvisor 사용 방법

$ sudo 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 \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor:$VERSION

위 명령어 실행 후 8080포트로 접속

'IT > Docker' 카테고리의 다른 글

[Docker Swarm] docker-swarm 설치 및 기초  (0) 2021.12.15
[Docker] Container Resource Management  (0) 2021.12.14
Virtualization with Docker  (0) 2021.10.30
Docker Labs  (0) 2021.10.27



 


유튜브 DDABAE-LEARN 채널의 영상 내용 참고

'IT > Docker' 카테고리의 다른 글

[Docker Swarm] docker-swarm 설치 및 기초  (0) 2021.12.15
[Docker Compose] 설치 방법 및 기본 명령어  (1) 2021.12.14
Virtualization with Docker  (0) 2021.10.30
Docker Labs  (0) 2021.10.27

Docker Summary

리눅스 컨테이너 기반의 오픈 소스 가상화 플랫폼.

도커 컨테이너 이미지는 운영체제에 구애받지 않고, 새롭게 패키지를 설치할 필요도 없으며, 각종 라이브러리에 대한 의존성의 문제 또한 걱정할 필요가 없다. 만든 컨테이너를 다른 서버로 그대로 옮겨다 놓으면 환경, 모듈 등이 그대로 적용되기 때문에 별도의 환경설정도 필요하지 않다.

 

도커 컨테이너들은 HostOS로부터 GuestOS로 물리적 리소스를 1/n로 나누어 할당받는 것이 아닌 HostOS의 리소스를 다이렉트로 접근해 모든 컨테이너가 공유하며 사용하기 때문에 다른 가상화 방법에 비해 속도가 매우 빠르고 효율적이다.

 

도커는 Layered File System 기반이다. 마치 포토샵처럼 레이어 단위로 컨테이너 이미지를 생성하며, 이 컨테이너들은 서버 위에서 각각 하나의 프로세스처럼 작동하지만 컨테이너 자신은 스스로가 운영체제인 것처럼 생각한다.

 

각 도커 컨테이너는 서로 간에 절대적으로 격리(Isolated)되어 있어 한 컨테이너에 어떤 변화가 발생하더라도 다른 컨테이너에 영향을 주지 않는다.


Registry, Images, Containers, Commands and Daemon in Docker

  • Public과 Private Registry 중 Public Repository를 Docker Hub라고 부르며, Docker Hub에서 이미지를 올리는 것을 Push, 이미지를 받아 오는 것을 Pull이라고 한다. Pull한 이미지는 /var/lib/docker/overlay2에 저장된다.
  • Build는 직접 이미지를 생성하는 것인데 여러가지 베이스 환경을 설정해서 이미지 파일을 만든 후에 Run을 하여 프로세스에 올려 컨테이너로 만들거나 Docker Hub로 Push 할 수 있다.
  • Run은 이미지를 실행하는 명령어인데 이미지가 없을 경우 Pull로 레지스트리에서 이미지를 받아온 후 Run, Start까지 한다. Run을 하게 되면 최대 3가지 처리가 동시에 이루어지고 이미지가 비로소 컨테이너가 되고 프로세스에 올라가게 된다.
  • 실행되고 있는 컨테이너를 Commit해서 현 상태를 이미지로 만들어 Docker Hub로 Push 할 수 있다.
  • 메모리에 올라간 컨테이너를 Kill하면 컨테이너의 프로세스가 종료된다.
  • 메모리에 올라가면 컨테이너(read/write), 올라가지 않은 상태면 이미지(read only)이다.
  • 이 모든 것을 백그라운드에서 실행하고 관리하는 서비스를 dockerd(Docker Daemon)이라고 한다.
  • Docker Daemon을 돌리는 머신은 Docker Host라고 한다(Linux Server).

아래는 Docker Hub의 링크인데 Official Image 인증 마크가 있는 이미지는 안전하지만 그 이외의 이미지는 안전을 보장할 수 없다.

 

https://hub.docker.com 

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.

hub.docker.com


레이어화 된 컨테이너 이미지

도커의 컨테이너 이미지는 3단의 레이어로 구성되며, 각 레이어는 고유의 UUID(Process ID)를 갖고 있다.

  • Base Image Layer
    • 주로 가상적으로 OS를 구성하는 레이어.
    • 컨테이너의 가장 밑단, 배경이 되는 환경이 구축된다. 컨테이너의 냉동 설비라고 볼 수 있다.
  • Source Code Layer
    • 실행할 소스 코드가 위치하는 레이어.
    • 컨테이너에 싣는 도구라고 볼 수 있다.
  • Execution Layer
    • 실제로 소스 코드를 실행하는 레이어.
    • 컨테이너의 도구를 사용하게 되는 레이어이다.

'IT > Docker' 카테고리의 다른 글

[Docker Swarm] docker-swarm 설치 및 기초  (0) 2021.12.15
[Docker Compose] 설치 방법 및 기본 명령어  (1) 2021.12.14
[Docker] Container Resource Management  (0) 2021.12.14
Docker Labs  (0) 2021.10.27

먼저 Ubuntu Server의 iso 이미지를 다운로드 받아서 Oracle VirtualBox에 가상 머신을 만들었다.

설치 방법 및 기본 설정은 이전 게시글에 있으니 링크를 걸어둔다. 하지만 이번 실습에선 아래 글과 같이 하나하나 설정하지 않고 대부분 기본 설정으로 빠르게 만들었다. 또한 네트워크 인터페이스 카드도 NAT 하나만 설정했다.

 

https://yoonhoji.tistory.com/3?category=1042734 

 

210817 - 첫 수업 / 가상화 프로그램과 우분투 리눅스 설치

가상화 프로그램은 HostOS 위에서 GuestOS를 실행시켜 동시에 여러개의 OS를 사용할 수 있게 해주는 프로그램이다. Megazone Cloud에서 제공해 준 랩탑은 Windows 10 환경이며, 여러 가상화 프로그램 중 무

yoonhoji.tistory.com

 


Configure Ubuntu Server

먼저 인터넷 연결을 확인한다.

sudo apt update

 

NetworkManager를 설치한다.

sudo apt install -y network-manager

sudo systemctl status network-manager

 

포트 포워딩 적용을 위해 위에 첨부한 글을 참고해 설정해준다.

포트포워딩 & NAT Network 설정

 

시스템 설정 파일인 yaml 파일을 백업해둔다.

cd /etc/netplan

sudo cp 00-installer-config.yaml 00-installer-config.yaml.bak

 

sudo nano 00-installer-config.yaml

두 칸씩 들여쓰기에 주의하며 yaml 파일에 고정 IP 주소를 할당한다. 수정을 완료했다면 Ctrl+O로 덮어쓰고, Ctrl+X로 nano editor를 빠져나가면 된다.

 

sudo netplan try

(Enter)

sudo netplan apply

sudo systemctl stop network-manager

sudo systemctl start network-manager

sudo systemctl stop network-manager

sudo systemctl start network-manager

 

NetworkManager를 몇 번 재부팅 해 주고 난 뒤 인터넷 연결을 확인하기 위해 업데이트를 해본다.

sudo apt update

만약 여기서 인터넷 연결이 안 되었다고 나온다면 게이트웨이로 핑을 쳐 봐야 한다.

ping 10.0.2.1

ping 10.0.2.2

ping 10.0.2.3

이 정도로 확인해보면 첫 번째는 연결이 안 될 것이고 2번이나 3번에 핑이 닿는다면 아까 정적으로 IP 주소를 할당해 주었던 단계로 돌아가서 gateway4 부분을 수정해주고 이후의 과정을 수행하고 난 뒤 다시 업데이트를 해 본다.

sudo apt update

 

인터넷 연결이 정상적으로 되었다면 hostname을 수정한다.

cd $HOME

sudo nano /etc/hostname

위와 같이 설정하고 저장한다.

 

sudo nano /etc/hosts

위와 같이 두 번째 줄의 hostname을 변경하고 저장한다.

 

그리고 핑을 쳐서 호스트 네임이 정상적으로 인식되고 있는지 확인한다.

 

Client Tool로 접속하기 위해 SSH를 설치한다.

sudo apt install -y openssh-server

 

HOST를 잡아준다.

export HOST=docker-ubuntu

 

Firewall 설정은 생략했다.

 

그리고 클라이언트 툴(XShell, putty, SecureCRT 등)으로 접속한다.

127.0.0.1:105


Install Docker Engine

우분투 서버 환경 구성은 완료됐고 이제부터 Docker Engine을 설치한다.

 

Install Docker Engine on Ubuntu | Docker Documentation

 

Install Docker Engine on Ubuntu

 

docs.docker.com

아래 정리한 명령어들은 위의 문서에서 그대로 가져온 것이다.

복사, 붙여넣기로 진행하는 것을 추천.

 

 

sudo apt-get update 

sudo apt-get install ca-certificates curl gnupg lsb-release

 

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

sudo apt install docker-ce docker-ce-cli containerd.io

sudo systemctl status docker

sudo docker version

sudo docker run hello-world

 

Lab 1 - Ubuntu, Git in Docker Container

아래 이미지와 같이 Base Image로 Ubuntu Server를 Pull & Run하고 그 Ubuntu 위에 Git을 Install 한다.

sudo docker pull ubuntu

sudo docker image ls

 

Run 명령어로 Pull 까지 한 번에 한다.

sudo docker run -it --name git ubuntu:latest bash

(i : Interactive, t : Tty)

 

apt update

apt install -y git

git --version

exit (도커 프로세스 종료)

 

sudo docker ps -a

 

sudo docker commit git ubuntu:git

sudo docker images

 

sudo docker run -it --name git2 ubuntu:git bash

git --version

exit

 

sudo docker rm git2

sudo docker rm git

sudo docker rm 7e1 (CONTAINER ID의 앞 3자리)

 

Lab 2 - Nginx Web Server in Docker Container

(관리자 로그인)

su -

 

docker search nginx

docker pull nginx

 

이미지 레이어 확인하기

cd /var/lib/docker/overlay2

ls -l

Nginx는 총 6개의 레이어로 이루어져 있음을 알 수 있다 (l은 디폴트).

 

Nginx를 Run해서 메모리에 프로세스로 올려 Container로 만든다.

docker run -d --name webserver -p 80:80 nginx:latest

 

이제 실제 OS인 Windows에서 브라우저를 열고 192.168.56.100:80으로 접속하면 Nginx 웹 서버가 나온다.

+ Recent posts