일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ansible install
- java
- 스트림셋
- nvidia docker
- python
- elk stack
- docker
- 자바
- 푸시푸시
- 스트림셋이란?
- 코딩
- 알고리즘
- c
- 도커 elk
- mysql on docker
- C언어
- 앤서블 설치
- 백준
- streamsets 강의
- 정보처리기사
- 데이터베이스
- 도커
- 도커 mysql
- 도커 시작하기
- 클라우드
- MySQL
- 파이썬
- c++
- 데이트
- mysql docker
- Today
- Total
리그캣의 개발놀이터
[Docker] Docker image merge 또는 combine 본문
도커 이미지 또는 컨테이너 두개 이상을 합치는게 가능할까??
Prometheus + grafana 컨테이너 합치기..
일단 merge 기능에 대해서 찾아보았다.
https://abdelrahmanhosny.wordpress.com/2015/07/11/how-to-merge-two-docker-images/
- 둘다의 history를 가져와 하나의 Dockerfile을 가져오는 기능이 있는데
Prometheus와 Grafana Dockerfile 모두 로컬의 데이터를 가져오는 기능뿐만 아니라 From에서 조차 이전의 이미지를 참고참고하여 버전업 하던 방식이라 Dockerfile history 기능을 사용하여도 merge할 수 없다.
- Grafana + prometheus 이미지를 딴 사람 찾아보기. Docker hub에 몇 개가 있는듯 해보였지만 개인적으로 사용하고 있으며, dockerfile도 제대로 보이지 않음. 또한 github소스 또한 비공개, 추가적으로, 해당 이미지가 정말 두개를 합친건지도 미지수
그러던 중 다단계 빌드에 대해서 찾았음. (도커엔진 1.7 이상)
다단계 빌드를 추천하지 않는 사람들도 있지만 한번 시도해보기로 ..
https://docs.docker.com/develop/develop-images/multistage-build/
먼저 dockerfile을 아래와 같이 구성한 후 build 해보았다.
[root@kong test]# Dockerfile
FROM golang:1.7.3
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]
```bash
docker build -t alexellis2/href-counter:latest .
```
오 된다….
신기해서 prometheus + grafana 조합을 작성해서 build 해보았다.
FROM prom/prometheus:latest
ADD prometheus.yml /etc/prometheus/
FROM grafana/grafana:latest
USER root
ARG GF_INSTALL_IMAGE_RENDERER_PLUGIN="false"
RUN if [ $GF_INSTALL_IMAGE_RENDERER_PLUGIN = "true" ]; then \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories && \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
apk --no-cache upgrade && \
apk add --no-cache udev ttf-opensans chromium && \
rm -rf /tmp/* && \
rm -rf /usr/share/grafana/tools/phantomjs; \
fi
USER grafana
ENV GF_RENDERER_PLUGIN_CHROME_BIN="/usr/bin/chromium-browser"
RUN if [ $GF_INSTALL_IMAGE_RENDERER_PLUGIN = "true" ]; then \
grafana-cli \
--pluginsDir "$GF_PATHS_PLUGINS" \
--pluginUrl https://github.com/grafana/grafana-image-renderer/releases/latest/download/plugin-linux-x64-glibc-no-chromium.zip \
plugins install grafana-image-renderer; \
fi
ARG GF_INSTALL_PLUGINS=""
RUN if [ ! -z "${GF_INSTALL_PLUGINS}" ]; then \
OLDIFS=$IFS; \
IFS=','; \
for plugin in ${GF_INSTALL_PLUGINS}; do \
IFS=$OLDIFS; \
grafana-cli --pluginsDir "$GF_PATHS_PLUGINS" plugins install ${plugin}; \
done; \
fi
오오 된다!!!
아.. 그런데 보니깐 첫번째 From은 무시가되는것 같다. 나같은경우에는
두가지 port를(grafana, prometheus) 열고 해당 port로 접속을 시도해보니 뒤에 from인 grafana만 접속이 된다..;;
역시 merge는 할 수없는것인가. .ㅠㅠ
docker 다단계를 좀 더 자세히 보니 --from=0 이라는 구문이 추가되어있다. 해당 내용을 보니 merge랑은 다른 기능으로 특정 dockerfile from에 이름을 지정해서 해당 from부터만 dockerfile로 인식을 시키던가 이전 단계 빌드된 아티팩트를 사용하는 기능으로 merge와는 거리가 멀어보엿다..