[N431] Docker

쥬쥬스·2023년 4월 5일
0

section4

목록 보기
11/15

1. 배경

- 운영체제(Operating System, OS)
: 하드웨어(pc,휴대폰,태블릿)하고 어플리케이션 사이에서 역할을 해주는 것
: 하드웨어를 적절하게 컨트롤하는 어떤 시스템

- 종류
1. Mac OS : Apple이 개발한 Mac 전용 운영체제
2. Linux : 커뮤니티 주체로 개발한 공개 운영체제
3. Windows : Microsoft 사에서 개발한 컴퓨터용 운영체제
4. UNIX : 대부분의 현대적 컴퓨터 운영체제의 원형

CASE 1. 환경 표준화 - 환경이 일정하지 않아서 생기는 문제

개발자 환경에서 윈도우에서만 작업하지는 않는다. 만약 리눅스 환경에서도 작업해야하는 경우라면 공통된 개발 환경이 필요하다. 공통된 개발 환경을 유지하는 것이 필요하다.
상황에 따라 운영체제마다 개발하는 애플리케이션의 코드를 변경해야할 수도 있는 경우가 있다. 그렇게 되면 시간과 노력이 too much !!!!

CASE 2. 수작업으로 일치시키는 환경 구성

모든 개발자와 사용자들이 동일한 OS 환경을 유지하는 경우에 어느정도 빨라질 수 있다. 그러나 컴퓨터마다 그에 맞게 설정해주어야하는 부분들이 있다. 이런 부분들을 수작업으로 하다 보면 설정들이 뒤엉킬 수 있고, 시간도 많이 걸린다.

CASE 3. 리소스 격리성

서버 한개로 여러 IP를 구분하기 위해 설정을 변경하다가 방화벽 규칙의 충돌이 일어날 수 있다. 그래서 하나의 컴퓨터에서 여러개의 컴퓨터를 이용하는 것처럼 '리소스 격리성'을 이용하게 된다. 이를 제공하는 기술로 가상머신, 도커 등이 있다.

이러한 문제를 해결하기 위한 방법중에는 Linux Container가 있다.

2. 도커와 컨테이너

1) Docker

: 애플리케이션 실행 환경을 코드로 작성할 수 있고 OS를 격리화하여 관리하는 기술
** 윈도우즈 레지스트리(윈도우즈 관련 정보 담고있는 데이터베이스)
ㄴ도커 이미지를 저장하는 저장소로 사용

pull명령을 사용해서 이미지를 가져오고, run명령을 사용해서 이미지를 사용

2) Linux Container

: 필요한 라이브러리와 어플리케이션을 모아서 마치 별도의 서버처럼 구성한 것
: 인프라를 비롯한 프로그램을 어떤 환경에서나 실행가능 할 수 있도록 해주는 개체

→ 도커는 컨테이너라는 보관함에 인프라들을 담아서 한 장소에 가져오는 것

3. Docker CLI

(git bash 사용)
Docker docs 공식문서 참고하면서 도커 다루기

  • 사용법 : Docker CLI, Docker-Compose CLI, API Reference
  • 환경 및 빌드 파일 구성 : DockerFile, Docker-Compose File


도커 이미지가 실행되면 도커 컨테이너가 되는 것

Docker Image

docker image의 이름은 레지스트리 계정, 레포지토리 이름, 태그 세가지 정보로 구성

  1. 레지스트리(Registry)
  • 도커 이미지가 관리되는 공간
  • 특별히 다른 것을 지정하지 않는다면 도커 허브를 기본 레지스트리로 설정
  • 종류 : Docker Hub, Private Docker Hub, 회사 내부용 등
  1. 레포지토리(Repository)
  • 레지스트리 내에 도커 이미지가 저장되는 공간 like Github repository
  • 이미지 이름이 사용되기도 함
  1. 태그(Tag)
  • 같은 이미지라고 할지라도 버전벌로 내용이 다를 수 있음
  • 해당 이미지를 설정하는 버전 정보를 주로 입력
  • 특별히 지정하는 것이 없다면 latest 태그 붙인 이미지를 가져옴

