[240102 인턴일지] Docker에 관하여

osohyun0224·2024년 1월 2일
1

슬기로운 인턴생활

목록 보기
1/13
post-thumbnail

안녕하세요, 인턴에 첫 출근을 시작한 프론트엔드 개발자 대학생입니다. 앞으로 인턴 일지를 작성하게 될 때에는 제가 회사에서 쓰는 이름인 Garden으로 소개하겠습니다 하하

Intro.

오늘은 첫 출근을 하고 나서 맥북에 개발 세팅을 맞춰보았는데... 23년 평생 윈도우만 쓰던 저에게는 맥북이 너무 어려웠습니다...
저의 빠른 온보딩을 위해서는 미리 공부해야할 것 같아 온보딩 프로그램을 미리 공부해보려고합니다.

Begin.

도커는 학부생일때 프로젝트에서 많이 써보았기에 익숙한 친구였지만 이번에 다시 배울 때 확실히 배우고 싶어서 개념을 정리해 보려고 합니다.

도커란?

도커

  • Docker: 컨테이너화된 어플리케이션을 생성, 배포, 실행하기 위한 오픈소스 가상화 플랫폼입니다.
  • 여기서, 컨테이너란 소프트웨어를 작동시키기 위한 모든 것을 포함한 포장된 환경으로 코드, 라이브러리, 설정 값등이 포함되어 있는 것을 의미합니다.

여기서 도커 파일은 도커 이미지에 저장된다.
이미지는 프로그램, 컨테이너는 프로세서에 비유되는 일대다 관계로 이루어집니다.

여기서 os를 복습해보자.

  • 먼저 프로그램이란, 어떤 작업을 하기 위해 해야할 일들을 순서대로 나열한 것으로 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 "정적인 상태"의 파일이다. 컴퓨터에서의 "프로그램"은 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합이다. 그에 필요한 데이터를 묶어 놓은 파일로 보조 기억장치에 저장되어있다.

  • 그 다음으로 프로세서는, 중앙처리장치를 의미한다.

도커의 구성 요소

  • 도커 엔진: 도커의 핵심 런타임 구성 요소로, 컨테이너를 생성하고 관리한다.
  • 도커 이미지: 변하지 않는것으로, 필요한 프로그램과 종속성을 포함하고 있다. 이 이미지를 기반으로 컨테이너가 실행된다.
  • 도커 컨테이너: 도커 이미지를 기반으로 생성되는 실행환경, 실제 애플리케이션의 실행 인스턴스를 의미한다.

도커에 대한 손쉬운 설명

유튜브 강의 링크

도커를 모르는 사람이 있다. 이 사람은 매번 많고 복잡한 장비들을 새 업무 현장으로 옮겨서 조립하고 설치하는 일에 지쳤다..
하지만 복커가 나타나서 이 사람이 설치한 장비들을 설치된 그 상태로 사본들로 박제해준다. 클라우드를 설치하는 것 처럼 어디에서든 내려받아서 설치한다.
다른 사람과 분리된 작업공간을 설치해서 할 수 있다. 이 장비들을 컨테이너에 저장한다. 한번 저장된 장비들은 언제든지 새로 불러낼 수 있다.

자자 한 마디로 정리해보자

복커만 있다면, 복커허브에 한 번 업로드한 장비들은 내가 지정한 형태로 어디든 설치할 수 있고 장비들에 문제가 생기더라도 고칠 필요없이 새로 복원해낼 수 있다. 같은 곳에 다른 비품들과 서로 방해하지 않는 해당 작업만의 업무환경을 만들어낼 수 있다.

먼저 각 요소들이 설치된 모습을 "이미지"라는 형태로 박제해서 저장해요. 각 제품마다 공식적으로 제공되는 이미지도 있고, 내가 직접 만들수도 있다. 이 이미지들은 도커 허브에 업로드 되고 공유될 수 있다. 도커는 각각의 컨테이너라는 독립적인 환경에 놓고 저장한다.

