Docker 컨테이너에서 개발

몇 달 전에 나는 새 컴퓨터 한 대를 샀는데, 나는 줄곧 무엇을 설치할지 애써 결정하고 있다.과거의 경험에 의하면 개발 환경으로 사용되는 컴퓨터는 종종 곧 혼란스러워질 수 있다는 것을 나는 안다. 왜냐하면 각종 라이브러리, 프레임워크, 의존항을 설치할 수 있기 때문이다. 네가 어떻게 말하든지, 더 나쁜 것은 이런 것들 중 어느 것이나 대부분이 버전 충돌에 부딪힐 수 있기 때문이다.개발 환경이 깨끗한 환경은 거의 없다. 나는 당신들의 상황을 모른다. 그러나 나는 개발 환경 설정 문제를 해결하는 데 시간을 낭비하는 것보다 더 사람을 낙담시키는 일이 매우 적다는 것을 발견했다.제가 먼저 코드를 쓸게요!
이 점을 감안하여 나는 일찌감치 node 설치를 피하기로 결정했다.예를 들어 이 컴퓨터의 js.내 경험에 의하면 Node는 버전 충돌로 인해 많은 번거로움을 가져와 악명이 높다.노드 버전 관리자 nvm 는 문제를 완화하기 위해 이렇게 많은 것만 할 수 있는데, 나는 그것이 매우 서투르다는 것을 발견했다.그러니까 됐어, 고마워.
응, 그 다음은 스마트팬츠.너는 나에게 요 며칠 왜 nvm를 사용하지 않고 창고 웹 개발을 진행하느냐고 물었다.좋은 질문!정답은 Docker입니다.
I’ve written about Docker in the past 나는 단지 그것을 좋아할 뿐이다.나는 그것이 무엇을 하고 어떤 문제를 해결했는지 이해하는 데 약간의 시간을 들였지만, 일단 내가 해낸다면, 그것은 나의 해결 방안이 되어 일을 통제할 수 있게 되었다. 당신은 프로젝트에 필요한 모든 의존항과 운행할 때의 개발 환경을 격리할 수 있다.만약 당신의 친구가 당신의 프로젝트를 실행하고 싶다면, 그들은 용기를 얻고, 프로젝트는 그들의 컴퓨터에서 실행되며, 로컬에 모든 의존 항목을 설치할 필요가 없다.아름다웠어
그래서 몇 주 전에 저started a new course to learn Gatsby는 제 Docker 개발 환경을 테스트하는 완벽한 장면이었습니다.

개발 환경에 대한 Docker 이미지


내가 한 첫 번째 일은 node로 기초 그림을 만드는 것이다.js와 실용 프로그램을 설치했습니다.다음은 내가 사용한 이미지의 Dockerfile 파일입니다.

주의: 저는 debian을 기초 이미지로 사용하지만, 이미지 크기에 관심이 있으시면alpine


위의 파일에서 저도 평론에서 어떻게 1을 강조했습니다.이미지 및 2를 구성합니다.이미지를 실행하는 두 가지 옵션입니다.이것은 이 이미지를 개발 환경의 용기로 사용하기 시작할 때 필요한 두 가지 절차입니다


이미지 실행 방법 선택


당신이 관심 있는 것은 단지'시발점'이 있을 뿐이거나 원한다면 첫 번째 선택에 따라 하세요.이것은 루트 폴더의 프롬프트에서 용기에 당신을 넣을 것입니다.그리고 다른 설치 명령을 실행할 수 있습니다


이 이미지를 개발 환경으로 사용하려면 두 번째 옵션 docker run 으로 실행하십시오.이 명령은 두 가지 매우 유용한 추가 일을 했다.브라우저에서 항목에 액세스할 수 있도록 컨테이너 포트를 공개합니다(나중에 자세히 설명합니다).컴퓨터의 코드 편집기에서 작성한 코드를 용기 안의 폴더에 비추어 용기가 코드에 대한 변경 사항을 볼 수 있도록 합니다.네, 아주 중요합니다


