반응형
1. Docker 이미지란?
애플리케이션 실행에 필요한 파일, 설정값을 포함한 패키지로, 이미지를 생성하는 방법은 아래와 같다
1. 도커 허브에 저장된 이미지를 다운받아 사용
2. dockerfile에 이미지 생성에 대한 내용 정의 후 빌드3. 사용중인 컨테이너 커밋
1. 도커 허브에 저장된 이미지 다운 받는 법
말 그대로 도커 허브에 올라간 이미지를 pull 받아 사용하는 방법이다.
도커 허브 url : https://hub.docker.com/
- 나는 apache/karaf 로 진행
- pull 완료 화면
2. dockerfile로 이미지 빌드하는 법
로컬에 dockerfile을 만들고 이미지 빌드(dockerfile은 확장자 없음)
// 아파치 카라프 도커파일 내용
# 베이스 이미지로 Ubuntu 22.04 사용
FROM ubuntu:22.04
# 빌드 시 사용할 변수 정의
ARG RELEASE
ARG LAUNCHPAD_BUILD_ARCH
# 이미지 메타데이터 설정
LABEL org.opencontainers.image.ref.name=ubuntu
LABEL org.opencontainers.image.version=22.04
# Java 설치 관련 환경 변수 설정
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# 필수 패키지 설치 및 로케일 설정
RUN set -eux; \
apt-get update; \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
curl \
wget \
fontconfig \
ca-certificates \
p11-kit \
tzdata \
locales; \
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \
locale-gen en_US.UTF-8; \
rm -rf /var/lib/apt/lists/*
# OpenJDK 11 설치
ENV JAVA_VERSION=jdk-11.0.22+7
RUN set -eux; \
ARCH="$(dpkg --print-architecture)"; \
case "${ARCH}" in \
aarch64|arm64) \
ESUM='46e2bff7d5f419ac7c2fad29e78bfacf49ead4a2de1aba73b6329128f6d1f707'; \
BINARY_URL='https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_aarch64_linux_hotspot_11.0.22_7.tar.gz'; \
;; \
amd64|i386:x86-64) \
ESUM='3a0fec1b9ef38d6abd86cf11f6001772b086096b6ec2588d2a02f1fa86b2b1de'; \
BINARY_URL='https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_x64_linux_hotspot_11.0.22_7.tar.gz'; \
;; \
armhf|arm) \
ESUM='a5ab40aa53ecd413a8af738e66855d423e64b5389f876a4825e2cbdb45e9cfb3'; \
BINARY_URL='https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_arm_linux_hotspot_11.0.22_7.tar.gz'; \
;; \
ppc64el|powerpc:common64) \
ESUM='a6719f71217d0b6f931461acec465ca3a1eb0b0e94942fe165e27b30ecc341c2'; \
BINARY_URL='https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_ppc64le_linux_hotspot_11.0.22_7.tar.gz'; \
;; \
s390x|s390:64-bit) \
ESUM='1662e73deb814814fe27239666c5bf2d989484821343f0a3629ffb03729044ce'; \
BINARY_URL='https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jre_s390x_linux_hotspot_11.0.22_7.tar.gz'; \
;; \
*) echo "Unsupported architecture: ${ARCH}"; exit 1 ;; \
esac; \
wget --progress=dot:giga -O /tmp/openjdk.tar.gz ${BINARY_URL}; \
echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
mkdir -p "$JAVA_HOME"; \
tar --extract --file /tmp/openjdk.tar.gz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner; \
rm -f /tmp/openjdk.tar.gz; \
find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \
ldconfig; \
java -Xshare:dump
# 설치 확인
RUN set -eux; \
echo "Verifying installation..."; \
java --version; \
echo "Installation complete."
# Apache Karaf 설치 관련 환경 변수 설정
ENV KARAF_INSTALL_PATH=/opt
ENV KARAF_HOME=/opt/apache-karaf
ENV KARAF_EXEC=exec
ENV PATH=/opt/apache-karaf/bin:$PATH
# Karaf 배포 파일을 빌드 시 변수로 정의
ARG karaf_dist=NOT_SET
# Karaf 배포 파일 추가
ADD ./apache-karaf-4.4.6.tar.gz /opt
# Karaf 설치 경로 심볼릭 링크 설정
RUN set -x && ln -s $KARAF_INSTALL_PATH/apache-karaf* $KARAF_HOME
# 사용될 포트 노출
EXPOSE 1099 44444 8101 8181 9999
# Karaf 실행
CMD ["karaf", "run"]
참고로
"ADD ./apache-karaf-4.4.6.tar.gz /opt"
내용 처럼 해당 위치에 해당 파일이 있어야함
- 파일 생성 완료되면 도커파일 빌드
: 도커파일 위치에서 커맨드 실행
3. 컨테이너 커밋
이미지를 이용해 컨테이너를 찍어 사용하다보면 여러 설정이 추가되기도 하는데, 그 상태 그대로 다시 이미지로 만들어 사용하는 방법
나는 karaf에 번들 추가 후 이미지로 커밋함
- 위에서 만들어 논 카라프 이미지 실행
옵션들
-p : 포트 설정 옵션
-i : 컨테이너 시작하면서 카라프 콘솔 들어가기
--name : 컨테이너 명칭
- 일단 웹 콘솔 확인할 수 있게 http, webconsole 번들 부터 인스톨
- 그럼 웹 콘솔로 카라프 접속 가능카라프 접속 가능

- 그런데 초기 계정 karaf/karaf 설정이 주석 걸려있음..
- exec으로 컨테이너 쉘 접속해서 설정 추가해야함

- 유저 설정 파일은
/opt/apache-karaf-4.4.4/etc/users.properties

- nano명령어로 파일 열어서 주석 해제
(nano는 apt update -> apt install nano 후 사용 가능) - 맨 밑에 두줄 주석 해제!
- 완료!

- 이제 설정끝난 컨테이너를 이미지로 커밋


- 그럼 해당 설정 완료된 카라프를 컨테이너로 생성해서 쓸수 있다! 포트만 충돌없이 설정하면 몇개든 만들 수 있다.
반응형
'클라우드' 카테고리의 다른 글
[Docker] Docker 1. 개념과 용어 (0) | 2025.03.04 |
---|