본문 바로가기
AI, 머신러닝, 딥러닝, 데이터 분석

Docker

by 포로리다 2023. 10. 23.
728x90
반응형
SMALL

H/W가상화

1. 버츄얼 머신(VM ware, Virtual Box)

        OS     OS     OS

Ram  

CPU CPU1 CPU2 CPU3

SSD/         OS

 

가상화 장점

1. 포터블 Portable(=이식성, 도커만 깔려있으면 되므로)

2. 자원의 효율적 분리

단점

1. os가 계속 사용됨

2. 자원이 예측과 달라짐

ㅁ   ㅁ   ㅁ   D
프로그램 = 컨테이너 
도커
OS

Docker의 용어

컨테이너 (= 프로그램)를 그대로 생성할 수 있는 것이 image(=도면, 각 버전마다 하나씩 존재)

image 도면

Network 계정 

1. 네트워크 망(접근할 수 있게 함)

 

 컨테이너 중 D가 장고라면 GCP에 접근할 수 없음. HOST IP의 8000번 포트로 진입함 -> 컨테이너 안의 8000과는 분리된 개념. HOST IP에 대한 PORT와 컨테이너 Port와 포트포워딩 해주어야 함. 

Port란? 파일을 읽고 쓸 수 있는 통신을 위한 문. 

컨테이너와 os에도 각각 문이 존재함.

host의 포트와 컨테이너의 포트가 각각 달라도 그 둘을 연결하는 것이 포트포워딩임.

 

프로그램의 몇몇 데이터들은 연속적으로 유지시켜야 함.(ex. MySQL데이터)

파일의 저장 공간을 volume볼륨이라고 하는데 이를 공유하는 것이 mount해서 볼륨을 유지시킬 수 있음

 

 

Port 

    DEFAULT Port
  MySQL 3306
프로토콜 HTTP 80 
HTTPS 443
SSH 22

127.0.0.0.1: 8000

    HOST       Port ( 포트 번호와 포트 열지 말지는 내가 정함. )

=local host

 

다양한 예시

                  호스트 : 컨테이너

docker run -p 9000:8000

docker run -p 9000:3306 (바인딩, 포워딩 해 줌)

호스트 입장에선 특정 컨테이너 이름에 있는 3306으로 연결해 주자. 

docker run -p 3306:3306

docker run -p 8000:8000

 

Client              HOST                  Container

                                      ex.컨테이너 - django(3306)

5.5.5.5:9000    9000      ex.컨테이너 -  sql (3306) 

  3306              8000       ex.컨테이너 하나에 장고와 mysql 둘다 존재하는 경우

----------->                     

----------->

8000


debian 계열의 리눅스 사용

detached 는 백그라운드에서 실행

port 바인딩 : 외부에서 접속 들어올 때 우리의 컴퓨터가 어떻게 쓰고 있는지 모르므로 호스트의 포트로 접속할 수밖에 없고 컨테이너 안의 포트와 외부 포트를 연결해 줄 수 밖에 없음

sudo docker container prune  지금 실행 중이지 않은 모든 컨테이너를 제거함

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]

 

Decision Tree 엔트로피가 0일 때까지 쪼개는 것 , 완전 순수한 노드가 나올 때까지 쪼갬.

overfitting 줄이는 것은 뎁스를 제한하는 방법 = prune 

 

sudo docker image prune  지금 실행 중이지 않은 모든 image 제거 

 


 Q.docker로 mysql을 설치하기

이미지는 다음으로 한다.(https://hub.docker.com/_/mysql)

  • version은 8로 한다.
  • container의 port는 3306, host의 port는 5002번으로 하자.
  • 다양한 환경변수를 setup하여 로그인 할 수 있도록 하자.
  • database 이름은 docker_django로 하자

mysql - Official Image | Docker Hub

 

mysql - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links 8.1.0, 8.1, 8, innovation, latest, 8.1.0-oracle, 8.1-oracle, 8-oracle, innovation-oracle, oracle 8.0.34, 8.0, 8.0.34-oracle, 8.0-oracle 8.0.34-debian, 8.0-debian 5.7.43, 5.7, 5, 5.7.43-oracle,

hub.docker.com

필요한 리소스
1. 우리 pc에서 접속 가능(외부에서 접속 가능)

2. 접속을 root계정으로 

      2-1 root 패스워드 설정

3. docker-django 라는 database설정

sudo docker run --name 1025mysql -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=docker_django -e MYSQL_ROOT_HOST=% -p 5002:3306 -d mysql:8

 

- 환경변수는 앞에 -e를 붙임

- 띄어쓰기 주의 필요

 

쁘띠 젠 제네레이터 설치 참고한 블로그

https://blog.wsgvet.com/google-cloud-platform-ssh-key-putty-connection/

 

구글 클라우드 플랫폼에서 SSH키 생성 후 PuTTY 접속하기

구글 클라우드 플랫폼에서 SSH로 접속할 때, 기본적으로 제공하는 브라우저 접속은 로그인이 필요하고, 반응…

blog.wsgvet.com

 

도커 볼륨

대부분의 경우 Bind Mount도 문제 없으나 굳이 나누면

데이터의 생성주체가 우리면 BindMount방식

데이터의 생성주체가 Container면 Volume Mount 방식

-v 옵션 <host volume>:<container volume>
ex.  docker volume create <name>
> docker volume create hello
> docker run -d -v hello:/world busybox ls /world

 

deploy  엔진엑스(웹서버)에 html파일 갈아끼우기

 

Dockerfile 작성 

  • 한줄이 하나의 명령어
  • 명령어는 대소문자 상관 없으나, 일반적으로 대문자를 사용
  • FROM : 베이스가 될 이미지 정의
  • LABEL : 이미지에 메타데이터 추가, “키:값” 형태로 정의

                    docker inspect 명령어로 이미지 메타데이터 정보 확인가능

  • RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어 실행

        명령어의 옵션/인자 값은 배열형태로 전달

         Dockerfile 명령어는 쉘을 사용하지 않기 때문에 쉘을 정의해야한다

         예) RUN [“sh”, “-c”, “echo $MY_ENV”]

  • ADD : Dockerfile 이 위치한 디렉토리의 파일 → 이미지에 추가(url도 가능)
  • COPY: Dockerfile이 위치한 디렉토리의 파일 → 이미지의 복사 가능(url 불가능)
  • WORKDIR : 명령어를 실행할 디렉토리 정의, cd 명령과 같은기능
  • EXPOSE : 생성한 이미지에서 노출할 포트 정의 
  • CMD : 컨테이너가 시작될때 실행되는 명령 설정, 한번만 사용가능
  • ENTRYPOINT: 해당 이미지가 실행할 진입점, =시작점, 스크립트
  • echo : 출력

(가상환경) 터미널

pip freeze > requirments.txt

django-admin startproject myapp

chmod 777 docker-entrypoint.sh


터미널에서 오류 없는지 확인

 

 

728x90
반응형
LIST

'AI, 머신러닝, 딥러닝, 데이터 분석' 카테고리의 다른 글

AI Model study  (0) 2023.10.27
GIT  (0) 2023.10.26
Django restful  (0) 2023.10.18
딥러닝 RNN  (0) 2023.08.29
[프로그래머스] 파이썬 최댓값 만들기 ver. 2  (0) 2023.08.07