Introduction
쿠버네티스를 공부했지만 정작 Docker에 대해서는 제대로 공부한 적이 없는 것이 마음에 들지 않아, 이번 기회에 Docker를 완벽히 이해하고 내 것으로 만든다.
공식 문서를 읽으면서 이해되지 않거나 앞으로 계속 사용해야 할 핵심 코드 위주로 정리해 놓는다.
Docker Image 생성
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# Spark Docker
# builder step used to download and configure spark environment
FROM openjdk:11.0.11-jre-slim-buster as builder
# Add Dependencies for PySpark
RUN apt-get update && apt-get install -y curl vim wget software-properties-common ssh net-tools ca-certificates python3 python3-pip python3-numpy python3-matplotlib python3-scipy python3-pandas python3-simpy
RUN update-alternatives --install "/usr/bin/python" "python" "$(which python3)" 1
ENV SPARK_VERSION=3.4.0 \
HADOOP_VERSION=3 \
SPARK_HOME=/opt/spark \
PYTHONHASHSEED=1
# Download and uncompress spark from the apache archive
RUN wget --no-verbose -O apache-spark.tgz "https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" \
&& mkdir -p /opt/spark \
&& tar -xf apache-spark.tgz -C /opt/spark --strip-components=1 \
&& rm apache-spark.tgz
# Apache spark environment
FROM builder as apache-spark
WORKDIR /opt/spark
ENV SPARK_MASTER_PORT=7077 \
SPARK_MASTER_WEBUI_PORT=8080 \
SPARK_LOG_DIR=/opt/spark/logs \
SPARK_MASTER_LOG=/opt/spark/logs/spark-master.out \
SPARK_WORKER_LOG=/opt/spark/logs/spark-worker.out \
SPARK_WORKER_WEBUI_PORT=8080 \
SPARK_WORKER_PORT=8081 \
SPARK_MASTER="spark://spark-master:7077" \
SPARK_WORKLOAD="master"
EXPOSE 8080 7077 6066
RUN mkdir -p $SPARK_LOG_DIR && \
touch $SPARK_MASTER_LOG && \
touch $SPARK_WORKER_LOG && \
ln -sf /dev/stdout $SPARK_MASTER_LOG && \
ln -sf /dev/stdout $SPARK_WORKER_LOG
COPY start-spark.sh /
CMD ["/bin/bash", "/start-spark.sh"]
|
1
|
docker build -t <IMAGE NAME> <DOCKERFILE PATH>
|
Docker container 생성
1
2
3
4
5
6
7
8
9
10
11
|
spark-master:
image: <IMAGE NAME>
ports:
- "32766:8080"
- "32765:7077"
volumes:
- ./apps:/opt/spark-apps
- ./data:/opt/spark-data
environment:
- SPARK_LOCAL_IP=spark-master
- SPARK_WORKLOAD=master
|
1
2
3
|
# docker-compose.yml 디렉토리 위치에서
docker compose up
|
Info
만약, 내가 기존에 만든 Image를 기반으로 Container를 만든다면
앞서 docker build -t <IMAGE NAME>
으로 지정한 Image Name:Tag를 docker compose의 image에 넣으면 된다.
그게 아니라, 공식 Docker hub에 있는 이미지를 사용한다면,
Docker Hub의 이미지를 들어가서 docker pull
뒤에 있는 것을 복사해서 docker compose의 image에 넣으면 된다.