Jenkins란

  • 모든 언어의 조합과 소스 코드 레포지토리에 대한 CI/CD 환경을 구축하기 위한 도구
    • 빌드: 서버에 올릴 수 있는 상태로 만드는 것
    • 배포: 서버에 올려 사용자가 사용할 수 있게 하는 것
  • 기능: 컴파일 오류 검출, 자동화 테스트 수행, 정적 코드 분석으로 인한 코딩 규약 준수 여부 체크, 성능 변화 감시 등..

 EC2에 Jenkins 설치

#!/bin/bash

# this script is only tested on ubuntu focal 20.04 (LTS)

# install docker
sudo apt-get update
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
usermod -aG docker ubuntu

# run jenkins
mkdir -p /var/jenkins_home
chown -R 1000:1000 /var/jenkins_home/
docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -d --name jenkins jenkins/jenkins:lts

# show endpoint
echo 'Jenkins installed'
echo 'You should now be able to access jenkins at: http://'$(curl -4 -s ifconfig.co)':8080'
  • http://<EC2-ip>:8080 접속해서 Jenkins 들어가면 됨...

Jenkins 프로젝트(nodejs) 빌드 테스트

  • 원하는 프로젝트 이름 설정

  • 소스코드 추가 - git 주소 적으면 됨

  • 빌드 스텝 추가

  • NodeJS 설정을 위한 Jenkins 관리 - Tools 설정

  • 빌드 환경 설정

  • 지금 빌드 클릭

[확인]


Docker로 애플리케이션 배포 

  • Jenkins Plugin: CloudBees Docker Build and Publish 설치
  • Jenkins Docker: Jenkins 컨테이너가 Docker API와 통신할 수 있는 Docker socket에 접근할 수 있게..
# Dockerfile
FROM jenkins/jenkins:lts
USER root

RUN mkdir -p /tmp/download && \
 curl -L https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz | tar -xz -C /tmp/download && \
 rm -rf /tmp/download/docker/dockerd && \
 mv /tmp/download/docker/docker* /usr/local/bin/ && \
 rm -rf /tmp/download && \
 groupadd -g <998> docker && \
 usermod -aG staff,docker jenkins

USER jenkins
# groupadd 의 숫자는 cat /etc/group | grep docker 로 확인
# git clone 
cd jenkins-docker
docker build -t jenkins-docker .

docker stop jenkins # 기존의 jenkins 종료
docker rm jenkins

docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -d jenkins-docker
docker exec -it jenkins bash
  • docker repository 생성

  • build step 추가

  • 지금 빌드 클릭

[해당 환경 테스트]

docker pull realyun99/docker-nodejs-demo
docker run -p 3000:3000 -d --name my-nodejs-app realyun99/docker-nodejs-demo
# EC2 보안그룹 포트도 열어주기!(3000)

 

'Computer Science > DevOps' 카테고리의 다른 글

[Jenkins] 다양한 플러그인 활용  (0) 2023.07.24
[Jenkins] Jenkins Pipeline 구축  (0) 2023.07.03
[OS] OS 모음집  (0) 2021.08.12
[CI/CD] Tool  (0) 2021.08.11
[CI/CD] 정의  (0) 2021.08.11

https://linuxcontainers.org/lxd/introduction/

 

Linux Containers - LXD - Introduction

What's LXD? LXD is a next generation system container and virtual machine manager. It offers a unified user experience around full Linux systems running inside containers or virtual machines. It's image based with pre-made images available for a wide numbe

linuxcontainers.org

https://github.com/lxc/lxd

 

GitHub - lxc/lxd: Daemon based on liblxc offering a REST API to manage containers

Daemon based on liblxc offering a REST API to manage containers - GitHub - lxc/lxd: Daemon based on liblxc offering a REST API to manage containers

github.com

LXD(Linux Container Daemon)

  • LXC + security
  • Unprivileged container
  • Machine container
  • Container Hypervisor
  • 도커와 병행 가능
  • 요소
    • Daemon(Server), Command Line Client, Openstack Nova Plugin
  • kvm을 경쟁자로 본다.

'Container' 카테고리의 다른 글

