[컴] 간단한 Jekyll Dockerfile 만들기

제킬 / 간단하게 jekyll 실행하기

간단 Jekyll Dockerfile 만들기

전체 절차

  • 현재 폴더에 Dockerfile 만들기(Docker container 생성 부분 참고)
  • docker build --tag my-jekyll:1.0.0 .
  • docker run -p 4000:4000 --name my-jekyll-con -it my-jekyll:1.0.0
  • 브라우저에서 http://localhost:4000 에 접속

Docker container 생성

Dockerfile

아래와 같은 Dockerfile 을 만들자. 일단 ruby 2.7.1 을 가지고 시작한다.

FROM ruby:2.7.1-alpine3.11
LABEL maintainer "namh <namh@userhabit.io>"


# RUN apk --no-cache add \
#  bash \

ENV BLOG_NAME=my-test-blog
ENV BUNDLE_HOME=/usr/local/bundle

# gcc, g++ and make
RUN apk --no-cache add build-base

# install jekyll and bundler
RUN gem install jekyll bundler

RUN addgroup -Sg 1000 jekyll
RUN adduser -Su 1000 -G jekyll jekyll

RUN chown -R jekyll:jekyll $BUNDLE_HOME

USER jekyll
WORKDIR /home/jekyll/
RUN jekyll new $BLOG_NAME

WORKDIR /home/jekyll/$BLOG_NAME
COPY --chown=jekyll:jekyll _config.yml Gemfile ./

RUN bundle
EXPOSE 4000

ENTRYPOINT ["bundle", "exec", "jekyll", "serve", "--host", "0.0.0.0"]

build image

아래 command 를 실행해서 image 를 생성하자. 이름을 꼭 넣자. 그렇지 않으면 기본 <none> 으로 잡히는데, 이것이 이전에 혹시 <none>으로 만들어진 것 있는 경우 overwrite 해 버릴 수 있다.

docker build --tag my-jekyll:1.0.0 .

docker images 를 하면 만들어진 image 가 보인다.

D:\a\prog\ruby\jekyll\docker>docker images
REPOSITORY                        TAG           IMAGE ID       CREATED         SIZE
my-jekyll                         1.0.0         b63aeafaa5b8   14 months ago   51.5MB

container 생성 및 실행

아래처럼 image 를 실행해 보자. 주의할점은 tag 명이 있는 경우 tag(1.0.0) 까지 같이 넣어줘야 한다. my-jekyll-con 은 container name 이다.

docker run -p 4000:4000 --name my-jekyll-con1 my-jekyll:1.0.0

만약 shell 을 통해 확인하고 싶다면 아래처럼 하면 된다.

docker run --name my-jekyll-con -it my-jekyll:1.0.0 sh

현재 container 가 실행되고 있다면 exec 를 사용하자.

docker exec -it my-jekyll-con sh

Dockerfile 설명

jekyll 설치

아래 링크에서 jekyll 의 설치방법을 확인할 수 있다.

아래 command 가 jekyll 에 필요한 package를 설치해 준다.

# gcc, g++ and make
RUN apk --no-cache add build-base

# install jekyll and bundler
RUN gem install jekyll bundler

jekyll user 생성

user id jekyll로 실행을 하려 한다. 그래서 user, usergroup 을 만들었다.

RUN addgroup -Sg 1000 jekyll
RUN adduser -Su 1000 -G jekyll jekyll

blog 설치

아래처럼 jekyll project 를 하나 생성한다.

RUN chown -R jekyll:jekyll $BUNDLE_HOME

USER jekyll
WORKDIR /home/jekyll/
RUN jekyll new $BLOG_NAME

jekyll 실행, docker run

아래 command 가 docker run 을 통해 jekyll server 를 실행할 수 있게 만들어준다. --host 0.0.0.0 을 넣어주자. 그렇지 않으면 외부에서 접속할 수 없다.

WORKDIR /home/jekyll/$BLOG_NAME
EXPOSE 4000

ENTRYPOINT ["bundle", "exec", "jekyll", "serve", "--host", "0.0.0.0"]

docker 에서 blog file 가져오기

아래처럼 docker cp 를 사용하면 된다.

docker cp <container_id>:/home/jekyll/my-test-blog .

volume 사용하기

아래처럼 host 의 directory 를 mount 할 수 있다. 추후에 작업을 할 때는 저렇게 하는 것이 편할 것이다.

docker run --rm -v d:\a\prog\ruby\jekyll\docker\my-test-blog:/home/jekyll/my-test-blog2 -p 4000:4000 --name c1v1 t1:v1

docker compose

아래 같은 docker compose.yml 을 만들어 놓으면 편하게 사용할 수 있다.

docker compose up 으로 실행할 수 있다.

version: '3.8'

services:
    jekyll:
        build: .
        image: my-jekyll:1.0.0
        volumes:
            - d:\a\prog\ruby\jekyll\docker\my-test-blog\:/home/jekyll/my-test-blog2
        ports:
            - "8000:8000"

Reference

  1. 쿠…sal: [컴] docker commands
  2. permissions - What is a “system” group, as opposed to a normal group? - Ask Ubuntu : system group 관련 설명
  3. https://github.com/envygeeks/jekyll-docker/blob/e2b3cc2f9d4ff239b3db1244400859a81f19a263/repos/jekyll/Dockerfile

댓글 없음:

댓글 쓰기