Burninghering's Blog
article thumbnail
Published 2022. 4. 22. 16:53
220422_Docker와 Kubernetes AI School

DevOps : 'DevOps'는 'development(개발)'와 'operations(운영)

DevOps는 신속한 고품질 서비스 제공을 통해 비즈니스 가치와 대응력을 향상시키기 위한 기업 문화, 자동화, 플랫폼 설계에 대한 접근 방식.

이러한 접근 방식은 빠르게 반복적으로 IT 서비스를 제공하는 역량이 있어야 가능

DevOps는 레거시 애플리케이션과 최신 클라우드 네이티브 애플리케이션 및 인프라를 연결하는 것을 의미

 

DevOps는 하나의 아이디어(새로운 소프트웨어 기능, 개선 요청 또는 버그 수정 등)가 사용자에게 가치를 제공할 수 있도록 운영 환경에서 개발로부터 배포로 진행되는 프로세스의 속도를 높이는 접근 방식을 의미

이러한 접근 방식을 적용하려면 개발 팀과 운영 팀이 자주 커뮤니케이션하고 팀원들과 공감하면서 업무에 접근해야 함 확장성과 유연한 프로비저닝도 필요하다.

DevOps를 확립하면 셀프 서비스와 자동화를 통해 다양한 이점과 경쟁력을 얻을 수 있습니다.

대개 표준 개발 환경에서 코딩 작업을 하는 개발자는 IT 운영 담당자와 긴밀하게 협력하여 소프트웨어 빌드, 테스트, 출0시 속도를 가속화할 수 있다.

 

컨테이너는 DevOps를 통해 어떤 작업을 할까요?

DevOps는 아이디어 개발에서 배포에 이르는 프로세스를 가속화합니다.

그 중심에서 DevOps는 애플리케이션 라이프사이클 전반에서 일상적인 운영 태스크 자동화와 환경 표준화를 사용합니다.

컨테이너는 표준화된 환경을 제공할 수 있으나 이를 관리하기 위해서는 모든 인프라에 대한 지원 및 빌트인 자동화를 제공하는 플랫폼이 필요합니다.

Red Hat OpenShift 4는 DevOps 이니셔티브를 지원하기 위한 엔터프라이즈급 쿠버네티스 플랫폼입니다.

 

DevOps 이해 - 데브옵스(또는 Dev Ops) 개념, 프로세스, 특징

DevOps (또는 Dev Ops)란 고급 서비스를 더욱 신속하게 제공하여 비즈니스 가치와 대응력을 향상시키는 기업 문화, 자동화, 플랫폼 설계에 대한 접근 방식을 뜻합니다.

www.redhat.com

 

 

 

Release : 버전 붙이기

Deploy : 배포(유저가 사용할 수 있도록)

Operate : 운영

Monitor : 모니터링

Plan : 기획

Code : 개발

Build

Test

이러한 순환이 최대 50번까지도 일어날수 있다.

품질 관리는 빠른 업데이트를 하는 것이기 때문에

 

CI CD

C : Continuos 지속적인

I : 코드가 지속적으로 통합됨, Intergration

D : Deployment 배포

 

코드가 계속 지속적으로 통합되고 배포된다. -> 이것을 아우르는 것은 GIT!

 

컨테이너

PC가 있다면, 컨테이너를 하나 넣는다.

컨테이너에 나의 개발환경(파이썬, 버전, 소프트웨어 등)을 집어넣는다.

그렇다면 실제로 운영하는 서버에는 컨테이너를 날린다.

그렇다면 모든게 컨테이터에서 실행할 수 있도록 하는 것이 컨테이너이다.

 

 

내가 소스코드를 짠다면 Git으로 관리한다.(로컬 하드디스크에 데이터를 넣고 뺏는 작업을 Git으로 하는 것이다)

만약 내 소스코드를 공유하고 싶다면 인터넷 상의 Github에 소스코드를 올린다.

그래서 Git에서 Github에 내용을 업데이트하게 된다.

이러한 소스코드를 관리하는 매커니즘이라고 한다면,

 

Docker

컨테이너를 관리하는 매커니즘은 Docker라고 한다.

Docker도 어딘가에 저장되어있다면(Github처럼) 좋으니, Doker Hub라고 부른다.

Git - Github와 똑같이, 배포/운영하는 것이 가능하다.  

가상화 기술과 도커의 차이점을 말하고 있다.

일반적으로 가상화라는 것은, Host Operating System이 있다. 그리고 그 위에 가상 PC들이 하나씩 있을 것이고 그 PC안에 OS가 들어간다. 그 위에 실행되는 것을 말한다.

 

