SEB_BE 73일차 - 배포 컨테이너

subimm_·2022년 12월 6일
0

코드스테이츠

목록 보기
70/83

💡 오늘의 학습목표

  • Docker

  • 실습 전 우분투 도커 설치

📔 왜 Docker 인가?

  • 컨테이너 방식의 장점
  1. 개발과 배포 환경을 일치시킨다.
  2. 수평 확장을 쉽게 해준다.
  3. 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다.
  • 컨테이너는 무엇을 격리하고, 어떤 자원을 독립적으로 소유하는지
  1. 프로세스
    • 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 가능
    • 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.
  2. 네트워크
    • 기본으로 컨테이너 하나에 하나의 IP주소가 할당됨.
  3. 파일 시스템
    • 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다. 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.

📖 키워드

  • 컨테이너
    애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자
  • 이미지
    실행되는 모든 컨테이너는 이미지로부터 생성, 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿 이를 이용하여 즉시 컨테이너를 만들 수 있다.
  • 레지스트리
    이미지는 레지스트리에 저장, 대표적으로 Docker Hub, Amazon ECR 이 있다. 도커 CLI에서 이미지를 이용해 컨테이너 생성 시, 호스트 컴퓨터에 이미지가 존재하지 않는다면 기본 레지스트리로부터 다운로드 받는다.

📔 Docker CLI

  • docker/whalesay 이미지로 예제 실습
  • 레지스트리
    • Docker Hub : https://hub.docker.com/
    • 도커 이미지를 관리하는 공간
    • 디폴트로 도커 허브를 기본 레지스트리로 설정
    • 도커 허브, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있다.
  • 레포지토리
    • 레지스트리 내에 도커 이미지가 저장되는 공간
    • 이미지 이름이 사용되기도 한다.
    • 깃헙 레포지토리와 유사
  • 태그
    • 같은 이미지여도 버전 별로 내용이 다를 수 있음
    • 해당 이미지를 설명하는 버전 정보를 주로 입력
    • 디폴트로 latest 태그를 붙인 이미지를 가져온다.
  • docker/whalesay의 최신 이미지 받아오기
    sudo docker image pull docker/whalesay:latest
  • 받아온 이미지 실행 (이미지 -> 컨테이너)
    docker container run {OPTIONS} IMAGE {COMMAND} {ARG...}
    docker container run --name 컨테이너_이름 docker/whalesay:latest cowsay boo
    • {container} run
      • 컨테이너를 실행
    • [OPTIONS]
      • -name : 컨테이너의 이름을 할당
    • [COMMAND]
      • 초기 컨테이너 실행 시 수행되는 명령어
      • cowsay : 컨테이너 실행 시 cowsay 명령어를 호출, node를 호출하듯 이용
    • [ARG]
      * boo: COMMAND인 cowasy에 넘겨질 파라미터
  • docker container ps -a : 모든 컨테이너의 리스트 출력
    • {container} ps : 컨테이너의 리스트 출력
    • a : 디폴트로는 실행되는 컨테이너이나 종료된 컨테이너를 포함하여 모든 컨테이너 출력
  • docker container rm 컨테이너_이름
    • {container} rm : 컨테이너를 지칭해서 삭제 (ps 명령을 통해 확인할수 있는 NAMES 혹은 CONTAINERID 사용)
  • docker image ls : 도커 이미지 용량 확인
  • docker image rm docker/whalesay : docker/whalesay 이미지 지우기

docker container run --name 컨테이너_이름 --rm docker/whalesay cowsay boo

  • {container} run : 컨테이너 실행, 이미지가 없다면 이미지를 받아온 뒤 실행
  • -rm : 컨테이너를 일회성으로 실행, 중지되거나 종료되면 관련 리소스 모두 제거

📖 Copy, DockerFile

  • Docker 컨테이너에 파일을 복사하기
  1. 웹 서버는 도커 컨테이너로 실행
  2. 웹 서버를 구성하는 파일은 직접 만들거나 가져온 파일 구성
  • 로컬에 있는 파일과 도커 이미지를 연결하는 방법
  1. CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사
  2. Volumn: 호스트와 컨테이너 사이에 공간을 마운트
    • 저장 공간을 다른 장치에서 접근할 수 있도록 경로를 허용
  • 팩맨 게임 구동 실습
  • httpd 웹 서버
    • 사용할 도커 이미지는 httpd(http daemon) : Apache HTTP Server를 실행할 수 있는 오픈소스 웹 서버 소프트웨어
    • httpd는 /usr/local/apache2/htdocs/ 경로에 웹 서버와 관련된 파일들이 저장되어 있다면 해당 파일을 기반으로 웹 서버가 실행되도록 한다.

1. 레포지토리 클론
git clone git@github.com:subimm/be-pacman-canvas.git

2. httpd 실행

  • -p 로컬호스트의 포트와 컨테이너의 포트를 연결 818포트가 로컬호스트의 포트, 80은 컨테이너의 포트
  • httpd는 일정 시간 연결 기록이 없으면, 서버 가동이 중지됨.
  • 터미널 종료말고, 다른 터미널 창을 열어 진행
  • -d 컨테이너를 백그라운드에서 실행하게 해줌

3. localhost:818 을 통해 웹 서버가 작동하고 있는지 확인

4. 새 터미널 열어서 docker container cp 명령어로 로컬호스트에 있는 파일을 컨테이너에 전달
앞 경로의 파일을 뒤 경로에 복사한다.



5. 게임 서버 구동 확인
docker exec -it 컨테이너_이름 bash 명령어로 컨테이너 내부 터미널 접속 가능. 오류 원인 찾기

  • Docker 이미지 만들기
  • 앞에서 만든 Docker Container를 이미지 파일로 변환
    장점 : 작업 내용 저장과 배포 및 관리가 유용

1. 구동한 Docker Container를 이미지로 만드는 방법

  • docker container commit 명령을 이용
    docker container commit 컨테이너_이름 my_pacman:1.0
  • 생성된 이미지를 900포트에서 웹 서버로 구동

    2. Docker Image 빌드를 위한 파일인 DockerFile로 만드는 방법
  • Dockerfile (이미지파일의 설명서) 를 만들고 그대로 이미지를 build 하는 방법
1 FROM httpd:2.4 # 베이스 이미지를 httpd:2.4 로 사용
2 COPY ./ /usr/local/apache2/htdocs/ # 호스트의 현재 경로에 있는 파일을 생성할 이미지 /usr/local/apache2/htdocs/ 에 복사
  • docker build 명령은 도커파일로 도커 이미지 파일을 생성
# --tag 는 name:tag 형식으로 이미지를 생성
# 지정한 경로에 있는 Dockerfile을 찾아서 빌드
docker build --tag my_pacman:2.0 . # "."을 명령어에 꼭 포함
  • 생성된 이미지를 이용해 901포트에 웹 서버 구동
    docker run --name my_web3 -p 901:80 mypacman:2.0

📖 실습 - 한 개의 Docker Image 연습

  • 이미지 가져오기
  • 컨테이너 생성 실행
  • 깃 클론 뒤 로컬파일 복사하여 붙여넣기
    • 전에 실행했던 컨테이너 중지 후 삭제한 뒤 실행하기
  • 컨테이너 안에서 bash shell 실행

📖 실습 - 두 개의 Docker Image 연습

  • docker-compose up : docker-compose.yaml에 정의된 이미지를 컨테이너로 실행
profile
코린이의 공부 일지

0개의 댓글