2일차

도커 호스트 구성 유스케이스

2일차

독립 된 로컬 개발환경

  • 로컬 설정에 영향을 받지 않는 독립된 개발환경을 구성

  • Vagrant Docker Machine 을 이용하면 일관된 인터페이스 로 구성이 가능

  • 로컬임에도 불구하고 멀티 서버 환경을 구성할 수 있음 -> 가장 이점이므로 이것을 사용하는 것임

실환경 구성

  • 다른서버에서 도커 서버 설치를하고 다른 서버에서 클라이은트 사용하여 리모트 원격 접속을 가능하게해야한다.

  • VM에 컨테이너를 몇개를 넣는 것이 맞느냐

  • 싱글 서버 도커 host

    • 물리 서버 1대로 도커 환경

    • 싱글 서버 도커 Host + VM

  • 도커 호스트 클러스터

도커 이미지 백업

  • 도커 이미지를 파일로 저장하고 불러옴

  • 인터넷 연결이 안되서 이미지 다운이 안되는 경우

  • 이미지 크기에 따라 저장/로딩에 시간이 오래 걸림

  • 레지스트리 없이 시용이 가능

이미지를 파일로 복사

컨테이너 내부에 어떤 내부의 데이터도 존재 해서는 안된다 컨테이너를 무상태로 띄워야한다

  • v옵션으로 바인딩 처리 -> 마운트

데이터 컨테이너

  • 다른컨테이너에 볼륨을 공유하기 위한 컨테이너

Docker Compose

  • 여러개 컨테이너를 동시에 실행하게 해줌

  • 여러개 컨테이너 구성된 어플리케이션을 만들고 관리 할 수 있게 해주는 도구

  • CLI 기반 인터페이스

  • docker-compose.yml

  • 단일 서버 기준 -> 단점

  • 다양한 옵션을 정의할 수 있음 -> 매번 옵션을 줄 필요 없음

  • 어플리케이션을 만드는 서비스를 정의하는 yaml 파일

  • 버전별로 작성차이가 있다. 현재 3버전까지 있음

도커 컴포즈 주요 설정 타입

  • image : 빌드할 이미지 지정

  • build : 빌드 할 때 적용할 옵션을 설정

  • links : 다른 서비스에 컨테이너를 연결한다

  • external-links : 현재 docker-compose.yml 외부에서 시작된 컨테이너를 연결함

  • ports: vhxmfmf emfjsosek

  • expose : 호스트바이닏ㅇ 없이 포트를 드러낸다

  • volumes : 호스트와 컨테이너 특정 패스를 마운트함

  • volumes_from : 다른 서비스나 컨테이너로 부터 볼륨을 마운트

  • environment : 환경변수를 정의한다

  • env_file : 환경벼수를 정의하는 파일을 지정

  • extends: 다른 서비스 설정을 상속

  • net : 네트워크 모드

  • dns : 사설dns 서버를 지정한다

  • dns_search : 사설 dns 서버를 도메인으로 지정한다

도커컴포즈 주요 명령어

  • docker-compose up

  • docker-compose up -d

  • docker-compose up -d no-create

  • docker-compose ps

  • docker-compose down

  • docker-compose

  • 싱글 호스트에서 가능.

  • link를 걸면 도커 엔진이 컨테이너 host파일에 필요한정보를 주입시킨다

예제 실행

도커허브

  • 도커 이미지를 push & pull

  • 공식저장소 -> officail 마크

  • 모든 이미지를 믿을 수 없다.

  • 공개저장소는 무료, 비공개 저장소는 유료

  • 레파지토리 당 1개의 이미지

레지스트리

  • 도커이미지를 저장하고 공유할수 있는 서버

  • 오픈소스 , 아파치 라이센스

  • v1,v2 호환 되지 않음

  • v2 추천, 브이원 버그 많음

  • 클라우드 이미미 저장소

    • s3 : aws s3bucket

    • azure : ms blob starage

    • swift : Openstack Swift

    • oss : oss

  • 보안

    • TLS 적용, 도메인 지원

    • Let's Encrypt 추천

    • 접근 권한 관리

      • 인증 : nginx 를 활용한 basic auth

      • api 게이트 등... jwt

      • 이미지 무결성 : ssh 사이닝

    • 네이밍 기준 : 루트 , Repo 명

    • 이미지 데이터 관리 : gc 필요

    • 성능이슈

      • 대용량 레지스트리 (이미지 풀 시간 등, 공간 중요)

      • 분산 레지스트리

      • 토렌토 활용 ??

  • nexus, docker hub, amazon, 등 / 상용 무료 사용