[oslab] LXC  (0) 2021.09.13
[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11

"Docker는 LXC라는 컨테이너 기술을 기반으로 만들어진 상위레벨의 컨테이너 기술"

https://linuxcontainers.org/

 

Linux Containers

LXC LXC is a well-known Linux container runtime that consists of tools, templates, and library and language bindings. It's pretty low level, very flexible and covers just about every containment feature supported by the upstream kernel. LXC is production r

linuxcontainers.org

https://github.com/lxc/lxc

 

GitHub - lxc/lxc: LXC - Linux Containers

LXC - Linux Containers. Contribute to lxc/lxc development by creating an account on GitHub.

github.com

 LXC(Linux Container)

  • 단일 리눅스 시스템에 동작하고 있는 프로세스를 격리시켜 각 프로세스마다 독자적인 리눅스 시스템 환경을 구축하는 것 ⇒ "OS 수준에서의 가상화"
  • Cgroups와 namespace를 결합하여 고립된 환경을 제공
  • LXC에서 가상화된 프로세스들은 모두 리눅스 시스템을 호환해야한다.
  • 장점
    • 특정 애플리케이션 환경만 따로 간편하게 구축 가능
    • 상대적으로 가볍다. Hypervisor를 이용하지 않아 오버헤드 발생이 적음.

 

'Container' 카테고리의 다른 글

[oslab] LXD  (0) 2021.09.13
[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11

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

 

Swarm mode overview

 

docs.docker.com

 

Docker Swarm

  • docker container를 위한 클러스터링, 스케줄링 툴
  • 여러 개의 서버와 컨테이너 관리를 쉽게
  • 기능
    • docker engine 통합 관리(docker manager node에서 worker node를 통합 관리)
    • load balancing(worker node 접속 시 round robin 방식으로 worker node의 task를 연결)
    • task 개수 조절 기능(scale)
    • multi-host-networking(overlay network를 통해 task 간 사용할 수 있는 네트워크 제공)
    • 내장 DNS 서버 제공
  • 종류
    • docker warm mode: manager-node와 worker-node가 한 host에 공존
    • docker swarm: manager-node와 worker-node를 따로 구성(대규모)

docker swarm mode 물리적 구조

 

docker swarm mode의 load balancing

- 외부에서 어떤 host에 접근 하더라도 IPVSingress network를 사용하여 worker-node들이 제공하는 모든 task에 접속 가능

 

Docker Swarm Node

  • 도커나 스웜 모드에서 돌아가는 도커 서버
  • manager node / worker node

Manager node

  • 클러스터의 상태를 유지(뗏목 합의 알고리즘: 여러 서버 중 일부에 장애가 생겨도 나머지 서버가 정상적인 서비스를 할 수 있도록)
  • 스케줄링 서비스: worker node에게 컨테이너 배포
  • 스웜 모드 제공: docker swarm init

Worker node

  • 하나 이상의 manager node를 가짐
  • docker service create로 도커 스웜 실행("service 제공")
# 노드 상태를 drain으로 변경한다.
docker node update --availability drain <노드ID>

# 노드의 가용성을 확인한다.
docker node inspect --pretty <노드ID>

 

스케줄러가 매니저 노드에게 작업자 노드가 하는 task를 실행시키지 않기 위해서 매니저 노드의 가용성을 drain

스케줄러는 drain 상태의 노드에는 task를 맡기지 않고 active상태의 노드에게만 task 할당

'Container' 카테고리의 다른 글

[oslab] LXD  (0) 2021.09.13
[oslab] LXC  (0) 2021.09.13
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11

https://docs.docker.com/machine/

 

Docker Machine overview

 

docs.docker.com

 

Docker Machine

  • Dokcer Engine을 클라우드 컴퓨터, VM을 비롯한 원격지의 서버에 설치할 수 있도록 돕는 도구
  • 일반적으로 로컬 시스템에 Docker Machine을 설치하고 원격지 서버에는 Docker Engine을 설치하고 로컬과 통신

" Virtual Machine에 Docker 설치하고 이와 쉽게 통신하게 하는 프로그램"

 

사용법

https://kin3303.tistory.com/26

 

20. Docker Machine

Docker Machine Docker Machine 은 Docker Engine을 사용자 로컬 머신이 아닌 클라우드 컴퓨터, VM 을 비롯한 원격지의 서버에 설치할 수 있도록 돕는 도구이다. 1. Docker Engine이있는 호스트를 프로비저닝하고.

kin3303.tistory.com

❗ 실습은 차차 해보는 걸로 ❗

'Container' 카테고리의 다른 글

[oslab] LXC  (0) 2021.09.13
[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11
[Docker] Docker 구조  (0) 2021.09.11

https://docs.docker.com/compose/

 

Overview of Docker Compose

 

docs.docker.com

 

Docker Compose

  • 여러 개의 docker를 정의하고 실행하는 툴
  • YAML 파일로 여러 개의 docker 내부 속성을 설정하고 한 번에 실행시킴.
  • docker를 배치로 한 번에 실행시키는 것
  • 장점
    • Multiple isolated environments on a single host
    • Preserve volume data when containers are created
    • Only recreate containers that have changed
    • Variables and moving a composition between environments

사용법

docker-compose.yml 파일 생성

version: "3.8"
services:
	echo:
    	image: example/echo:latest
        ports:
        	- 9000:8000

version: 내용 해석을 위한 문법 버전(최신 버전이 좋다, https://docs.docker.com/compose/compose-file/)

echo: services 아래의 echo는 하나의 컨테이너

image: 도커 이미지

ports: 포트 포워딩

 

docker compose 실행

docker-compose up

 

컨테이너 종료

docker-compose up -d
docker-compose ls
docker-compose down

down 명령어로 한 번에 종료

 

(관련 명령어 정리)

https://www.daleseo.com/docker-compose/

 

Docker Compose 커맨드 사용법

Engineering Blog by Dale Seo

www.daleseo.com

 

'Container' 카테고리의 다른 글

[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11
[Docker] Docker 구조  (0) 2021.09.11
[Docker] 개념  (0) 2021.09.11

+ Recent posts