해당 포스팅은 AWS 강의실(https://www.youtube.com/@AWSClassroom)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
네 자신의 불행을 생각하지 않게 되는 가장 좋은 방법은 일에 몰두하는 것이다.
Ludwig van Beethoven

IAM 아마존 소개

AWS Identity and Access Management(IAM)를 사용하면 AWS 서비스와 리로스에 대한 액세스를 안전하게 관리할 수 있습니다. 또한, AWS 사용자 및 그룹을 만들고 관리하며 AWS 리소스에 대한 액세스를 허용 및 거부할 수 있습니다.
  • 누가 언제 어떻게 무엇을 할 수 있는지 관리하는 것을 설정하는 서비스!

IAM


  • AWS 어카운트 관리 및 리소스/사용자/서비스의 권한 제어
    • 서비스 사용을 위한 인증 정보 부여
  • 사용자의 생성 및 관리 및 계정의 보안
    • 사용자의 패스워드 정책 관리(일정 시간마다 패스워드 변경 등)
  • 다른 계정과의 리소스 공유
    • Identity Federation(Facebook 로그인, 구글 로그인)
  • 계정에 별명 부여 가능 -> 로그인 주소 생성 가능
  • IAM은 글로벌 서비스(Region 별 서비스가 아님)

IAM 구성

  • 사용자
    • 실제 AWS를 사용하는 사람 혹은 애플리케이션을 의미
  • 그룹
    • 사용자의 집합
    • 그룹에 속한 사용자는 그룹에 부여된 권한을 행사
  • 정책
    • 사용자와 그룹, 역할이 무엇을 할 수 있는 지에 관한 문서
      • 개발자는 ... 회계팀은 ... => 누가 언제 어디서 무엇을 어떻게 설정
    • JSON(JavaScript Object Notation) 형식으로 정의
  • 역할
    • AWS 리소스에 부여하여 AWS 리소스가 무엇을 할 수 있는 지를 정의
    • 혹은 다른 사용자가 역할을 부여받아 사용
    • 다른 자격에 대해서는 신뢰관계 구축가능
    • 역할을 바꾸어가며 서비스 사용가능

JSON

  • JavaScript Object Notation
  • 주로 다양한 프로그램 간에 데이터를 주고받기 위해 사용
  • 매우 다양한 언어에서 언어 자체에서 지원하거나 플러그인으로 사용가능
  • 키-value로 구성
  • 예를 들기

IAM 구성

IAM 구성

권한 검증

사용자의 종류

  • 루트 사용자: 결제 관리를 포함한 계정의 모든 권한을 가지고 있음
    • 관리 목적 이외에 다른 용도로 사용하지 않는 것을 권장
    • 탈취되었을 때 복구가 매우 어려움 -> MFA를 설정하는 것을 권장
    • MFA(Multi-factor authentication): 일회용 패스워드를 생성하여 로그인
  • IAM 사용자: IAM을 통해 생성해서 사용하는 사용자
    • 한사람 혹은 하나의 애플리케이션을 의미
    • 설정시 콘솔 로그인 권한 부여 가능
    • 설정시 AWS 서비스를 이용할 수 있음
      • AccessKey: 유저 이름
      • SecretAccessKey: 패스워드
    • AdminAccess를 부여하더라도 루트 사용자로 별도의 설정을 하지 않으면 Billing 기능을 사용할 수 없음.

IAM을 통해서 결제 창 접속 시 화면

IAM 자격 증명 보고서

자격 증명 보고서

  • 계정의 모든 사용자와 암호, 액세스 키, MFA 장치 등의 증명 상태를 나열하는 보고서를 생성하고 다운로드 가능
  • 4시간에 한번씩 생성가능
  • AWS 콘솔, CLI, API에서 생성 요청 및 다운로드 가능
  • 포함되는 정보
  • 암호
    • 암호의 활성화 여부
    • 마지막으로 사용된 시간
    • 마지막으로 변경된 시간
    • 언제 변경되어야 하는지
  • 액세스 키
    • 액세스 키 활성화 여부
    • 마지막으로 사용된 시간
    • 마지막으로 변경된 시간
    • 어떤 서비스에서 마지막으로 사용되었는지
  • 기타
    • MFA 사용 여부
    • 사용자 생성 시간

IAM 모범 사용 사례

  • 루트 사용자는 사용하지 않기
  • 불필요한 사용자는 만들지 않기
  • 가능하면 그룹과 정책을 사용하기
  • 최소한의 권한만을 허용하는 습관을 들이기(Principle of least privilege) ⇒ 오타 아닌가?
  • MFA 활성화하기
  • AccessKey 대신 역할을 사용하기

'CICD > AWS' 카테고리의 다른 글

[AWS] EC2 개념 및 실습  (2) 2024.07.22
[AWS] 가상화란  (0) 2024.07.21
[AWS] AWS 계정 생성하는 방법!  (0) 2024.07.21
[AWS] AWS 구조  (0) 2024.07.21
[AWS] 클라우드 컴퓨팅 종류  (0) 2024.07.18
해당 포스팅은 AWS 강의실(https://www.youtube.com/@AWSClassroom)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
네 자신의 불행을 생각하지 않게 되는 가장 좋은 방법은 일에 몰두하는 것이다.
Ludwig van Beethoven

Requirements


  • 처음 생성할 때 본인 명의의 신용카드 필요!
  • AWS 계정을 처음 생성하면 루트 유저기본 리소스(VPC 등)이 생성
  • AWS 계정 아이디가 부여됨(숫자)
    • 추후 AWS 계정에 별명 지정 가능!(문자)

AWS 유저


루트 유저

  • 생성한 계정의 모든 권한을 자동으로 가지고 있음
  • 생성시 만든 이메일 주소로 로그인
  • 탈취당했을 때 복구가 매우 힘듦 => 사용을 지양하고 MFA 설정 권장!
    • MFA: 일회용 패스워드
  • 루트 유저는 관리용으로만 이용가능: 게정 설정 변경, 빌링 등 기능에서 사용
  • AWS API 호출 불가(AccessKey/ SecrteAccessKey 부여 불가)

IAM User

  • IAM(Identity and Access Management)를 통해 생성한 유저
    • IAM: AWS에서 제공하는 모든 권한을 관리하는 서비스
  • 만들때 주어진 아이디로 로그인
  • 기본 권한 없음: 따로 권한을 부여해야함.
    • 예: 관리자 IAM User, 개발자 IAM User, 디자이너 IAM User, 회계팀 IAM User
    • IAM 계정은 탈취당하면 삭제 가능!
  • 꼭 사람이 아닌 애플리케이션 등의 가상의 주체를 대표할 수도 있음.
  • AWS API 호출 가능
    • AccessKey: 아이디 개념
    • SecretAccessKey: 패스워드 개념
  • AWS의 관리를 제외한 모든 작업은 관리용 IAM User를 만들어 사용
  • 권한 부여시 루트 유저와 같이 모든 권한을 가질 수 있지만 빌링 관련 권한은 루트 유저가 허용해야 함.

처음 만들어졌을 때 기본 제공

기본 제공 AWS 서비스

실습


  1. AWS 계정 만들기
  2. 루트 유저로 로그인하기
  3. 루트 유저 MFA 설정하기
    1. 구글 OTP(안드로이드/아이폰) 다운로드 필요
  4. 계정 별명 생성하기
  5. 관리 권한(Admin Access)가진 IAM 유저 생성하기
  6. IAM 유저 MFA 설정하기
  7. 루트유저로 로그아웃하고 IAM 유저로 로그인하기(계정 별명 활용)

1. AWS 계정 만들기

1. AWS에 접속

 

무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어

이러한 프리 티어 혜택은 AWS 신규 고객에게만 제공되며 AWS 가입일로부터 12개월 동안 유효합니다. 12개월의 무료 사용 기간이 만료되거나 애플리케이션 사용량이 프리 티어 범위를 초과할 경우

aws.amazon.com

2. 우측 상단에 콘솔에 로그인 클릭 후 계정 새로 생성하기

3. 아이디 입력 -> 메일 검증 후 -> 비밀번호 입력 -> 연락처 정보 입력(영문 주소를 입력해야합니다!)

4. 신용카드 정보 입력

2. 루트 유저로 로그인하기

루트 사용자 또는 IAM 사용자로 콘솔에 로그인 가능합니다!!

1. 오른쪽 위의 자기의 이름이 있는 곳에 보면 리전과 계정 정보가 존재

  1. 리전은 서울로 변경하고 보안 자격 증명 클릭!

 

 

2. 멀티 팩터 인증(MFA)

  1. 인증 관리자 앱 선택

  2. 구글 authenticator -> qr에 코드 두개 입력!

멀티 팩터 인증 완료 화면

 

IAM 대시보드 -> 계정 생성
별칭 생성(hiro17-aws)
사용자 -> 사용자 생성
사용자 이름(admin) -> 체크 항목 확인
권한(admin 검색)

3. 대시보드에서 계정 생성

  1. 이제부터 https://hiro17-aws.signin.aws.amazon.com/console으로 로그인 가능

4. IAM 사용자 생성

  1. 권한 => 빌링 제외한 모든 AWS 권한

  2. 빌링은 루트 유저의 허락

  3. 태그는 선택사항

우측 상단 계정 확인

5. IAM 로그인 화면

 

이후 AWS의 서비스를 이용하면 됩니다 :)

'CICD > AWS' 카테고리의 다른 글

[AWS] 가상화란  (0) 2024.07.21
[AWS] IAM 기초  (0) 2024.07.21
[AWS] AWS 구조  (0) 2024.07.21
[AWS] 클라우드 컴퓨팅 종류  (0) 2024.07.18
[AWS] 클라우드 컴퓨팅이란  (0) 2024.07.18
해당 포스팅은 AWS 강의실(https://www.youtube.com/@AWSClassroom)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
네 자신의 불행을 생각하지 않게 되는 가장 좋은 방법은 일에 몰두하는 것이다.
Ludwig van Beethoven

AWS


Amazon Web Service(AWS)는 전 세계적으로 분포한 데이터센터에서 200개가 넘는 완벽한 기능의 서비스를 제공하는,
세계에서 가장 포괄적이며 널리 채택되고 있는 클라우드 플랫폼
  • 클라우드 서비스 점유율 1위. => 많은 사용자가 사용하므로 그에 따라 많은 레퍼런스가 존재함.
  • 수많은 스타트업, 엔터프라이즈 기업들이 사용중
  • 매년 새로운 서비스 런칭 및 지속적인 성장 중

구조

AWS 구조

  • AWS에는 서비스가 있으며 여러개의 region으로 나누어져 있음
    • region 별로 나누어져 있음
  • region 내부에는 가용영역(AZ)라는 곳이 있음
    • 적어도 두개 이상.

  • 글로벌 서비스 => IAM, Amazon CloudFront
  • 리전 내 가용영역 외부 => VPC, S3
  • 리전 내 가용영역 내부 => RDS, EC2

Region

  • AWS의 서비스가 제공되는 서버의 물리적 위치
  • 전 세계에 흩어져 있으며 큰 구분(동남아, 유럽, 북아메리카 등등으로 묶여있음)
  • 각 리전에는 고유의 코드가 부여됨
    • 서울 리전 -> ap-northeast-2 (ap-northeast-1은 도쿄)
    • 미국 동부(버지니아 북부) 리전은 us-east-1
  • 리전 별로 가능한 서비스가 다르기도 함.

고려할점

  • 지연 속도
  • 법률(데이터, 서비스 제공 관련)
  • 사용 가능한 AWS 서비스

가용영역(Availability Zone)

  • 리전의 하부 단위
    • 하나의 리전은 반드시 2개 이상의 가용영역으로 구성
  • 하나 이상의 데이터 센터로 구성된다고 생각
  • 리전 간의 연결은 매우 빠른 전용 네트워크로 연결
  • 반드시 물리적으로 일정거리(몇 km 이상) 떨어져 있음
    • 다만 모든 AZ는 서로 100km 이내의 거리에 위치
    • 여러 재해에 대한 대비 및 보안
  • 각 계정별로 AZ의 코드와 실제 위치는 다름.
    • 예: test1의 AZ-A와 test2의 AZ-A는 다른 위치
    • 보안 및 트래픽 분산(한 AZ로 몰림 방지)

엣지 로케이션

  • AWS의 CloudFront(CDN)등의 여러 서비스들을 가장 빠른 속도로 제공(캐싱)하기 위한 거점
  • 전세계에서 여러 장소에 흩어져 있음

글로벌 서비스와 리전 서비스

  • AWS에는 서비스가 제공되는 지역의 기반에 따라 글로벌 서비스와 리전 서비스로 분류
  • 글로벌 서비스: 데이터 및 서비스를 전세계의 모든 인프라가 공유
    • CloudFront
    • IAM
    • Route53
    • WAF
  • 지역 서비스: 특정 리전을 기반으로 데이터 및 서비스를 제공
    • 대부분의 서비스
    • S3: 전세계에서 동일하게 사용할 수 있으나, 데이터 자체는 리전에 종속 -> 리전 서비스

ARN

  • Amazon Resource Name: AWS의 모든 리소스의 공유 아이디
  • 형식
    • arn: [partition]:[service]:[region]:[account_id]:[resource_type]/resource_name/(qualifier)
    • 예시
      • arn:aws:s3:::test_bucket/text.txt
      • arn:aws:dynamodb:ap-northeast-2:123456789012:table/mytable
      • arn:aws:dynamodb:ap-northeast-2:123456789012:table/*
    • 와일드카드(*)를 사용하여 다수의 리소스를 지정 가능

'CICD > AWS' 카테고리의 다른 글

[AWS] 가상화란  (0) 2024.07.21
[AWS] IAM 기초  (0) 2024.07.21
[AWS] AWS 계정 생성하는 방법!  (0) 2024.07.21
[AWS] 클라우드 컴퓨팅 종류  (0) 2024.07.18
[AWS] 클라우드 컴퓨팅이란  (0) 2024.07.18
해당 포스팅은 AWS 강의실(https://www.youtube.com/@AWSClassroom)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
네 자신의 불행을 생각하지 않게 되는 가장 좋은 방법은 일에 몰두하는 것이다.
Ludwig van Beethoven

클라우드 컴퓨팅 종류


  • 클라우드에서 무엇을 제공하는지 => 컴퓨팅 모델
  • 클라우드 컴퓨팅을 어떻게 제공하는지 => 컴퓨팅 배포 모델

클라우드 컴퓨팅 모뎅

애플리케이션의 구성

애플리케이션

IaaS: Infrastructure as a Service

IaaS

  • 인프라만 제공
  • OS를 직접 설치하고 필요한 소프트웨어를 개발해서 사용
  • 가상의 컴퓨터를 하나 임대하는 것과 비슷.
  • ex) AWS EC2 ⇒ 가상의 컴퓨터를 임대하는 서비스

PaaS: Platform as a Service

PaaS

  • 인프라 + os + 기타 프로그램 실행에 필요한 부분
  • 바로 코드만 올려서 돌릴 수 있도록 구성
  • ex) Firebase, Gogle App Engine

SaaS: Software as a Service

SaaS

  • 인프라 + OS+ 필요한 소프트웨어가 제공됨.
  • 서비스 자체를 제공
  • 다른 세팅 없이 서비스만 이용
  • Gmail, DropBox, Slack, Google Docs

클라우드 컴퓨팅 배포 모델


공개형(클라우드)

  • AWS
  • 모든 부분이 클라우드에서 실행
  • 낮은 비용
  • 높은 확장성

혼합형(하이브리드)

  • 폐쇄형과 공개형의 혼합
  • 폐쇄형에서 공개형으로 전환하는 과도기에 사용
  • 혹은 폐쇄형의 백업으로 사용

폐쇄형

  • 높은 수준의 커스터마이징 가능
  • 초기 비용이 비쌈
  • 유지 보수 비요이 비쌈
  • 높은 비용

 

'CICD > AWS' 카테고리의 다른 글

[AWS] 가상화란  (0) 2024.07.21
[AWS] IAM 기초  (0) 2024.07.21
[AWS] AWS 계정 생성하는 방법!  (0) 2024.07.21
[AWS] AWS 구조  (0) 2024.07.21
[AWS] 클라우드 컴퓨팅이란  (0) 2024.07.18
해당 포스팅은 AWS 강의실(https://www.youtube.com/@AWSClassroom)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
네 자신의 불행을 생각하지 않게 되는 가장 좋은 방법은 일에 몰두하는 것이다.
Ludwig van Beethoven

클라우드 컴퓨팅


클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한만큼 비용을 지불하는 것을 말함
-AWS-
* 온디멘드: 수요에 반응함

서버 - 클라이언트 아키텍처


P2P 통신

  1. User A가 정보를 B에게 보냄
  2. 그에 대한 B의 정보를 A에게 보냄

여기서 유저가 세명이 되면?

 

  1. A는 B와 C에게 정보를 보내고
  2. B는 C와 A에게 B의 정보를 보내고
  3. C는 A와 B에게 C의 정보를 보냄.

유저가 더 많아지면??

  • 플로우가 복잡해짐
  • 굉장한 부하가 발생하고 싱크를 맞추기가 너무 어려움

서버의 등장

서버 클라이언트 구조

  • 스킬을 사용할 수 있는지 체크(마나, 레벨 등 체크)
  • 범위 내에 사용자가 있는지
  • 맞은 동작 체크(hp 깎이거나 죽는)

데이터 센터


  • 서버들이 모여있는 공간.
  • 애플리케이션의 서버를 호스팅하는 실제 시설
    • 컴퓨팅 시스템을 위한 하드웨어
    • 네트워킹 장비
    • 전원 공급 장치, 전기시스템, 백업 발전기
    • 환경 제어장치(에어컨, 냉각 장치, 팬 등)
    • 운영 인력, 기타 인프라

문제점

  • 운영에 비용이 많이 소요됨
    • 건물 유지비용, 서버 구매비용, 셋업 유지 보수 등
    • 한번 구매하면 수요에 상관없이 계속 보유해야함.
  • 느린 구축시간
    • 유저의 수요에 빠르게 대처하기 어려움
    • 장애 기기를 교체하는 시간 느림.

클라우드


클라우드

  • 클라우드 => 컴퓨팅을 빌려쓰는 것.
  • 리소스를 사용하고 반납

장점

  • 자본 비용을 가변 비용으로 개체
    • 데이터 센터 구축비용, 서버 구매 비용 => 운영비 / 자본비용
    • 막대한 초기 비용 대신 쓰는만큼 비용 지불
  • 규모의 경제로 얻는 이점
    • 한개를 사는 것보다 100개를 사는게 단가가 낮음 => 규모의 경제
    • AWS의 규모의 경제로 인한 이득을 누릴 수 있음.
    • AWS의 모든 고객과 공동 구매하는 효과.

클라우드 비용

  • 용량 추정이 불필요
    • 클라우드는 사용량을 따라감
  • 속도 및 민첩성 개선
    • 몇번의 클릭으로 바로 리소스 확보 가능
    • 개발 비용 절감
  • 데이터 센터 운영 및 유지 관리에 비용 투자 불필요
    • 인프라 관리가 아닌 비즈니스에 자원 집중 가능
  • 빠른 확장성
    • 몇번의 클릭으로 전세계에 서비스 가능.

'CICD > AWS' 카테고리의 다른 글

[AWS] 가상화란  (0) 2024.07.21
[AWS] IAM 기초  (0) 2024.07.21
[AWS] AWS 계정 생성하는 방법!  (0) 2024.07.21
[AWS] AWS 구조  (0) 2024.07.21
[AWS] 클라우드 컴퓨팅 종류  (0) 2024.07.18
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Docker Compose


  • 여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
    • 하나의 서비스를 운영하기 위해서는 여러개의 애플리케이션이 동작해야함.
    • 컨테이너화 된 애플리케이션들을 통합 관리할 수 있음
    • 옵션을 기존 명령어 형태가 아닌 yaml의 문법에 맞춰서 작성하면 docker compose가 컨테이너 관리

https://docs.docker.com/compose/install/linux/#install-the-plugin-manually

 

Install the Compose plugin

Download and install Docker Compose on Linux with this step-by-step handbook. This plugin can be installed manually or by using a repository.

docs.docker.com

Docker Compose로 컨테이너 실행


몇가지 example:

https://docs.docker.com/guides/workshop/08_using_compose/#use-docker-compose

 

Use Docker Compose

Using Docker Compose for multi-container applications

docs.docker.com

version compose 버전. 버전에따라 지원 문법이 다름

version: “2”
port 컨테이너가 공개하는 포트 나열

web:
  image: httpd:latest
  port:
    - 80
    - 8443:443
services 컴포즈를 이용해서 실행할 컨테이너 옵션 정의.

service:
  webserver:
    image: nginx
  db:
    image: redis
link 다른 컨테이너와 연계할 때 연계할 컨테이너 지정.

webserver:
  image: wordpress:latest
  link:
    db: mysql
build 컨테이너 빌드

webapp:
  build: .
expose 포트를 링크로 연계된 컨테이너에게만 공개할 포트

webapp:
  build: .
image compose를 통해 실행할 이미지를 지정.

webapp:
  image:
    centos:7
volumes 컨테이너에 볼륨을 마운트

webapp:
  image: httpd
  volumes:
    - /var/www/html
command 컨테이너에서 실행될 명령어 지정

app:
  image: node:12-alpine
  command: sh -c “yarn install && yarn run dev”
environment 컨테이너에 적용할 환경변수를 정의

database:
  image: mysql: 5.7
  environment:
    MYSQL_ROOT_PASSWORD: pass
restart 컨테이너가 종료될 때 적용할 restart 정책
no: 재시작 되지 않음
always: 컨테이너를 수동으로 끄기 전까지 항상 재시작
on-failure: 오류가 있을 시에 재시작.

database:
  image: mysql:5.7
  restart: always
depends_on 컨테이너 간의 종속성을 정의.
정의한 컨테이너가 먼저 동작되어야 함.

services:
  web:
    image: wordpress:latest
  depends_on:
    - db
  db:
    image: mysql

1. 서비스 디렉토리 설정

mkdir webserver
cd webserver

2. docker-compose.yml 생성

cat > docker-compose.yml
version: "3"
services:
  web:
    image: httpd:latest
    ports:
      - "80:80"
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
  mysql:
    image: mysql:latest
    command: mysqld
    environment: MYSQL_ROOT_PASSWORD: pass

3. docker-compose 명령어

docker-compose up -d # 실행시켜줘. (백그라운드로 -d)
docker-compose ps # 현재 디렉토리의 컨테이너 상태 확인
docker-compose scale mysql=2 # MySQL 컨테이너 두개로
docker-compose ps
docker-compose down # 컨테이너 완전히 종료
### 이외에도 많은 명령어가 있음..

빌드에서 운영까지


  1. 서비스 디렉토리 생성
  2. 빌드 파일 생성
  3. yaml 파일 생성
  4. 도커 컴포즈 실행

'CICD > docker' 카테고리의 다른 글

[Docker] Container 간 통신  (2) 2024.06.19
[Docker] Container Storage  (0) 2024.06.18
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Container 통신


컨테이너 네트워크 도식화

  • docker daemon이 start하게 되면 docker0라는 도커 네트워크 인터페이스가 생김.
    • virtual ethernet bridge: 172.17.0.0/16
      • bridge network: 컨테이너의 IP와 실제 물리 장비가 가지고 있는 IP연결
    • L2 통신기반
    • container 생성 시 veth 인터페이스 생성
    • 모든 컨테이너는 외부 통신을 docker0를 통해 진행(컨테이너가 생성되면 가상 IP가 +1씩 되면서 생성)
    • container running 시 172.17.X.Y로 IP 주소할당(IP 주소 변경 및 포트포워딩 기능 제공)
    • 컨테이너가 통신하게되면 bridge network가 gateway의 역할을 하므로 호스트의 IP로 변환(NAT 지원)해서 외부로 통신할 수 있도록 도와줌.
ip addr #docker0 ip 확인
brctl show #bridge interface 확인

docker run -it --name c1 busybox # 첫번째 컨테이너 아마도 docker0 ip + 1
ip addr

docker run --it --name c2 busybox # 두번째 컨테이너
docker run -d -p 80:80 --name web1 nginx

curl 172.17.0.4 # => nginx 연결.

# docker0 가 NAT 서비스 지원
iptables -t nat -L -v

Container 포트 외부 노출


  • port-forwarding
    • container port를 외부로 노출시켜 외부 연결 허용
    • iptables rule을 통한 포트 노출
      • -p hostPort:containerPort
      • -p containerPort => 랜덤 포트:containerPort 매핑
      • -P => 랜덤 포트 자동 생성
    • docker run --name web -d -p 80:80 nginx:1.14
    • iptables -t nat -L -n -v
      • 도커 IP와 외부 IP 테이블 확인
docker run --name web -d -p 80:80 --name web1 nginx:1.14
curl localhost:80 # 연결 가능.

docker run --name web -d -p 80 --name web2 nginx:1.14
docker ps # 외부에서 들어올 수 있는 포트 확인. 현재는 29154 -> 80

docker run --name web -P --name web3 nginx:1.14 # 도커 파일에 정의된 EXPOSE 80(만약 이게 90이였다면)
docker ps # 외부에서 들어올 수 있는 포트 확인. 현재는 29154 -> 80(얘가 90이 될 것)

Container 네트워크 추가


네트워크 추가

  • docker0에 ip static으로 부여 X
  • user-defined bridge network(myent) 생성
    • --subent을 생략하게 되면 172.18.X.Y로 자동생성
    • --gateway를 고정할 수도 있지만 생략하면 172.18.X.1
    • --ip: static ip 설정 가능
    • --net <bridge networkName>하면 해당 bridge 네트워크에 파생된 컨테이너 생성
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet
docker network ls

docker run -d --name web -p 80:80 nginx:1.14
curl local host

docker run -d --name appjs --net mynet --ip 192.168.100.100 -p 8080:8080 smlinux/appjs # --net mynet. mynet을 사용하겠다.
curl localhost:8080

Container 간 통신


컨테이너간 통신

  • --link: 두 컨테이너 연결<containerName>:<aliasName>
docker run -d --name mysql -v /dbdata:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=wordpress 
-e MYSQL_PASSWORD=wordpress mysql:5.7

docker ps
cd /dbdata

docker run -d --name wordpress --link mysql:mysql 
-e WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4

 

 

'CICD > docker' 카테고리의 다른 글

[Docker] 빌드에서 운영까지  (0) 2024.06.19
[Docker] Container Storage  (0) 2024.06.18
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Container Volume


  • 컨테이너 이미지는 read-only(컨테이너로 올리면 수정가능)
  • 컨테이너에 추가되는 데이터들은 별도의 RW 레이어에 저장.
    • RO 와 RW 하나같이 보이게 하는 시스템 ⇒ union file system
  • 컨테이너에 추가되는 이미지는 별도의 레이어에서 생성

Data보존


  • rw(/var/lib/mysql)에 저장. ⇒ 대신에 특정 저장소에 저장하도록.(/dbdate) 호스트의 DB 데이터 영구보존
  • docker run -d --name db
    -v /dbdata:/var/lib/mysql => 디스크에 저장하도록
    -e MYSQL_ALLOW_EMPTY_PASSWORD=pass
    mysql:latest
  • -v <hostpath>:<container mount path>(/var/lib/mysql 내용을 hostpath에 저장)
    -v <hostpath>:<container mount path>:<read write mode>
    -v <container mount path>
    (/var/lib/docker/volume/UUID/_data 디렉토리에 저장)
  • docker run -v /webdata:/webdata -d —name df smlinux/df:latest
    docker run -d -v /webdata:/usr/share/nginx/html:ro -d ubuntu:latest

컨테이너끼리 데이터 공유하기


  • df 명령어: 디스크 사용량을 모니터링할 때 사용

10초마다 디스크 사용량을 index.html에 작성하는 code

cat df.sh

#!/bin/bash
mkdir -p /webdata
while true
do
	df -h / > /webdata/index.html
	sleep 10
done

컨테이너 빌드

# dockerfile
FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]

도커 실행

docker run -d -v /webdata:/webdata —name df smlinux/df:latest

'CICD > docker' 카테고리의 다른 글

[Docker] 빌드에서 운영까지  (0) 2024.06.19
[Docker] Container 간 통신  (2) 2024.06.19
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17

+ Recent posts