음성지원 키오스크 프로젝트를 하던 중 필요성을 느낌
프론트와 백에서 서버 구축 후 인공지능을 사용하기 위해 파이썬을 사용하기 위해 셋업을 하던 중 결국 개발 환경 문제를 해결 하지 못하였다.
파이썬 코드를 플라스크 서버에서 사용하기 위해 파이썬 가상환경 세팅을 통일을 하는 부분에서 문제를 직면하였다.
우선 처음 Woong이 서버를 구축하고 배포를 하였지만 window사용자에게는 환경을 다르게 설정해 주어야했다.
윈도우 사용자인 나와 수는 우선 anaconda navigator에서 import조차 되지 않았고 슈리는 pip버전 차이 (?) 때문에,
konlpy와 Mecab을 공유하지 못하였다.
그래서 결국 8/4일 스터디 시간을 초과하며 셋업을 하려하였지만 실패하였고 웅의 의견으로 도커를 사용하려고한다.
자 그럼 도커란 무엇이고 왜 사용하는 것일까?
도커는 environment disparity(환경격차) 문제점을 해결해준다.
예를 들면 나의 컴퓨터는 윈도우이고 서버는 리눅스인 경우이다.
이런 경우에 도커를 통해 다른 머신에서도 같은 환경을 구현할 수 있다.
1.윈도우에 도커 설치
2.서버에 도커 설치
3.docker파일 생성
4. 구현하고자 하는 환경을 설정한다.(예를 들면 우분투,파이썬, 깃 ,,등등)
5.이 파일을 서버,그리고 컴퓨터 둘다준다.
6.도커는 그 파일을 읽고, 필요한것들을 다운로드받고 해당 설정한 환경과 같은 버츄얼 컨테이너(가상 박스)를 컴퓨터에 만든다. 그래서 내가 컴퓨터에서 서버로 (docker파일과함께) 코드를 업로드 할때 잘작동한다.
도커의컨테이너들은 독립적이다. 그래서 하나의 서버에 다른 많은 수의 컨테이너를 가질 수 있다.
즉, 도커 덕분에 매번 새로 개발을 할때 마다 새로운 서버를 구축(구매)하고, 설정을 할 필요가 없다.
1.원하는 개발 환경을 파일에 저장하면, docker는 이를 내가 원하는 어떤 머신에든 해당 환경을 시뮬레이션 해준다.
2.이러한 환경들은 각기 독립적으로 존재하기 때문에, 원하는 무슨 환경이든 모듈식으로 관리가 가능한다.
그래서 파이썬 서버, 자바서버, 데이터베이스 서버 등등 이렇게 모두 추가로 구매할 필요가 없다 그냥 개꿀이다
도커는 각 요소들이 설치된 모습을 '이미지'라는 형태로 박제해서 저장을 한다.
각제품마다 공식적으로 제공되는 이미지도 있고 자신이 원하는대로 만들 수도 있다.
git으로 저장된 내용들이 Github에 올려지는것처럼 dockr이미지들은 dockerhub라는 곳에 업로드 되어 공유되고 다운받아 질수 있다.
그리고 이렇게 이미지로 저장된 항목들이 함께 연결되어 동작하도록 설정된 상태를 명령어 택스트나 문서 형태로 저장 할수도 있다. 마치 이것들을 설치하는 과정을 어디서든 컴퓨터가 자동으로 재현할 수 있도록 녹화해 둔다는 느낌이다.
도커는 이것들을 바로 컴퓨터에 설치하지 않고 컨테이너라고 하는 독립된 가상공간을 만들어내서 복원을 한다.
버츄어박스와 같은 가상 컴퓨터와는 다른 개념이다.
가상컴퓨터는 한 물리적 컴퓨터 안에 각각 OS를 가동하는 가상 컴퓨터들이 물리적 자원을 분할해서 써 성능에 한계가 생긴다.
하지만 도커는 OS단까지 내려가는게 아니라 실행 환경만 독립적으로 돌리는 것이어서 컴퓨터에 직접 요소들을 설치한거랑 별차이 없는 성능을 낼 수 있고 가상 컴퓨터보다 훨씬 가볍고 빠르게 각각을 설치하고 켜고 끄고 서로 연동할 수 있다.
그래서 서버에 문제가 생겨 수정 하거나 일부를 업그레이드 할 때 일일이 서버를 정지하고 지우거나 새로 깔 필요없이 컨테이너를 통체로 바꿔서 새 실행하면 된다.
#이런저런 잡정보
개발작업은 보통 어떻게 이루어 질까?
먼저 개발자의 컴퓨터에서 코딩을하고 테스트를 진행을 해서 별 이상이 없으면 그것들을 서버에 올려서 사람들이 사이트를 볼수있도록
서버에서 프로그램을 실행,즉 배포를 한다.
그러려면 개발자의 컴퓨터와 서버 모두에 이것들을 돌릴 수 있는 환경들 즉,node.js파이썬 그리고 mySQL 가능한 버전등이 동일하게 깔려 있어야 한다
1.도커 사이트로 가서 도커설치
윈도우는 파워쉘에서 docker --version 명령어로 도커버전확인
먼저 원하는 곳에 실습을 진행할 폴더를 만든다.
원도우는
사용자 명으로된 폴더 혹은 더 안에 폴더를 생성해야한다.
그 폴더를 VS코드로 열고 터미널을 연 다음
git clone @@@@@@@@@@@@@를 입력
node.js란 브라우저가 아닌 내 컴퓨터에서 JS를 사용 할 수 있게 해주는 거다.
node.js와 http sever가 없다는 가정하에 sudo docker run -it node 입력
도커의 이미지란건 리눅스 컴퓨터의 특정상태를 캡처해서 박제해놓은걸 말한다.
node이미지는 리눅스에node.js가 설치된 상태를 그대로 급속 냉동을 하여 클라우드에 올려놓은것이다.
run 명령어는 이미지가 없으면 다운받은 다음 내 컴퓨터에서 해동해서 컨테이너로 만든다.
이미지는 컨테이너를 찍어내는 틀 또는 무한 생산 가능한 컨테이너 조립키트라고 생각해도 좋다.
docker images 명령어를 통해 node란 이름의 이미지가 다운받아진걸 볼 수 있따.
docker ps명령어를 통해 이름이 임으로 지어진 컨테이너를 볼수 있따.
docker exec -it (컨테이너명) bash를 입력하여 이 컨테이너 내에서 bash shell이라는걸 실행한다는 것이다.
이컨테이너 내부를 통해 가상의 리눅스 환경으로 들어간것이다.
ls를 쳐보면 리눅스 환경의 기본 디렉토리들이 보인다. 컨테이너마다 각각 이 파일시스템과 네트워크가 있는 것이다.
어떤 OS든 리눅스 가상환경의 형태로 돌아간다
https://www.yalco.kr/36_docker/ 도커명령어 정리