2일차
도커 호스트 구성 유스케이스
2일차
독립 된 로컬 개발환경
로컬 설정에 영향을 받지 않는 독립된 개발환경을 구성
Vagrant Docker Machine 을 이용하면 일관된 인터페이스 로 구성이 가능
로컬임에도 불구하고 멀티 서버 환경을 구성할 수 있음 -> 가장 이점이므로 이것을 사용하는 것임
실환경 구성
다른서버에서 도커 서버 설치를하고 다른 서버에서 클라이은트 사용하여 리모트 원격 접속을 가능하게해야한다.
VM에 컨테이너를 몇개를 넣는 것이 맞느냐
싱글 서버 도커 host
물리 서버 1대로 도커 환경
싱글 서버 도커 Host + VM
도커 호스트 클러스터
도커 이미지 백업
도커 이미지를 파일로 저장하고 불러옴
인터넷 연결이 안되서 이미지 다운이 안되는 경우
이미지 크기에 따라 저장/로딩에 시간이 오래 걸림
레지스트리 없이 시용이 가능
이미지를 파일로 복사
$ docker save busybox > busybox.tar
$ docker load < busybox.tar # ? 확인하기
컨테이너 내부에 어떤 내부의 데이터도 존재 해서는 안된다 컨테이너를 무상태로 띄워야한다
v옵션으로 바인딩 처리 -> 마운트
# v옵션 마운트
$ docker run -e MY_ROOT_PASSWORD='1234' \
--name mysql -d -v /mysqldata:/var/lib/mysql mysql:5.7
$ docker run -e MY_ROOT_PASSWORD='1234' \
--name mysql -d -v /mysqldata:/var/lib/mysql \
-v /mysqldata/my.cnf:/home/lib/mysql/my.conf mysql:5.7
데이터 컨테이너
다른컨테이너에 볼륨을 공유하기 위한 컨테이너
# -v옵션 : 마운트 시켜서 데이터 공유
$ docker run --name mydata -v /data/app1 busybox true
# 참조하도록 하여 공유
$ docker run -it --volumes-from mydata ubuntu
# --rm 옵션 : 컨테이너 실행하여 접속하고 exit -> 종료 -> 컨테이너 삭제
$ docker run -it --rm ubuntu
Docker Compose
여러개 컨테이너를 동시에 실행하게 해줌
여러개 컨테이너 구성된 어플리케이션을 만들고 관리 할 수 있게 해주는 도구
CLI 기반 인터페이스
docker-compose.yml
단일 서버 기준 -> 단점
다양한 옵션을 정의할 수 있음 -> 매번 옵션을 줄 필요 없음
# 데톱, 툴박스 -> 설치되 엉있음
# 수동설치
$ curl -L "~~~~"
$ chmod +x /usr/local/bin//docker-compose
어플리케이션을 만드는 서비스를 정의하는 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의 원리
싱글 호스트에서 가능.
link를 걸면 도커 엔진이 컨테이너 host파일에 필요한정보를 주입시킨다
예제 실행
version: '3'
services:
mydb:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=Passw0rd
ports:
- 3306:3306
volumes:
- $(pwd)/my.cnf:/etc/mysql/conf.d/my.cnf
- $(pwd)/db_master:/var/lib/mysql
# 실행
$ docker-compose -f mysql.yml up -d
# docker-compose.yml 디폴트 파일로 인식 하여 실행
$ docker-compose up -d
# mywas 컨테이너를 3개 실행
# 세션클러스터링 등 처리가 추가로 필요함, 라운드로빈, 스테키 세션 등...?
$ docker-compose up -d --scale mywas=3
#컨테이너 확인
$ docker-compose ps
# -f 옵션 : tail 처럼 계쏙 쭉 볼 수 있음
$ docker-compose logs -f
도커허브
도커 이미지를 push & pull
공식저장소 -> officail 마크
모든 이미지를 믿을 수 없다.
공개저장소는 무료, 비공개 저장소는 유료
레파지토리 당 1개의 이미지
# 허브 로그인
$ docker login
# docker tag 이미지아이디 저장소/이미지:태그명
# 태깅하여 꼭 등록하여야한다
$ docker tag ~~
$ docker images # 확인 레파지토리만 다르고 다 같은거
# push
$ docker push 레파지토리:태그
# 삭제
$ docker rmi 이미지아이디
레지스트리
도커이미지를 저장하고 공유할수 있는 서버
오픈소스 , 아파치 라이센스
v1,v2 호환 되지 않음
v2 추천, 브이원 버그 많음
# 생성 및 실행
$ docker run -d -p 5000:5000 --name myregistry registry:2
# push
$ docker push localhost:5000/docker-whale:latest
# pull 하기전 삭제
$ docker rmi localhost:5000/docker-whale:latest
# pull
$ docker pull localhost:5000/docker-whale:latest
# 레지스트리 저장소
# 바인딩 -> 로컬 or 클라우드에 백업
$ docker run -d -p 5000:5000 -v $(pwd)/registry-data:/var/lib/registry --name myregistry registry:2
클라우드 이미미 저장소
s3 : aws s3bucket
azure : ms blob starage
swift : Openstack Swift
oss : oss
보안
TLS 적용, 도메인 지원
Let's Encrypt 추천
접근 권한 관리
인증 : nginx 를 활용한 basic auth
api 게이트 등... jwt
이미지 무결성 : ssh 사이닝
팁
네이밍 기준 : 루트 , Repo 명
이미지 데이터 관리 : gc 필요
성능이슈
대용량 레지스트리 (이미지 풀 시간 등, 공간 중요)
분산 레지스트리
토렌토 활용 ??
# 1. registry.yml 작성 -> git 으로 관리
# 2. docker-compose.yml 작성
nexus, docker hub, amazon, 등 / 상용 무료 사용
개발환경 구성
개발에 필요한 도커 도구로 구성해보기
Docker CI Tool Stack