개발환경 구성

개발에 필요한 도커 도구로 구성해보기

Docker CI Tool Stack

  1. docker-ci 머신생성

  2. docker-ci 머신 연결

  3. github 레파지터리 연결

  4. tool-stack 실행

  5. 각 서버에 접속한다

개발을 위한 도구들 ![사진찍기]

  1. GitLab

    • 데이터 저장 위치

      • /var/opt/gitlab

      • /var/log/gitlab :로그

      • /etc/gitlab : 설정정보

    • 80, 443, 22 : 사용 포트

    • gitlab-ce 실행

    • gitlab.yml 작성 -> 도커 컴포즈로 실행

  2. Yona

    • 프로젝트 단위로 형상관리 , 이슈 관리, 코드리뷰, 게시판을 지원하는 협업 개발 플랫폼,

    • 요비의 후속

    • 요나 설치

      • docker run ~

  3. gogs

    • go로 개발된 git 서비스, 가볍고 빠름

    • 웹콘솔 지원

      ```bash

      데이터

      $ docker run --name=gogs-data --entrypoint /bin/true gogs/gogs

    실행

    $ docker run -d --name=gogs --volumes-from gogs-data -p 10022:22 -p 3000:3000 gogs/gogs ```

  4. nxues

    • 도커 이미지 프록시, maven 레파지토리 대용으로 많이 사용함

  5. nGrinder

    • 서버에 대한 성능 테스틀 ㄷ위한 오픈소스

    • 성능 테스틀 위한 웹 UI

    • Agent와 Controller

  6. redmine

    • 위키

    • 이슈 관리등 ...

  7. 미디어위키

    • 위키미디아

    • LocalSettings.php -> 위키에 어떻게 적용?

도커 CI 환경구성

  • github & DockerHub -> 가장 빠름... 그러나 픈해야한다는거

  • github에 도커 이미지 빌드를 위한 소스 파일추가

  • DockerHub에서 'Create Automated Build'

  • github 레파지토리연결

  • 빌드 트리거 실행

Jenkins & Docker

  • 도커 이미지를 빌드.테스트.배포 Jenkins 활용

  • Jenkins Master Slave를 도커로 실행

  • 일반 : user -> repo -> ci server -> app server deploy

  • 도커 : user -> repo -> ci server (image build) -> registry push ->(pull) Host deploy

    • war -> 이미지빌드 -> 태깅 -> 레지스트리 푸쉬

DND (Docker in Docker)

  • Docker 컨테이너가 Docker 명령어를 실행할 수 있게...

  • Docker 소켓 파일에 대한 접근권한

  • Docker 클라이언트, 실행 권한

JEnkins blueocean

  1. 도커 이미지빌드용 젠킨스 컨테이너 실행

  2. jenkins 암호 입력

    1. docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword

  3. jenkins 콘솔접속

젠킨스 스크립트 작성

  1. General

    • Github Project : 등록

    • 매개변수 필요시, -> 타입, 키-값 설정 (ex TAG -> latest)

  2. 소스코드관리

    • Git

    • Git 인증정보 추가 (UsernameAndPassowrd -> 깃유저명, 깃패스워드, 젠킨스 ID), ssh 키 인증이 안전함

  3. 빌드

마스터-슬레이브 구성

  • 다양한 환경의 빌드 진행이 가능

  • 오래 거릴는 빌드를 슬레이브에 위임 가능

  • Jenkins를 여러개 사용하는 것에 빌해 관리가 용이

  • Jenkins Docker plugin 설치

  • Jenkins에 cloud 영역을 설정

  • Docker Template를 추가한다

  • Slave가 빌드하는 Job을 정의한다

멀티 스테이지 빌드

  • 이미지 빌드의 어려움

  • 컴파일 테스트 패키징 ,etc

  • 도커 이미지 빌드 전에 어플리케이션을 빌드해야함

싱글빌드, 멀티빌드 예

Last updated

Was this helpful?