반응형
도커 퀵 스타트
- docker 환경설정
- mac - docker 데스크톱
docker run hello-world
- library : 도커 허브의 공식 이미지가 저장되어 있는 네임스페이스
- local에서 hello-world:latest 를 찾을 수 없기 때문에 library/hello-world에서 pull 해오게 된다
docker image ls
- repository, tag 확인 가능
docker ps --all
- 여전히 running 중이면 --all 없이도 뜬다
- Dockerfile
- Dockerfile 은 컨테이너를 위해 개인 파일 시스템을 조립하는 방법을 설명
- 응용 프로그램을 컨테이너화 하기 위함
docker build --tag bulletinboard:1.0 /
- successfully tagged bulletinboard:1.0 이 뜸
- image를 빌드하고 테스트 한것
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 위 에러 발생하는 경우
- docker을 실행시켜줘야 한다
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
- --publish : host의 8000번 포트를 container의 8080번 포트로 포워딩
- --detach : container을 백그라운드에서 실행
Docker와 함께 개발
- Docker 장점을 살릴 수 있는 앱 개발 방식
- image lean 하게 유지하기
- kubernetes와 함께 사용하기
- swarm service
- Best Practice
- 이미지를 작게 유지하기
- 작은 이미지는 네트워크를 통과하는 속도와 메모리에 로드되는 속도가 더 빠르다
- 다중 페이지 빌드 사용하기
- maven 이미지를 사용하여 java를 작성한 후 다시 설정
- tomcat java 아티팩트를 이미징 및 복사하여 앱을 배포할 수 있는 올바른 위치에 복사
- 최종 이미지는 빌드에서 가져온 모든 라이브러리를 포함하지 않지만, 이러한 라이브러리를 실행하는데 필요한 아티팩트와 환경만 포함
- 다중 페이지 빌드를 사용하지 않는 경우
- 별도의 레이어 수 줄이기
RUN apt-get -y update
,RUN apt-get install -y python
RUN apt-get -y update && apt-get install -y python
- 이렇게 두번째 처럼 작업을 수행하면, 첫번째의 경우에 레이어 두개 생성하는데, 두번째의 경우에는 레이어를 한개만 생성하게 된다
- 별도의 레이어 수 줄이기
- 공통점이 많은 이미지의 경우 공유 구성 요소를 사용하여 공통부분 이미지 생성
- 이미지를 작게 유지하기
Dockerfile 모범사례
- dockerfile
- 모든 명령을 순서대로 포함하는 텍스트 파일로 지정된 이미지를 작성해야 한다
FROM
: 층을 만든다 ubuntu:18.04 docker 이미지 활용COPY
: docker 클라이언트의 현재 디렉토리에 있는 파일을 추가RUN
: 애플리케이션을 구축하기CMD
: 컨테이너 내에서 실행할 명령을 지정
- empemeral containers
- dockerfile로 만든 이미지는 최대한 빨리 죽는 컨테이너를 만들도록 해야 한다
- container은 중지, 제거, 재건, 대체가 빠르게 작게 되어야 한다
- dockerfile로 만든 이미지는 최대한 빨리 죽는 컨테이너를 만들도록 해야 한다
- 빌드컨텍스트
- 현재 작업 디렉토리 : 빌드 컨텍스트
- 기본적으로 dockerfile은 여기에 있는 것으로 간주되고, -f을 이용하여 변경 가능하다
echo -e "FROM busybox\nCOPY~~~"
- echo 명령어의 e option : escape 문자열 사용 가능하도록 함
반응형
'Backend' 카테고리의 다른 글
java 의 로깅 이란 (JCL, SLF4J, log4j, logback) (0) | 2021.12.13 |
---|---|
spring boot 에서 etag 설정하기 (0) | 2021.11.29 |
왜 도커를 사용해야 할까요? (0) | 2020.06.07 |
kotlin으로 java springboot 프로젝트 리팩토링 하기 2 (0) | 2020.04.19 |
kotlin으로 java springboot 프로젝트 리팩토링 하기 (0) | 2020.04.11 |