도커 컨테이너는, Host Operating System 위에 도커 엔진이 있고 바로 실행이 된다.

 

그러므로 도커가 가상화보다 훨씬 더 가벼운 방법들을 제공한다. 

도커 엔진 : PC에서 도커를 실행하는 것을 도커 엔진이라고 한다. 도커엔진을 사용하면 도커를 생성하고, 실행하는 것이다.

 

이미지 : 환경 자체를 처음부터 만들어야 하는 것은 아니고, 이미 누군가 세팅한 것을 컨테이너로 넣을 수 있는 것이 이미지이다.

 

Registry Serivce : 개발하기 위해 모든 것이 세팅되어있는 작은 환경 (Docker hub)

SSH(Secure SHell)

시큐어 셸(Secure SHell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다.

기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.

암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.

 

 

실습

1. 우분투 리눅스 환경을 먼저 만든다. 

 

2. PuTTY로 가상머신에 접속한다.

 

3. 환경 세팅

sudo apt-get update
sudo apt-get upgrade

 

4. 도커 설치

sudo apt-get install \
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

5.도커 사이트 연결하기

echo \
"deb [arch=amd64 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

소스 리스트에다 도커 리스트를 업데이트함 (해당되는 경로에 대해 업데이트)

도커라는 단어가 들어왔을 때 적힌 주소에 가서 확인할 것이라고 알려주는 명령어 

 

6. 도커 엔진 설치

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
//위 코드 한꺼번에 실행!

 

7. 도커 실행

sudo docker run hello-world

 

8. sudo를 안쓰고도 일반인에게 권한 주기

 

sudo usermod -a -G docker $USER

 

9. 도커 Restart

sudo service docker restart
exit

 

일반인에게도 권한 주게 되었다!


1. 도커에서 실행 되고 있는 것들 확인하기

docker ps -all
docker ps -a
//둘 다 같은 명령어임

2. 도커에서 이미지 다운받기

필요한 이미지들을 당겨온다

docker pull ubuntu:18.04

3. 도커에 설치된 이미지 목록 확인하기

docker images

4. 이미지를 컨테이너 위에 올리면, 컨테이너의 이름을 정해주어야 한다.

docker run --name demo1 ubuntu:18:04 //컨테이너 이름은 demo1, ubuntu를 가지고 온다

5. 도커를 실행시키며, 도커를 접속해서 대화형(interactive)으로 작업할 것이다.

docker run -it --name demo2 ubuntu:18.04 /bin/bash

Bash은 Bourne Again Shell의 축약어이다. 이것은 원래의 Bourne 쉘과 호환이 가능하며 명령 라인 편집과 같은 몇 가지 점에서 기능이 향상되었다[역자 주: Bash 쉘은 Bourne 쉘에서 작성된 프로그램을 수행할 수 있으며, Bourne 쉘 보다 더 많은 기능을 제공한다]. 또한 Bash 쉘은 리눅스 쉘이며 리눅스에서 가장 널리 사용되는 쉘이다. 쉘이 무엇인지 모르는 사람이 있을지도 모르니 설명하기로 하자. 쉘이란 사용자와 커널 사이의 매개체 역할을 하는 프로그램이다[역자 주: 쉘은 사용자로부터 명령을 받아서 그것을 프로세싱하기 위해 커널에게 넘겨주는 일을 하는 프로그램이다]. 대부분의 리눅스 소프트웨어같이, bash도 상세한 부분까지 설정할 수 있다.

 

6. 내 현재 디렉터리 위치 보기

ps

7. 현재 디렉토리의 파일 목록을 확인

ls -al

8. 도커 실행 : -d 옵션 / --name 이름 / 불러올 이미지

docker run -it -d -name demo3 ubuntu:18.04
//종료되지 않고 프로세스를 계속 돌게 해주는 것을 demon이라고 함

9.어떤 프로세스/이미지가 떠 있는지 확인하기

docker ps

10. 도커의 demo3 이미지에 bin파일 아래의 bash로 바로 접속하겠다!

docker exec -it demo3 /bin/bash

#은 관리자 권한을 뜻함

11. 컨테이너는 ps 명령으로 보면 계속 떠 있다.

12. 도커 컨테이너의 기록 남기는 옵션들 살펴보기

docker logs --help

13.

$ docker run --name demo5 -d busybox sh -c "while true; do $(echo date); sleep 1; done"
//busybox를 사용하여 데몬을 사용, shell을 사용할 것이다 
//while ture로 무한히 반복 시킨다
//반복하는 동안 do문 안에 있는 것을 실행시킬 것인데
//echo는 shell에서 print문과 같다
//date는 날짜를 찍는 것이다
//sleep이 뭐야
//done 끝

 

14. 도커 컨테이너 기록 보기

docker logs demo5

15. 종료시키기 : ctrl+c

16. 백그라운드에서 이미지를 실행시키기

docker logs demo5 -f 
//리눅스에서 실행된 기록들을 다 기록하는데,

17. 컨테이너 중단시키기

docker stop demo3

18. 컨테이너 삭제하기

docker rm demo1

컨테이너는 삭제시켰지만,

이미지는 그대로 존재한다.

이미지를 삭제해야 완전히 삭제되는 것이다.

 

19. 이미지 삭제하기

컨테이너를 만들 때 이름을 설정해주면 default 이름으로 설정되므로, 이름을 확인하고 삭제해주자 

그러고 나서 이미지 삭제해주기

docker rmi hello-world

1. 현재 위치해있는 디렉토리 확인하기

pwd

2. 디렉터리를 만드는 명령어

mkdir 디렉토리 이름

3. 디렉터리 내 목록 보기

ls -al

4. 빈 파일 하나 만들기

touch 파일 이름

5. vi 에디터로 파일 수정하기

vi 파일 이름

6. 이미지를 파일로 만들어놓고 한방에 이미지 세팅하기

//I를 누르고 INSERT모드로 진입

FROM ubuntu:18.04

RUN apt-get update  //컨테이너가 실행되자마자 실행되는 명령어들 쓰기(업데이트 되게 함)

CMD ["echo","Hello Docker"]

//esc 키 누르고 : 누름 
//w는 쓰기 명령
//q는 나가기 명령
//wq는 쓰고 나가기 명령

도커 파일안에

도커 이미지를 생성하고

이미지를 가지고 실제 컨테이너를 만들어서 올리는 순서대로 작업을 하게 될것이다

 

7. 도커 이미지를 빌드하자!

docker build -t my-image:v1.0.0 .
//맨 끝의 .은 현재 디렉토리를 뜻함

 

8. 특정 이미지 확인하기

docker images | grep my-image
// | 를 유닉스에서 파이프라고 부른다

 

9.도커 이미지 실행하기

docker run my-image:v1.0.0

 

레지스트리에 도커 이미지를 차곡차곡 쌓아놓을 수 있다. 레지스트리가 Git과 같은 역할을 해준다.

도커 허브에 이미지를 쌓은 레지스트리를 보관할 수 있다.

 

10.

docker run -d -p 5000:5000 --name registry registry
//로컬 레포지터리(저장소)를 레지스트리라고 부름
//5000번 포트에다가 레지스트리를 만드는 명령어이다

11. localhost:5000 이라는 registry 에 어떤 이미지가 저장되어 있는지 리스트를 출력하는 명령

curl -X GET http://localhost:5000/v2/_catalog

12. my-image 라는 이미지 네임에 어떤 태그가 저장되어있는지 리스트를 출력하는 명령

curl -X GET http://localhost:5000/v2/my-image/tags/list

1. Docker hub 웹사이트와 연결하기

docker login

2. 이제는 로컬의 레지스트리가 아니라, 인터넷 상에 있는 도커 허브와 연결시키자

docker tag my-image:v1.0.0 burninghering/my-image:v1.0.0

3.도커 허브 인터넷에 내 이미지 날리기

docker push burninghering/my-image:v1.0.0


Mini Kubernetes 설치하기

curl -LO https://storage.googleapis.com/minikube/releases/v1.22.0/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

 

쿠버네티스에 명령을 보내는 명령어 도구 다운받기

curl -LO https://dl.k8s.io/release/v1.22.1/bin/linux/amd64/kubectl

 

설치하면서 루트 권한 주는 작업

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

 

잘 설치되었는가 확인

kubectl --help
minikube start --driver=docker

 

지금 현재 실행중인 pod를 볼 수 있음

kubectl get pod -n kube-system

apiVersion: v1 # kubernetes resource 의 API Version
kind: Pod # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: counter
spec: # 메인 파트 : resource 의 desired state 를 명시
containers:
- name: count # container 의 이름
image: busybox # container 의 image
args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done'] # 해당 image 의 entrypoint 의 args 로 입력하고 싶은 부분

'AI School' 카테고리의 다른 글

AI-900_Introduction to AI  (0) 2022.04.27
AI Schoo_AI-900 머신러닝 학습  (0) 2022.04.26
220421_Azure 데이터베이스  (0) 2022.04.21
220420_인증과 권한  (0) 2022.04.20
220419_클라우드 기초 수업 내용 정리  (0) 2022.04.19
profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.