Docker
sudo를 매번 입력하지 않기 위해 Docker 그룹에 유저 넣기
이미지 찾기
- 웹: https://hub.docker.com
- 이름: 공식이미지, 올린사람id/이지미이름
- Tags: 이미지 변경에 따른 버전 관리
- 최신 Tags가 Latest로 명시됨
이미지 다운로드(pull)
이미지 확인
이미지 실행(컨테이너 만들기)
컨테이너 확인
컨테이너 다루기
컨테이너 실행 & 정지
컨테이너 안에서 작업하기
컨테이너 삭제
- tips: 복수 명령도 가능 (한칸 띄고 다른 컨테이너이름)
이미지 삭제
- Notice: 태그이름 입력안하면 모든 태그 삭제됨
로그
자원 제한 방법
CPU 제한
Memory 제한
swap memory 제한
도커 관리를 위한 꿀 팁
실행중인 모든 컨테이너 죽이기
정지된 것을 포함해서, 모든 컨테이너를 삭제한다
오래된 컨테이너 삭제
정지된 컨테이너를 삭제
불필요한 이미지를 제거한다
불필요한 볼륨을 제거한다
docker 이미지나 컨테이너를 파일로 저장하는 법
load or save image
load or save Container
Read-only Container
컨테이너 모니터링 하기
하나의 컨테이너의 자원 사용량 모니터링(CPU, memory, network I/O)
모든 컨테이너의 자원 사용량 모니터링(Container ID로 정렬)
모든 컨테이너의 자원 사용량 모니터링(Container 이름으로 정렬)
“ubuntu” 이미지로 만들어진 컨테이너 찾기
이미지를 빌드하는 방법
1) docker commit 명령어
컨테이너 안에서 작업후 커밋하는 방법
- 과정 재현이 어렵고 실수하기 쉬움
- 간단한 컨테이너 만들때 사용
2) Dockerfile - docker build 명령
사용할 명령어를 dockerfile에 저장하고 docker build하는 방법
- 이미지 빌드 과정을 모두 정리하고 진행
- 관리가 쉽고 실수가 적다
dockerfile 이란 ?
- 이미지를 빌드하는 방법과 과정을 적어놓은 파일
- 도커 이미지의 설계도와 같다고 말할 수 있음
- 반복적 사용가능
- git, svn등으로 버젼관리하면 변경 이력 추적 가능
.dockerignore 파일 사용법
이미지에 포함하고 싶지 않은 파일, 디렉토리를 지정
- Context의 root directory에 위치
- 이미지를 크게 만드는 불필요한 파일
- 보안 때문에 넣으면 안되는 파일
- 각 패턴마다 줄 바꿈
- ’#’ 으로 주석처리
규칙및 동작
dockerfile 설명2
- 첫 줄부터 차례로 실행
- 한 라인이 실행 될 때 마다 이미지에 레이어 추가
- 실행중 에러가 나면 에러가 났던 곳 부터 실행
- 첫출은 항상 FROM으로 시작
- ’#’ 으로 주석처리
파일로 빌드하기
빌드 이력
컨테이너 만들기
port 오픈
IPAddress 확인
ssh 접속 (주의: 포트번호 22->32768)
docker 빌드중 에러발생해도 다시 빌드하면 에러지점부터 빌드 시작
docker 빌드중 캐쉬를 무시하려면
일부의 캐쉬만 무시하려면
도커파일에 일부분만 수정하는 방법
22번 포트를 그대로 쓸 수 없을까 ?
Dockerfile 명령어
ENV
환경 변수 사용
조건부 환경 변수 문법
CMD
- 컨테이너 생성할 때 실행
- Docker 에 하나의 CMD만 가능
- 여러 CMD가 있다면 마지막 것 만 실행
- “docker build” 시점에 Dockerfile 의 CMD 설정능 오버라이드 가능
- ENDPOINT 명령어의 파라미터로 사용 될 수도 있음
CMD vs RUN
- RUN 은 각 명령어를 실행할 때 마다 실행 되어 commit되고 레이어로 저장됨
- CMD는 build 시점에는 실행되지 않음에 주의
- CMD는 컨테이너를 run 할 때 실행
ENTRYPOINT
- 컨테이너 생성할 때 실행
- Dockerfile에서 하나의 ENTRYPOINT만 가능
- 여러 ENTRYPOINT 있다면 마지막 것 만 실행
- “docker build” 시점에서 Dockerfile 의 ENTRYPOINT 설정을 오버라이드 가능
- CMD 명령어의 파라미터로 사용 될 수 도 있음
[사진활용] 표1_CMD_ENTRYPOINT
- point 조합하실때는 [””, “”] <- 방법으로사용 할 것
WORKDIR
RUN, CMD, ENTRYPOINT, ADD 등 을 실행 할 directory를 지정
- Dockerfile에서 여러번 사용 가능
- 상대 경로도 사용가능
- 해당 경로가 없으면 생성됨
- “docker run”에서 -w 옵션으로 오버라이드 가능
USER
RUN, CMD, ENTRYPOINT등 을 실행 할 유저를 지정
- 지정하지 않으면 root로 실행
- 파라미터로 유저 ID나 UID를 지정
Volume
호스트와 공유할 directory설정
ADD
컨테이너에 파일 추가
- tar.gz ADD시 자동으로 압축 풀어서 넣어줌
- 가져올 파일이 변경되면 ADD 명령으로 빌드 캐쉬가 무효화 될 수 있음에 주의
- URL 이 인증을 필요로 한다면 사용 불가
COPY
컨테이너에 파일 복사
- ADD와 유사하지만 복사 기능만 제공
- 압축 해제 같은 복사 외의 기능은 제외
docker-compose
여러 개의 컨테이너를 한번에 올리고 내릴 수 있는 툴
- 로컬 개발 환경, 테스트 서버, CI 등의 환경에서 사용하면 편리
- 각 애플리케이션에 dockerfile을 정의하고, 서비스 들을 docker-compose.yml에 설정
docker-compose 명령어
docker-compose 실습 - 워드프레스(wordpress)
1) docker-compose.yml
2) 실행
docker hub
docker hub에 image 올리기
docker hub에 image 받기
Spring 실습 (에러 발생.. 디버그 필요)
Java + Spring + Docker
Image & Source code :
1) spring-petclinic
2) maven
Dockerfile
Jenkins 실습
CI 툴, 주기 빌드 서버
Node.js 실습
파일 다 만들고 Build & Run
멀티 컨테이너 실전 연습
node.js + redis
프로젝트 구성
1) myreids/Dockerfile
2) mynode/Dockerfile
3) mynode/mynode/app.js
4) myndoe/mynode/package.json
Tips: 버전 명시하는게 좋음, 배포시 버전이 변경되어 에러가 발생하는 경우가 있음
실행
Tips: Redis 먼저 실행 할 것
why ? nodejs 서버가 먼저 실행되면 Redis 링크 부분에서 에러 발생 할 수 있음.
1) myredis 실행
2) mynode 실행