docker-ci 머신생성
docker-ci 머신 연결
github 레파지터리 연결
tool-stack 실행
각 서버에 접속한다
$ docker-machine create -d virtualbox docker-ci
$ eval $(docker-machine env docker-ci)
개발을 위한 도구들 ![사진찍기]
GitLab
데이터 저장 위치
/var/opt/gitlab
/var/log/gitlab :로그
/etc/gitlab : 설정정보
80, 443, 22 : 사용 포트
gitlab-ce 실행
gitlab.yml 작성 -> 도커 컴포즈로 실행
Yona
프로젝트 단위로 형상관리 , 이슈 관리, 코드리뷰, 게시판을 지원하는 협업 개발 플랫폼,
요비의 후속
요나 설치
docker run ~
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 ```
nxues
도커 이미지 프록시, maven 레파지토리 대용으로 많이 사용함
$ docker rund -d --name nexus-data ~~~~ 뒤에 더
nGrinder
서버에 대한 성능 테스틀 ㄷ위한 오픈소스
성능 테스틀 위한 웹 UI
Agent와 Controller
redmine
위키
이슈 관리등 ...
미디어위키
위키미디아
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
도커 이미지빌드용 젠킨스 컨테이너 실행
docker run -d --name myjenkins \ -p 8080:8080 \ -u root \ -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
jenkins 암호 입력
docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword
jenkins 콘솔접속
젠킨스 스크립트 작성
General
Github Project : 등록
매개변수 필요시, -> 타입, 키-값 설정 (ex TAG -> latest)
소스코드관리
Git
Git 인증정보 추가 (UsernameAndPassowrd -> 깃유저명, 깃패스워드, 젠킨스 ID), ssh 키 인증이 안전함
빌드
# 1. 이미지 빌드
$ docker build -t docker-whale .
# 2. 레지스트리 태깅 / ${변수명} -> 젠킨스에서 사용할 수 있고, 위에 매개변수 설정한 것을 이용할 수 잇음
$ docker tag docker-whale devso/docker-whale:${TAG}
# 3. 레지스트리 -> 도커허브 로그인
$ docker login -u 도커허브아이디 -p 도커허브패스워드
# 4. 레지스트리에 이미지 푸쉬
$ docker push devso/docker-whale
마스터-슬레이브 구성
다양한 환경의 빌드 진행이 가능
오래 거릴는 빌드를 슬레이브에 위임 가능
Jenkins를 여러개 사용하는 것에 빌해 관리가 용이
Jenkins Docker plugin 설치
Jenkins에 cloud 영역을 설정
Docker Template를 추가한다
Slave가 빌드하는 Job을 정의한다
멀티 스테이지 빌드
이미지 빌드의 어려움
컴파일 테스트 패키징 ,etc
도커 이미지 빌드 전에 어플리케이션을 빌드해야함
FROM ~~ AS build-env
FROM ~~
COPY --from=build-env target/app.jar app.jar
RUN java -jar app.jar
싱글빌드, 멀티빌드 예
$ docker build -t href-counter . -f Dockerfile
Last updated
Was this helpful?