도커를 통해 서버를 관리하고 서비스들을 배포하는 일이 훨씬 쉬워진다.

강의로 실습

본격적으로 도커를 배워보자.

도커의 컨테이너를 활용해 대 저택안에 근무자들이 업무공간으로만 활용하는 컨테이너들이 들어간다. 한 컨테이너 안에 여러 개발자가 들어가거나 각각의 컨테이너가 연결될 수 있다.

하나의 웹 서비스를 개발하려면 개발 저택과 서버 저택이 존재한다. 여기서
개발저택에서 개발한 코드들을 설계도와 함께 서버 저택에 보내게 되면 서버에서는 그 설계대로 컨테이너들을 설계에서 근무자들이 동일하게 세팅할 수 있도록 해준다.

자 이제 도커를 직접 해보자!

도커의 이미지

도커의 이미지라는 건 리눅스 컴퓨터의 특성 상태를 캡쳐해서 박제해 놓은 것을 말한다. node 이미지는 리눅스에 노드가 설치된 상태를 그대로 급속냉동해다가 그대로 클라우드에 올려놓은 것을 말한다.

docker run -it node

도커는 일단 내 컴퓨터에서 그 이미지를 찾아본 뒤 도커 허브로부터 해당 이름으로 등록된 이미지를 다운받게 된다. run 명령어는 이미지가 없으면 그렇게 다운 받은 다음 그 이미지를 내 컴퓨터에서 해동해서 컨테이너로 만든다. 이미지를 한번 받으면 그대로 컨테이너를 몇개든 만들어낼 수 있다. 이미지를 한번 받으면 그걸로 컨테이너를 몇개든 만들어낼 수 있다.

이미지는 컨테이너를 찍어내는 틀 또는 무한 생산 가능한 컨테이너 조립키트라고 생각해도 좋다. -it 명령어는 이 컨테이너를 연 다음 그 환경 안에서 cli를 사용한다는 것이다. 컨테이너를 만든 다음 그 안에 있는 근무자랑 컨테이너에 난 창문으로 대화를 하겠다는 것이다.

그리고 이 이미지는 컨테이너가 만들어져 설치되면 바로 node 명령어가 실행되도록 설계가 되어있다. 컨테이너가 만들어지자마자 입력창이 뜨는 것이다.

이 상태에서 다음과 같은 명령어를 입력해보자.

docker images

도커 이미지의 정보를 알 수 있는 명령어이다.

docker ps

도커 컨테이너의 정보를 알 수 있는 명령어이다.

docker exec -it 컨테이너이름 bash

맨 마지막 명령어를 입력한 것에 대해 자세히 살펴보자.
이 컨테이너 내부를 통해 가상의 리눅스 환경으로 들어간 것이다.
ls로 주변을 둘러보면 리눅스 영상에서 보았던 리눅스 환경의 기본 디렉토리들이 보인다.

컨테이너마다 각각 이 파일시스템과 네트워크가 있는 것이다.
그렇다고 집 전체 리눅스가 들어가 있는 것이아닌, 이 리눅스 환경은 도커 데스크탑 프로그램으로 구현되고 있는 것이다.

다시 원래의 터미널로 돌아와서(노드 컨테이너) 노드 컨테이너의 cli를 ctrl+c로 종료해보고자 한다. 이는 컨테이너 안의 Nodejs랑 회의를 끝 마친 상황이라고 비유할 수 있다. 아래의 사진으로 확인해보자.

컨테이너가 나타나지 않는 것을 볼 수 있다. 그럼 그 컨테이너가 철거되었다는 의미일가? 아니다. 그냥 docker ps만 입력하면 즉 내부의 근무자가 일하고 있다는 컨테이너만 표시된다. 여기서 -a를 붙여서 실행하게 되면 전체 컨테이너를 확인할 수 있다.

profile
학부생 Frontend Developer

0개의 댓글