Docker Hub 도커허브
어떤 Docker Image를 찾거나, Image의 사용방법을 확인할 때 이용

docker 실행

docker/whalesay

# 레지스트리에서 이미지 혹은 레포지토리 가져오기
docker image pull docker/whalesay:latest

# 이미지 리스트 출력
docker image ls

# 받아온 이미지 실행 (이미지 → 컨테이너)
docker container run --name MyName docker/whalesay:latest cowsay boo
# 컨테이너를 일회성으로 사용할 수도 있음 -> --rm 사용
docker container run --name my_name --rm docker/whalesay cowsay boo

* docker container run : 컨테이너 실행
* --name Myname : 컨테이너의 이름 할당
* docker/whalesay:latest : 도커이미지 이름:태그
* cowsay : 컨테이너에서 cowsay 호출 (python을 호출하듯이)
* boo : command인 cowsay에 넘겨지는 파라미터

# 컨테이너 리스트 출력
docker container ps -a
# 컨테이너 삭제 
docker container rm myName

* -a : 모든 컨테이너를 출력

# docker image의 용량 확인
docker image ls

# docker/whalesay 이미지 지우기
docker image rm docker/whalesay

docker 컨테이너에 파일 복사하기

게임 서버, 웹 서버(인터넷으로 사용자에게 정보 전달)와 같이 도커 이미지에 모두 구성되어 있지 않은 경우들

▶ 로컬에 내가 가지고 있는 파일 + 도커 이미지 이용!

  • CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사
  • Volume : 호스트와 컨테이너 사이에 사이에 공간을 마운트

http 웹 서버

http는 Apache HTTP Server를 실행할 수 있는 오픈소스 웹 서버 소프트웨어

  • httpd는 /usr/local/apache2/htdocs/ 경로에 웹 서버와 관련된 파일들이 저장되어 있다면, 해당 파일을 기반으로 웹 서버가 실행된다
  • httpd는 일정 시간 연결 기록이 없으면 서버 가동이 중지된다. 중지된 경우엔 그냥 다시 실행시켜주면 된다

  1. 코드스테이츠 레포 clone (로컬)
  2. http 실행
    docker container run --name my_web --rm -p 818:80 httpd

    이미지가 없었다면 다운로드 진행 후에 컨테이너 연결해줌

  3. localhost:818 을 통해 웹 서버 작동하는지 확인
  4. 다른 bash창 열어서 로컬 폴더 파일 안에서 컨테이너에 파일 전달
    docker container cp 사용
    docker container cp ./ my_web:/usr/local/apache2/htdocs/
    앞에 인자의 경로를 뒤에 인자의 경로에 복사
  5. localhost:818 재확인

    5. docker stop my_web 로 연결 해지

Docker 이미지 만들기

만든 Docker Container를 이미지 파일로 만드는 작업
이미지로 만들어놓으면 이전에 작업한 내용을 다시 한 번 수행하지 않아도 되고, 배포 및 관리가 유용하다는 장점이 있다

  1. docker container 로 이미지 만들기
    docker container commit my_web my_pacman:1.0

    1-2. 생성된 이미지로 웹서버 구동 (900번 포트)
    docker run --name my_web2 -p 900:80 my_pacman:1.0

  2. Docker Image 빌드를 위한 파일인 Dockerfile 로 만들기

  • 문법은 그때그때 필요할 때마다 학습
  • Dokerfile 을 만들고, Dockerfile 대로 이미지를 build
  • Dockerfile 은 이미지 파일의 설명서!
    docker build --tag my_pacman:2.0 ./
    현재 파일에서 찾아서 my_pacman이라는 이름, 태그는 2.0으로 저장해


    💨 회고

왕! 신기한데 어려워! yaml 사용하는게 더 어려웠음 ㅠ 근데 그 yml 파일 어떻게 만드는건지 몰랐는데 걍 txt파일에다 작성하고 .yml이라고 저장해주면 됨 ~! 신통방통

profile
느려도... 꾸준히.....🐌

0개의 댓글