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
터미널에서 오류 없는지 확인
'AI, 머신러닝, 딥러닝, 데이터 분석' 카테고리의 다른 글
AI Model study (0) | 2023.10.27 |
---|---|
GIT (0) | 2023.10.26 |
Django restful (0) | 2023.10.18 |
AlexNet ImageNet Claasification with Deep Convolutional Neural Networks _ Geoffery E. Hinton (0) | 2023.08.31 |
딥러닝 LSTM(Long Short Term Memory) (0) | 2023.08.30 |