"에디터의 참고" Vidar Hokstad는 독 노동자 사용, 데이터 손실,이 블로그에 경험에 반복 가능한 빌드를 만드는 독 노동자의 사용이 없을 경우에 특히 매우 경험, 그 표현 독 노동자 컨테이너 8 모드의 개발.
다음은 번역입니다.
독 노동자 지금 나 좋아하는 도구 이며이 문서에서 내가 독 노동자의 내 사용 하는 동안 되풀이 패턴을 개요 거 야. 나를 놀라게, 그들을 기대 하지 않습니다 하지만 당신을 위해,이 작품을 기대 하 고 독 노동자 프로세스를 사용 하 여 발생 한 패턴 들에 대해 당신에 게 이야기 하 고 싶습니다.
내 모든 독 노동자 실험의 기초 독 노동자 컨테이너 데이터의 손실 없이 개축 될 수 있다 그래야 변경 하는 볼륨 상태를 유지 하는 것 이다.
다음 dockerfiles 예의 모든 다른에 상관 없이 언제 든 지 대체 될 수 있다 컨테이너를 만드는 방법에 집중 된다.
1. Sharedbase 컨테이너 (s)
독 노동자 권장 "상속", 뿐만 아니라 때문에 그것의 장점을 새로운 컨테이너, 하지만 독 노동자를 건설 하는 시간을 줄일, 중간 단계를 캐시할 수 있습니다 모호한 상황에서 공유 하는 기회를 잃고도 쉽다 독 노동자를 효율적으로 사용 하는 천연 기본적인 방법 이기도 합니다.
물론, 독 노동자를 내 다양 한 컨테이너를 마이그레이션할 때 얼굴을 우선 여러 단계입니다.
어디서 나 배포 하고자 하는 대부분의 프로젝트에 대 한 프로젝트는 긴 과정을 필요로 하는 경우에 특히 컨테이너를 만들, 수 있다 또는 특정 패키지, 컨테이너 실행 하려는 그래서 점점 더 많은 되고있다.
중요 한 점은 MyBase 환경 완전히 임의 수 있도록 독 노동자 (를 포함 하 여 몇 가지 데스크톱 애플 리 케이 션에 대 한 의존도 내)에 "모든 것"을 실행 하려고 생각 해요.
그래서 나는 곧 내 기본 설정을 기본 컨테이너에 추출 하기 시작 했다. 이것은 내 현재 "Devbase" Dockerfile:
데비안은: apt-얻을-y를 실행 하는 색색 실행된 Apt-get 업데이트 설치 루비 루비 개발 빌드 필수 git 리 보 apt-get은 설치-y를 실행 Penssl-루비 Libxslt dev Libxml2-dev 실행-설치-y gdb strace를 디버깅에 대 한 # # 내가 설정 사용자 실행 useradd Vidarh -U 1000-s/빈/bash-아니-만들기-홈 보석 설치-n/usr/빈 bundler 실행 실행 보석 설치-n/usr/빈 레이크 workdir/홈/v Idarh/환경을 가정/가정/vidarh 볼륨 ["/home"] 사용자 Vidarh 노출 8080
아무것도 여기-그것은 쉽게 사용할 수 있는 특정 도구를 설치 하는 것을 지정할 수 있다. 이러한 대부분의 사람들에 대 한 달라질 수 있습니다. 그것은 만약/때 컨테이너를 다시, 놀라움을 피하기 위해 특정 레이블을 지정 해야 지적 가치가 있다.
기본 포트 8080을 사용 하 여 이것이 어디 나 웹 응용 프로그램을 게시 하는 포트 이기 때문에 나에 대 한 이러한 컨테이너를 사용.
그것은 나에 게 사용자를 추가 하 고/홈 디렉터리를 생성 하지 않습니다. 나는 다음 패턴에 이르게 바인딩, 호스트에서 공유 폴더/홈을 탑재.
2. Sharedvolume Dev 컨테이너
하나 이상의 볼륨을 공유 하는 모든 내 dev 컨테이너: / 쉬운 개발을 위한 홈. 많은 애플 리 케이 션에 대 한 개발 모드에서 파일 시스템 변화 기반 코드-장전 작업이 사용 됩니다 os/배포판 수준 종속성 컨테이너에 캡슐화 하 고 초기 환경에서 애플 리 케이 션에 번들로 작업 확인 재부팅/다시 VM 때마다 하지 않고도 코드 변경 합니다.
다른 사람에 관해서는 그냥 재부팅 (다시 하지) 컨테이너는 코드 변경 내용에 응답 해야 합니다.
테스트/준비 및 생산 컨테이너에 대 한 대부분의 경우는, 대신 사용 하 여 볼륨 "추가" 코드 독 노동자 컨테이너를 추가 하 여 코드를 공유 하지 않습니다.
다음은 나 "홈페이지" Dev 컨테이너의, 예를 들어 있는 아래/가정/가정 공유 기본 컨테이너를 사용 하는 방법을 보여 주는 "Devbase" 컨테이너에 볼륨 내 개인 위 키를 포함 하는 dockerfile입니다.
Vidarh/devbase workdir/가정/vidarh/src/repos/홈페이지 entrypoint 빈/홈페이지 웹에서
여기 Dev 버전의 블로그가입니다.
Vidarh/devbase workdir/사용자 루트에서 GRAPHIVZ 통합 실행-업데이트 apt-얻을-y를 실행 # 설치 Graphviz XSLT Proc ImageMagick 사용자 Vidarh workdir/가정/vidarh/src/repos/hokstad-com entrypoint 번들 exec rackup-p 8080
때문에 그들은 공유 라이브러리에서 코드를 공유 기본 컨테이너를 기반으로, 이러한 컨테이너는 일반적으로 다시 매우 빠르게 때 나 종속성을 추가/수정/삭제.
그럼에도 불구 하 고 일부의 장소 나 기꺼이 매우 개선, 위의 자료는 경량 고 그들의 대부분은 여전히 이러한 컨테이너에 사용. 독 노동자는 기록 중 복사 오버레이 사용 하 여, 거 대 한 오버 헤드가 발생 하지 않습니다 하지만 그것은 여전히 의미 하기 때문에 최소한의 리소스 소비 또는 기회 공격이 나 오류를 최소화 하기 위해 필요가 없습니다.
3. 데 브 Toolscontainer
이 코드를 작성 하는 SSH에 의존 하고자 하는 사람들에 게 호소 수 있습니다 하지만 그것은 IDE 군중에 대 한 약간 작은. 나를 위해, 위의 설정의 더 큰 혜택 중 하나 나 편집 및 개발 응용 프로그램에서 실행 코드를 테스트의 작업을 수 있습니다입니다.
과거 개발 시스템, 나를 위해 자질구레한 개발 및 생산 종속성 및 개발 도구 종속성은 혼란 하 고 쉽게 불법 종속성을 생산 했다.
이 해결 하는 많은 방법이 있지만와 같은 일반 테스트 배포를 통해 선호 다음 솔루션 그것은 첫번째 장소에 있는 문제를 방지할 수 있기 때문에:
Emacs와, 다른 모든 도구 설치를 포함 하는 별도 용기 그리고 난 아직도 스파스, 유지 하려고 있는데 키가 내 노트북에 내 화면 세션이이 컨테이너 플러스 "autossh"에서 실행할 수 있습니다. 이 연결 유지 거의 항상 내가 코드를 편집할 수 있고 실시간으로 다른 내 dev 컨테이너와 함께 그것을 공유. 다음:
Apt-get-y 설치 Vidarh/devbaserun-updaterun에서 openssh 서버 Emacs23-nox htop 화면 # DebuggingRUN apt-g 동부 표준시-y 설치 sudo wget 컬 텔넷 tcpdump # 32 비트 experimentsrun apt-get-y 설치 Gcc multilib # 매뉴얼 페이지 및 ' 모 세인트 "뷰어: 실행 apt-get은 설치-y 남자 mostrun mkdir/var/실행/sshdentrypoint/usr/sbin/sshd-볼륨 [" /home "] 노출 22EXPO SE 8080
공유 "/home" SSH 연결 하 여 내 요구를 충족 수 있도록 충분 하다.
4. adifferent 환경 컨테이너에서 테스트
독 노동자를 좋아하는 이유 중 하나는 나 다른 환경에 내 코드를 테스트 수 있습니다. 예를 들어 루비 컴파일러 1.9, 업그레이드할 때 나는 dockerfile를 생성 수 고 1.8 환경 파생.
Apt-get-y 설치 git ruby1.8 Vidarh/devbaserun-updaterun에서
물론 비슷한 결과 달성 하기 위해 RBENV를 사용할 수 있습니다. 하지만 난 항상 이러한 도구 성가신 적어도 작품 잘만 된다면, 그것은 쉽게 내 코드를 사용 하 여 다른 사람에 대 한 때문에, 가능한 많은 배포판 패키지를 배포 하려는 때문에.
있을 때 독 노동자 컨테이너, 다른 환경 필요, 난 단지 "독 노동자 실행" 필요, 몇 분이이 문제에 좋은 해결책.
물론, 내 목표를 달성 하기 위해 가상 컴퓨터를 사용할 수 있습니다 하지만 독 노동자를 사용 하 여 더 많은 시간을 절약.
5. Buildcontainer
내가이 일을 작성 하는 코드의 대부분은 해석 하는 언어, 하지만 몇 가지 비싼 빌드 단계 내가 모든 시간을 실행 하 고 싶지 않아.
한 예로 루비 애플리케이션용 "bundler" 실행 됩니다. Bundler는 RubyGems에 대 한 캐시 종속성을 업데이트 하 고 더 큰 응용 프로그램을 실행 하는 데 시간이 걸립니다.
응용 프로그램이 실행 될 때 종종 불필요 한 종속성을 필요 합니다. 예를 들어 종속 로컬 확장 보석을 일반적으로 설치 패키지-일반적으로 기록의 많은 필요 합니다.-모든 빌드 필수 및 해당 종속성을 추가 하 여 쉽게 시작 하. 같은 시간에 bundler 미리 모든 작업을 수행 하도록 할 수 있습니다, 난 정말 하지 않으려면 호스트 환경에서 실행 하는 배포 해요 컨테이너와 호환 되지 않을 수 있습니다 때문에.
하나의 솔루션 빌드 컨테이너를 만드는 것입니다. 종속성 서로 다른 경우, 별도 dockerfile를 만들 수 있습니다 또는 Dockerfile 주요 애플 리 케이 션을 다시 사용 하 고 필요한 빌드 명령을 실행 하는 명령을 다시 작성할 수 있습니다. Dockerfile는 다음과 같습니다.
Myapprun에서 apt-get은 updaterun-설치-y 빌드 필수 [라이브러리에 대 한 여러 dev 패키지] 볼륨 ["/ 빌드"] W Orkdir/buildcmd ["Bundler", "설치", "-경로", "공급 업체", "-독립 실행형"]
다음, 종속성 업데이트 때마다 위의 코드 수 있습니다 실행, 빌드/소스 디렉터리 컨테이너의 탑재 되는 동안 "/ 빌드" 경로.
6. 설치 컨테이너
그것은 내 특기, 하지만 이건 정말 언급할 만큼 가치. 우수한 nsenter 및 독 노동자 입력 도구는 지금 인기 있는 컬에 대 한 옵션 설치 | 배쉬 모드는 큰 걸음 앞으로, 그리고 독 노동자 컨테이너를 제공 하 여 "컨테이너 빌드" 모드 구현.
이것은 다운로드 하 고 빌드는 Nsenter의 적절 한 버전 dockerfile의 마지막 부분 이다:
설치 프로그램 추가 설치/installercmd /
"설치 프로그램"은 다음과 같습니다.
#! / 빈/shif 따위-q/대상; 다음 에코 "를 설치 Nsenter / cp/nsenter/대상 에코 대상" 설치 독 노동자 입력 / "Cp/독 노동자-입력" 대상 Targetelse 에코 "/ 대상이 아닙니다 따위." 에코 "수 있습니다:" 에코 "-다시 실행 하 여이 컨테이너와 v/usr/지방/빈 : / "에코" 대상-Nsenter 바이너리를 추출 (에 있는 / nsenter) "fi
컨테이너의 잠재적인 권한 에스컬레이션 문제를 악용 하려는 악의적인 공격자가 있을 수 있습니다, 비록 공격이 작습니다 적어도 크게.
이 패턴 개발자 때때로 때 스크립트를 설치 하는 매우 위험한 오류를 피할 수 있기 때문에 대부분의 사람들을 끈다.
7. Thedefault-서비스-인-어-박스 컨테이너
난 심각 하 게 응용 프로그램을 비교적 신속 하 게 데이터베이스를 처리 하기 위해 적절 한 컨테이너를 준비, 언제 내가 내 요구에 맞게 적응 될 수 있는 "기본" 인프라 컨테이너의 시리즈는 이미 훌륭한 찾을.
물론 독 노동자 실행""을 통해 "주요" 섹션을 얻을 수 있다 그리고 독 노동자 색인에 대안의 많은 하지만 난 그들을 먼저 확인 데이터를 처리 하는 방법을 찾아서 다음 나의 "도서관"에 수정된 버전을 추가.
예를 들어 BEANSTALKD:
데비안: wheezyenv debian_frontend noninteractiverun apt-get-q updaterun에서 apt-get-y 설치 빌드 essentialADD < h ref = "Http://github.com/kr/beanstalkd/archive/v1.9.tar.gz" > http://github.com/kr/beanstalkd/archive/ v1.9.tar.gz < /a >/tmp/실행 cd/tmp & & zxvf v1.9.tar.gzrun cd/tmp/beanstalkd-1.9/ 타르 & & MakeRUN cp/t Mp/beanstalkd-1.9/beanstalkd/usr/local/bin/expose 11300CMD ["/ USR/지방/빈/BEANSTALKD", "-N"]
8. Theinfrastructure/접착제 용기
이러한 패턴의 많은 초점을 (어떤 의미를 논의 하기 위해 프로덕션 환경) 개발 환경, 하지만 큰 카테고리 누락:
컨테이너 목적은 결합 된 지금까지 나 더 공부를 위해, 전체로 환경 지정 하는 것 이지만, 나는 특별 한 예를 말할 것 이다:
쉽게 액세스 하려면 내 컨테이너, 저는 작은 haproxy 컨테이너. 내 주 서버를 가리키도록 와일드 카드 DNS 항목이 있고 iptable 항목 내 haproxy 컨테이너에 대 한 열. Dockerfile 아무것도 특별 한.
데비안: wheezyadd wheezy-backports.list/etc/apt/sources.list.d/run에서 apt-get updaterun apt-get-y 설치 HaproxyADD Haproxy.cfg/etc/haproxy/haproxy.cfgcmd ["Haproxy", "-db", "F", "/etc/haproxy/haproxy.cfg"]expose 80EXPOSE 443
무슨 여기 haproxy.cfg은 흥미롭습니다.
백엔드 테스트 ACL Authok Http_auth (adminusers) http 요청 인증 영역 Hokstad 경우! authok 서버 S1 192.168.0.44:8084
내가 특별 한 되 고 싶, 친구나의 시 냅 스, 같은 것을 배포 하는 것 이라고 하지만 내 욕구를 넘어 했다.
직장에서 컨테이너의 크기를 확장 마찬가지로 완전 한, 독 노동자 지향 사설 클라우드 시스템으로 전환이 간단 하 고 쉽게 배포 응용 프로그램을 만들기 위해 설계 되었습니다.
원래 링크: 8 독 노동자 개발 패턴 (컴파일/웨이 웨이 revisers/저 우 Xiaolu)
더 많은 질문이 독 노동자 기술 커뮤니티에 액세스 하려면 독 노동자 또는 기술 문서에 대 한 자세한 내용은 필요 하면, Dcoker 기술 포럼에서 그것을 넣어 주시기 바랍니다 그리고 우리가 대답을 전문가 초대 합니다. 티켓 구입 및 기타 문제를 상담 될 수 있다 qq가 그룹: 303806405.
컨테이너 기술 매일 공공 계정 개설, 환영 주의 되었습니다!