이 예에 대해 저는 GitHub에서 복제한 저장소가 있습니다. 이것은 Gatsby 응용 프로그램입니다.따라서, 나는 두 번째dockerrun 명령을 실행해서, 내가 정확한 경로를 사용해서 리포


용기 내부


용기에 명령 프롬프트가 있으면 저장소에 저장된 파일package.json의 위치로 이동해서 실행할 수 있습니다npm install.이것은 용기에 모든 항목 의존항을 설치합니다


다음은 실행gatsby develop을 통해 개발 서버를 시작할 수 있습니다


메시지를 받았습니다. 브라우저에서 항목을 볼 수 있습니다.



 Local: http://localhost:8000/

그렇게 빨리 하지 마, 내 친구야!


그러나, 내가localhost:8000로 옮겼을 때, 나는 하나를 얻었다ERR_CONNECTION_RESET.나는 127.0.0.1을 시도했지만 아무것도 얻지 못했다.만약 내가 실행 중인 용기 docker ps 를 열거한다면, 나는 그것이 0.0.0.0에서 실행되는 것을 보았고, 나는 0.0.0.0이 다른 "127.0.0.1"또는 "localhost"를 표시하는 방식이라고 생각한다. 왜 작동하지 않습니까?



└❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a12a061be10 gatsby "/bin/bash" 10 minutes ago Up 2 minutes 0.0.0.0:8000->8000/tcp my\_project

사실은 용기 안에서 응용 프로그램을 실행할 때 localhost 용기 자체가 아니라 워크스테이션이 아니라는 것을 증명합니다.따라서 용기가 어느 호스트에서 응용 프로그램에 서비스를 제공해야 하는지 알려야 합니다.그러나 컨테이너에 동적 IP 주소가 있으므로 컨테이너에서 사용할 IP 주소를 미리 알 수 없습니다


나 이제 어떡하지?


이 문제를 해결하는 방법은 응용 프로그램에'자리 차지 문자'IP 주소를 제공하는 것이다.0.0.0.0 is that placeholder and it means “all IPV4 addresses in the local machine” . 이 경우


gatsby develop --H 0.0.0.0


지금, 정보가 달라졌어요:



 Local: http://localhost:8000/ On Your Network: http://172.17.0.2:8000/

이 두 주소는 현재 모두 나의 프로젝트를 위해 서비스하고 있습니다!


그렇습니다.코드를 변경하고 브라우저에서 변경 사항을 볼 수 있습니다


다른 선택


VSCode를 편집기로 사용할 경우 현재 "Remote – Containers"라는 확장자가 있습니다. Docker 컨테이너에서 저장소를 열 수 있습니다. (이미지를 만들 필요가 없습니다.) 사용자 UI에서 컨테이너를 관리할 수 있습니다.Docker를 로컬에 설치해야 확장이 가능합니다


주의해야 할 것은 VSCode 관리 포트를 통해 공개하고 이 항목을 테스트로 사용할 수 있다는 것입니다. 저는 제 개발 서버 명령에 호스트를 지정할 필요가 없습니다.확장은 포트를 공개하는 방법을 제공합니다(프로젝트가 실행되는 포트를 선택하고 마우스 오른쪽 단추를 클릭하고 "전송 포트"):


VSCode에서 원격 용기의 포트 전송


현재 브라우저의 127.0.1:8000에서 이 항목에 접근할 수 있습니다


VSCode 원격 용기 확장에 대한 더 많은 정보는 추천this excellent article합니다. 이것은 제가 한 것보다 훨씬 상세합니다


이 문장이 당신의 개발 환경을 질서정연하게 유지하는 데 도움을 줄 수 있기를 바랍니다




If you found this helpful, let me know on !

The post Developing inside a Docker container _was originally published at _flaviabastos.ca

좋은 웹페이지 즐겨찾기