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
필요한 리소스
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/
도커 볼륨
대부분의 경우 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 |
딥러닝 RNN (0) | 2023.08.29 |
[프로그래머스] 파이썬 최댓값 만들기 ver. 2 (0) | 2023.08.07 |