VSCode의 통합 터미널에서 Docker 내에서 앱을 실행하는 데 사용한 역학

2019년 8월 21일 추가



이 기사의 내용은 낡고 크게 멀리 있습니다.
읽을 필요가 없습니다.

VSCode의 원격 개발을 사용합시다.
htps : // 여기.ゔぃすあ lsつぢお。 코 m / 두 cs / Remote / Remote-Oh r ゔ ぃ w

나는 원격 개발 (linux vm)을 사용하지만 편안합니다.

소개



Windows에 VM을 세우고,
VM의 Docker 컨테이너에서 응용 프로그램을 실행하고 있지만,
· 매번 docker 이미지를 빌드하는 것도 번거롭습니다.
・Windows상에서 편집한 파일을 Linux에 카피하는 것도 귀찮습니다.
・Windows상의 VM이기 때문에, F1로부터의 태스크를 정의할 수 없어 실행이 귀찮게 합니다.
· 매번 docker run이라든지 두드리고 싶지 않다.

라고 하는 고민이 있었습니다.
나 나름대로 해결책을 생각해 보았으므로,
누군가의 도움이 된다고 생각합니다.

Windows와 Linux의 파일 복사가 번거롭습니다.



Windows와 Linux에서 파일을 공유하는 방법은 많이 있다고 생각합니다.
WinSCPを使う。
 →いちいちSyncされているかを意識しなければいけないのが面倒かと思った
 (実際意識する必要はないかもです。あんまり触ってないです。いい加減ですね。。。)

Linux上にSambaを立てちゃう。
 →SambaはSambaで、ファイル作成時の権限の設定してあげないといけなかったり、
  SambaのユーザとLinuxのユーザーをマッピングしなければいけなかったりと、
  複雑化しそうなので手を出したくなくなった。

vagrantとVirtualBoxでファイル共有設定しちゃう。
  →guest additionが入らないことがよくあったので、避けた

여러가지 이유를 붙여 피했지만,
내가 선택한 것은 이것이었다.

dokany+win-sshfs
htps : // 기주 b. 코 m / 마사에 에즈 / 우 흠 shfs
htps : // 기주 b. 코 m / 도칸 - v / 도카 ny
※Dokan의 버전은. 1.1.0.2000으로 한다.
GUI판도 있으므로, 그 경우는, 다른 형태의 Qiita의 기사를 참고로, 인스톨하면 좋다고 생각합니다.

무려 SSH의 접속처에, 드라이브 편지를 할당해,
파일 시스템으로 조작할 수 있습니다!


docker 이미지를 매번 빌드하지 않으면 앱을 실행할 수 없습니다.



파이썬이나 루비와 같은 인터프리터 언어를 작성할 때,
docker 이미지를 빌드 → docker run으로 실행이라는 흐름으로 해 버리고 있어,
인터프리터 언어의 장점을 죽이고 있다고 느꼈습니다.

거기서

・docker 호스트와, 컨테이너로 디스크 공유해 버리면 좋지 않을까?
코드 편집은 docker 호스트에서,
코드의 실행은 컨테이너 안에서 실행하면 좋지 않을까?

· 개발중인 컨테이너는 앱을 감싸지 않고베이스로 정의.
릴리즈 용 컨테이너는 별도로 정의 할 수 없습니까?

라고 생각했습니다.

먼저 컨테이너와 docker 호스트에서 디스크 공유이지만,
-v 옵션을 사용하면 쉽게 할 수 있습니다.
・・・하지만, 그런 긴 커맨드는 칠 수 없고, 기억할 수 없기 때문에,
makefile로 작업을 끊습니다.

makefile 발췌
RELEASE_CONTAINER := hogehoge
BASE_CONTAINER := $(RELEASE_CONTAINER)-base
APP_ROOT := /app
CONTAINER_APP_ROOT := /app
MAIN_APPLICATION := entrypoint.sh

# ベースのコンテナは、頻繁に利用、更新されると思ったので、
# 先頭に定義して「make」だけで実行するようにした。
commit: var
    docker image build -t $(BASE_CONTAINER) \
    --target base \
    .

# 試行錯誤中、コンテナの中に入りたいときは沢山ある。
# なんで「make shell」でコンテナの中に入るタスクを定義
shell: var
    docker container run -ti \
    --network host \
    -v $(ROOT_DIR)$(APP_ROOT):$(CONTAINER_APP_ROOT) \
    --rm $(BASE_CONTAINER) \
    /bin/sh 

# いちいち /app/entorypoint.shをコンテナの中で実行するのは面倒なので、
# これも「make run」でタスクをていぎ
run: var
    docker container run -ti \
    --network host \
    -v $(ROOT_DIR)$(APP_ROOT):$(CONTAINER_APP_ROOT) \
    --rm $(BASE_CONTAINER) \
    /app/entrypoint.sh

# リリース用のコンテナを作る定義
release: var
    docker image build -t $(RELEASE_CONTAINER) \
    --target release \
    .

var:
    $(eval ROOT_DIR := $(shell pwd))


그런 다음 기본 컨테이너와 릴리스 용 컨테이너를 분리하기 위해,
멀티 스테이지 빌드를 Dockerfile에 정의

Dockerfile
FROM alpine:latest as base

RUN apk add python3
RUN pip3 install --upgrade pip
COPY /app/requirements.txt /requirements.txt
RUN pip3 install -r /requirements.txt

FROM base as release
COPY /app /app
ENTRYPOINT ["/app/entrypoint.sh"]

 
 
 
 
멀티 스테이지 빌드 및 docker -v 옵션,
makefile을 구사하면 나름대로 사용하기 쉬워지고,
이하와 같은 형태로 컨테이너에의 액세스가 편해졌다.
[root@localhost hogehoge]# make shell
docker container run -ti \
--network host \
-v /home/hoge_user/develop/hogehoge/app:/app \
--rm hogehoge-base \
/bin/sh
/ #

VSCode에서 makefile에 정의한 태스크를 실행할 수 없습니다.



SSH 접속처의 makefile을 좋은 느낌으로 실행할 수 있다.
그런 편한 것은 찾을 수 없었다.

그래서 VSCode 확장을 도입하고,
통합 터미널에서 즉시 SSH 로그인을 허용하고,
make를 간단하게 실행하기로 했다.

거기서 이용한 것이,
SSHExtention
htps : // 기주 b. 코 m / ゃ 태 ly d d 라치에 v / vs 코데 ㅇ x 텐시 온

이런 느낌으로 컨피그를 쓰면 F1에서 쉽게 SSH 로그인할 수 있다.
    "sshextension.serverList": [
        {
            "name": "hogehogevm",
            "host": "192.168.56.100",
            "port": 22,
            "username": "root",
            "privateKey": "C:\\Users\\hoge_user\\develop\\keys\\id_rsa",
            "path": "/develop"
        },
    ],
    "sshextension.openProjectCatalog": true

끝에



여기까지 한 일로
①VSCodeからSSHFSでマウントした先をディレクトリとして開く
②コードを編集
③F1からSSHでVM接続へのショートカットを呼び出し→SSHでVMにログイン
④VMの中でmake run実行

라는 흐름으로 편집~코드 실행까지 할 수 있게 되었다.

좋은 웹페이지 즐겨찾기