Hexo, 로컬에서 도커 컨테이너로 실행하기

Dockerfile 작성

먼저 Dockerfile을 작성한다.

1
2
3
4
5
6
7
8
FROM node:lts

RUN mkdir /my-hexo
WORKDIR /my-hexo
RUN npm install hexo-cli -g && npm install hexo-generator-sitemap --save

ENTRYPOINT [ "/bin/bash", "-c", "hexo clean & hexo server" ]
EXPOSE 4000

별다른 구성은 없다. 호스트에 있는 Hexo 디렉터리와 연결할 디렉터리를 생성하고, Hexo 실행에 필요한 hexo-clisitemap.xml 생성에 필요한 hexo-generator-sitemap을 npm으로 설치. 그리고 컨테이너 실행 시 hexo clean 명령과 hexo server 명령을 자동으로 실행하도록 하고, 컨테이너의 포트는 4000번 포트를 노출시킨다, 정도?

도커 이미지 빌드, 컨테이너 run 스크립트 작성

그리고 이제 도커 이미지를 빌드하고 컨테이너를 띄우면 되는데, 이마저도 귀찮으니 스크립트 파일로 만들자.

1
2
3
#!/bin/sh

docker build -t my-hexo .

위는 도커 이미지 빌드 파일을 실행하는 스크립트 내용이다. 별다른 내용은 없다.

1
2
3
4
5
#!/bin/sh

docker stop my-hexo-container
docker rm my-hexo-container
docker run -it -d --name my-hexo-container -v ~/jheloper.github.io:/my-hexo -p 9000:4000 my-hexo:latest

그리고 이것은 위에서 만든 이미지로 컨테이너를 실행시키는 스크립트 내용이다. 기존에 만약 Hexo 컨테이너가 있을 경우 멈추고 삭제하는 부분을 추가했기 때문에 Hexo 컨테이너가 멈춰있거나 존재하지 않으면 에러 메시지가 출력되나 신경 쓰지 않아도 된다.

유의할 것은 이 스크립트 파일들에 실행 권한을 주는 것. chmod 명령을 실행하여 실행 권한을 주면 된다.

실제로 사용할 때는?

실제로 사용할 때는 다음과 같이 사용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# 먼저 Dockerfile, build.sh, run.sh는 같은 디렉터리에 위치해야 하며 
# 해당 디렉터리가 현재 워킹 디렉터리인 상태에서 실행해야 한다

~ ./build.sh
...도커 이미지 생성 관련 내용 출력...
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-hexo latest 368241969ff0 1 minutes ago 918MB
~ ./run.sh
465f2422703a5aec2d4daaa7703a2480fb381e5740eaadcebbffeeb58d8a9ef4
~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
465f2422703a my-hexo:latest "/bin/bash -c 'hexo …" 11 seconds ago Up 9 seconds 0.0.0.0:9000->4000/tcp my-hexo-container

도커 컨테이너 실행을 확인했으면 브라우저를 열어 http://localhost:9000으로 접속하여 Hexo가 정상적으로 띄워졌는지 확인한다. 이것으로 끝.