Section 3 - 68일차

노태경·2021년 7월 9일
0

SEB-Section 3

목록 보기
24/31

1. Toy - 41일차

1) 2차원 배열에 0이 물, 1이 섬이라고 할 때, 섬의 갯수를 구하는 문제

  • 2중 반복문을 통해 순서대로 순회하는 방법 사용하여 값이 1인지 확인
  • 인접했는지 체크를 위해 별도의 2차원 배열에서 동일한 인덱스 주변에 값이 있는지 확인, 없다면 인접하지 않았기에 카운트를 늘리고 카운트를 기록, 값이 있다면 같은 count로 취급하기에 인접한 count와 동일한 값을 현재 인덱스에 입력
  • 위 방법은 순회 이전의 인접만 확인한다. 배열 순회 뒷부분에서 인접되있으면 인식하지 못하고 카운트를 늘려버림
  • 그래프의 그룹 개수를 구하는 문제와 유사한 방법으로 해결해도 될 듯
  • dfs를 통해 재귀적으로 해결

2) 이진힙

삽입
삽입한 노드의 부모의 값과 비교하여 최소값을 root로 올리면 최소 힙 반대는 최대 힙

삭제
루트 삭제
마지막 노드를 루트로 이동
자식값과 비교, 최소힙의 경우 더 작은 값을 루트로, 최대힙인 경우 더 큰 값을 루트로

while문으로 루트까지 올라가며 반복

2. 배포 - Docker

  • Docker
    리눅스 컨테이너 기술 기반의 오픈 소스 서비스
    애플리케이션 실행 환경을 코드로 작성할 수 있음
    OS 격리화 관리

  • 리눅스 컨테이너(Linux Container)
    필요한 라이브러리와 애플리케이션을 모아 마치 별도의 서버처럼 구성한 것
    컨테이너를 이루는 네트워크 설정, 환경 변수 등 시스템 자원을 각 컨테이너가 독립적으로 소유
    1) 프로세스의 구획화
    특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 가능, 또 다른 컨테이너의 프로세스에 영향을 줄 수 없음
    2) 네트워크의 구획화
    기본으로 컨테이너 하나에 IP 주소가 할당되어있음
    3) 파일 시스템의 구획화
    해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있음

  • Docker가 해결 가능한 문제

    환경 표준화 - 사용자의 운영체제마다 다른 환경에서 빌드하고 테스트를 수행할 수 있음
    리소스 격리성 - 하나의 컴퓨터를 사용하면서, 여러 개의 컴퓨터를 사용하는 것 처럼 사용하는 방법
    가상머신과 도커가 가능

    가상머신과 도커의 차이
    VM - 견고한 격리성, 애플리케이션에 대한 환경 격리성 중심
    도커 - 컨테이너의 관점

  • 도커의 Lifecycle

  • 도커의 이미지가 실행되면 도커의 컨테이너가 됨

  • 도커 이미지 구분

  • 관계
    이미지 : 컨테이너
    이미지 : 인스턴스 (AWS)
    클래스 : 인스턴스 (JS) 관계와 유사한 듯!

  • 레지스트리
    도커 허브
    도커의 이미지를 관리하는 공간
    도커 허브, private 도커 허브, 회사 내부용 레지스트리 등으로 나뉠 수 있음

  • 레포지토리
    레지스트리 내에 이미지가 저장되는 공간
    이미지 이름이 사용되기도 함

  • 태그
    같은 이미지라도 여러 버전이 있어, 내용이 다를 수 있음
    해당 이미지를 설명하는 버전 정보
    특별히 지정이 없다면, latest 태그를 붙인 이미지를 가져옴

Registry_Account / Repository_Name : Tag
docker / whalesay :latest
docker 레지스트리
whalesay 이미지 or 레포지토리
latest 태그

  • 우분투는 모든 docker 명령어 앞에 sudo가 붙어야 함!
  • docker image pull {이미지}
    레지스트리에서 이미지 혹은 레포지토리를 가져옴

  • docker container run [Options] {이미지} [command] [ARG..]
    options 옵션
    command 초기 컨테이너 실행 시 수행되는 명령어
    ARG.. argument, 커맨드에 넘겨질 것
    docker container run --name 컨테이너_이름 {이미지} cowsay boo
    run 컨테이터 실행
    --name 실행할 컨테이너 이름 할당 옵션
    --rm 일회성 실행, 종료시 삭제
    -it -i-t를 동시에 사용한 옵션
    --interactive , -i
    --tty , -t
    cosway 컨테이너 실행 시 cosway 명령어 호출
    boo 위 명령어 cosway에 넘겨질 파라미터

  • docker container ps -a
    컨테이너 리스트 출력
    -a는 종료된 컨테이너를 포함
    기본값은 실행되는 컨테이너만 출력

  • docker container rm {컨테이너}
    컨테이너 삭제

  • 로컬 파일을 도커 이미지에 연결하는 방법
    CP, Volume
    CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사
    Volume : 호스트와 컨테이너 사이에 공간을 마운트, 하나의 저장 공간처럼 보이게 함

  • httpd(http daemon)
    Apache HTTP server를 실행할 수 있는 오픈소스 웹 서버 소프트웨어
    httpd 는 /usr/local/apache2/htdocs/ 경로에 웹 서버와 관련된 파일들이 저장되어 있다면, 해당 파일을 기반으로 웹 서버가 실행되도록 함

  • 컴포즈로 한번에 실행시킨 것들은 같은 네트워크를 공유(?)

docker container run --name 컨테이너_이름 -p 818:80 httpd
-p 로컬포트:컨테이너포트옵션은 로컬호스트 포트와 컨테이너 포트를 연결
-d 백그라운드에서 컨테이너 실행

docker container cp ./복사할 파일경로 컨테이너 이름:/usr/local/apache2/htdocs/
cp는 앞 경로 파일을 뒷 경로에 복사
현재 터미널 위치를 주의

  • 위 작업으로 만들어 놓은 컨테이너를 이미지로 만들 수 있음
    작업을 또 수행하지 않아도 되고, 배포 및 관리가 유용하다

  • docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    사용예시
    docker container commit 컨테이너_이름 my_pacman:1.0

  • 또 다른 방법은 Dockerfile로 만드는 방법이다
    docker build --tag name:tag .
    지정한 경로에 있는 dockerfile을 찾아서 빌드

  • docker exec 컨테이너 커맨드
    컨테이너에 등록된 커맨드를 실행
    docker exec 컨테이너 bash와 같이 컨테이너의 bash shell을 실행시킬 수 있음

  • docker-compose.yaml 파일을 만들어 docker-compose up명령어를 사용하면 한번에 여러 개의 컨테이너를 뽷! 만들어 사용할 수 있음 >> 중요

3. review

  • AWS
    이미지(AMI) -> 인스턴스
    운영체제 템플릿 -> 한대의 컴퓨터

  • Docker
    이미지 -> 컨테이너
    애플리케이션 레벨의 템플릿 -> 하나의 아키텍처를 구성하는 구성요소

  • 내 컴퓨터 (localhost)에 node, nginx, mysql 등이 없어도 컨테이너 안에 설치 되어있어서 문제없이 작동된다 => Docker가 강력한 이유

profile
개발자 공부 일기😉

0개의 댓글