- 클라우드와 온프레미스 인프라에서 사용자별 도커기반 개발환경 구성을 통해 현대적 방식의 개발환경을 구현하고 개발 사이클 전체에서 이슈관리와 형상관리를 통합적으로 수행하도록 구현을 진행
- 필요한 사항: Jira, GitLab, Docker registry, vs code, Public cloud platform, docker
- 참고자료
- https://code.visualstudio.com/docs/remote/containers
Containers extension 이 제공하는 두가지 운영모델
- Attach to a running container
실행중인 원격 컨테이너에 접근하여 개발 진행
https://code.visualstudio.com/docs/remote/attach-container
Quick start
1) Try a development container
시작하는 가장 쉬운 방법은 샘플 개발 컨테이너 중 하나를 시도하는 것
2) Open an existing folder in a container
파일 시스템의 기존 소스 코드를 사용하여 정규 개발 환경으로 사용할 기존 프로젝트의 개발 컨테이너를 설정하는 방법
3) Open a Git repository or GitHub PR in an isolated container volume
컨테이너에서 로컬로 복제된 리포지토리를 열 수 있지만 PR 검토를 위해 리포지토리의 격리된 복사본으로 작업하거나 작업에 영향을 주지 않고 다른 브랜치를 조사할 수 있습니다.
build 단계
Workspacae 파일은 로컬 파일 시스템에서 마운트되거나 컨테이너에 복사 또는 복제 된다.
서로 다른 컨테이너에 연결 하는 것만으로 개발 환경을 원활하게 전환 할 수 있다.
이후단계 - 컨테이너 자습서를 확인
컨테이너 확장을 사용하여 Docker 컨테이너에서 Visual Studio Code를 실행하는 방법을 안내
https://code.visualstudio.com/docs/remote/containers-tutorial
고급 컨테이너 구성 단계
https://code.visualstudio.com/remote/advancedcontainers/overview
창이 다시 로드되면서 컨테이너가 아직 존재하지 않기 때문에 vs code 는 컨테이너를 생성하고 샘플리포지토리를 격리된 컨테이너 볼륨에 복제한다.
F1 실행 > 설정 파일을 오픈
사전 준비 과정으로 도커 Desktop 이 설치 되어있어야 한다.
도커가 실행중인 상태여야 원격 개발 기능을 사용할 수 있으므로 도커 실행.
도커 확장기능 설치하고 도커 메뉴 선택하면 로컬의 컨테이너와 이미지가 노출됨
Local Docker 를 사용한 컨테이너 개발 환경 설정 테스트
Remote-Containers: Try a Development Container Sample 메뉴를 통해 github 에서 언어별 sample 프로젝트를 체크아웃해 컨테이너를 테스트 한다.
체크아웃 이후 자동으로 빌드 및 이미지 생성, 컨테이너 실행이 진행되며 완료 후 Dev Containers 에 Container 가 생성되는 것을 확인 할 수 있다.
도커 컨테이너 내부 작업 진행가능하도록 터미널이 생성됨
컨테이너가 빌드되면 VS Code 가 자동으로 컨테이너에 연결하고 로컬 파일 시스템의 프로젝트 폴더를 컨테이너에 매핑한다.
Run the application - F5
컨테이너 내부에서 어플리케이션 실행은 F5 버튼으로 진행
localhost 에 Sample project 에 매핑된 포트로 진입하면 실행된 웹 페이지를 볼 수 있음
컨테이너 빌드 완료 상태 icon
컨테이너 빌드 후 컨테이너 실행 상태 icon
컨테이너 실행 후 디버깅 상태 icon
각 설정 항목의 세부 컬럼은 아래 공식 링크에서 확인
깃 레포지토리에서 코드를 클론하고 클론된 코드는 실제 컨테이너 내부에 위치하게 됨
예제
사용자 프로젝트
리모트 호스트에 도커 볼륨이 생성되고
실행된 컨테이너 내부에 vscode-server 와 workspace 가 위치하게 됨
실행된 컨테이너 세부정보
F5 버튼 클릭~!
Local 에서 3000 포트로 접속시 리모트에서 빌드 및 실행되는 컨테이너의 결과물을 확인 할 수 있음
컨테이너 내에서 폴더 열기를 선택
기존에 clone 이 완료된 코드 directory 를 선택
기존 프로젝트에 개발 컨테이너 추가 - devcontainer.json 파일을 통해 컨테이너 세부 정보를 설정함
개발에 활용 가능한 컨테이너가 다양하게 노출됨
해당하는 부분을 모두 선택 후 확인
Docekrfile 과 devcontainer.json 파일을 프로젝트에 맞게 수정 후 저장
Trouble shooting
10114 ms] Command failed: docker run --sig-proxy=false -a STDOUT -a STDERR --mount source=/Users/leesj/Documents/vs_code/mlops_poc/myRepo,target=/workspaces,type=bind,consistency=delegated --mount type=volume,src=vscode,dst=/vscode -l vsch.local.folder=/Users/leesj/Documents/vs_code/mlops_poc -l vsch.quality=stable -l vsch.remote.devPort=0 --entrypoint /bin/sh vsc-mlops_poc-8bbbc3a2a756c5fc1f18dfee2d141797 -c echo Container started
trap "exit 0" 15
while sleep 1 & wait $!; do :; done
[6087 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount source=/Users/leesj/Documents/vs_code/mlops_poc,target=/workspaces,type=bind,consistency=delegated --mount type=volume,src=vscode,dst=/vscode -l vsch.local.folder=/Users/leesj/Documents/vs_code/mlops_poc -l vsch.quality=stable -l vsch.remote.devPort=0 --entrypoint /bin/sh vsc-mlops_poc-8bbbc3a2a756c5fc1f18dfee2d141797 -c echo Container started
vscode ➜ /workspaces/mlops_poc (master ✗) $ python --version
Python 3.10.0
vscode ➜ /workspaces/mlops_poc/app (master ✗) $ python src/app.py
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 873-964-937
127.0.0.1 - - [08/Nov/2021 07:15:47] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [08/Nov/2021 07:15:47] "GET /favicon.ico HTTP/1.1" 404 -
devcontainer.json 의 주석부분을 해제
// "postCreateCommand": "pip3 install --user -r requirements.txt",
bash 실행
백그라운드 실행
아래 접속하고자 하는 도커가 실행되고 있는 호스트를 추가
"docker.host": "ssh://[계정]@[host IP]"
앞에서 실행시킨 도커 컨테이너가 노출됨. 클릭시 새로운 vs_code 편집창이 오픈됨
호스트에 접근되면 아래와 같이 컨테이너 목록이 노출됨-1
실행중인 컨테이너 정보 노출-2
기존 컨테이너중 하나를 선택하여 진입하기 시도하면 새로운 vs_code 편집창이 열림
정상적으로 컨테이너에 접근하여 컨테이너가 실행되면 아래와 같은 로그가 터미널에 출력
원격에서 실행중인 도커 내에서 구현 할 수 있는 준비가 완료됨
파일 또는 폴더 열기를 선택하여 remote 작업할 remote 디렉터리를 오픈
컨테이너 내의 리모트 디렉터리가 오픈됨
디렉터리에서 테스트 파일을 생성하여 디버깅을 확인
생성된 GCP VM에 Docker install
GPU 를 사용하지 않는 Tensorflow 도커 이미지를 컨테이너화
컨테이너에 접속
Tensorflow 컨테이너 내부로 접근된 새로운 창이 확인됨
원하는 디렉터리에 접근하여 작업 수행
리모트 Container 접근하여 Git 기반 컨테이너 배포 선택
새로운 창이 오픈되고 컨테이너 빌드를 시작함
내부망과 VPN 연결되어있지 않은 인스턴스에서는 사내 깃랩 접근 할 수 없어 clone 작업이 진행되지 않음
깃 레포지토리 기반 컨테이너 배포
설정파일을 추가 할 방식을 선택
정상적으로 컨테이너가 배포되면 아래와 같이 vs code 에서 확인 가능
깃랩 호스팅 사설 레지스트리 등록 불가능한듯..