self-signed certificate를 이용한 node.js https 웹서버 이미지를 Dockerfile을 이용해 만들어 봄.
우선 웹서버 역할을 담당할 index.js 파일을 아래처럼 만들어서 저장.
const fs = require('fs');
const opt = {
key: fs.readFileSync('../certs/server.key'),
cert: fs.readFileSync('../certs/server.crt')
};
require('https').createServer(opt, (req, res) => {
res.end('hello world\n');
}).listen(443);
Dockerfile은 아래처럼 만들어서 저장
# node.js 최신 이미지
FROM node:latest
# 인증서 저장용 디렉토리 생성
RUN mkdir -p /webserver/certs
# self-signed certificate 생성
WORKDIR /webserver/certs
RUN openssl genrsa -des3 -passout pass:asdf1234 -out server.pass.key 2048 &&\
openssl rsa -passin pass:asdf1234 -in server.pass.key -out server.key &&\
rm -rf server.pass.key &&\
openssl req -new -key server.key -out server.csr -subj '/C=KO/ST=None/L=None/O=None/CN=bloodguy' &&\
openssl x509 -req -sha256 -days 36500 -in server.csr -signkey server.key -out server.crt
# 웹서버용 디렉토리 생성
RUN mkdir /webserver/www
# index.js 복사
COPY index.js /webserver/www
# 443번 포트 개방
EXPOSE 443
# 웹서버 실행
CMD /usr/local/bin/node /webserver/www/index.js
아래처럼 빌드해서 실행 후 접속 확인까지 해봄
// 빌드
[root@localhost]# docker build -t bloodguy/nodejs-webserver:latest .
// 확인
[root@localhost]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bloodguy/nodejs-webserver latest 3a86039539b6 12 seconds ago 942MB
// 실행
[root@localhost]# docker run -d -p 443:443 bloodguy/nodejs-webserver:latest
// 확인
[root@localhost]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
527146449a96 bloodguy/nodejs-webserver:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:443->443/tcp sharp_shirley
// 포트 개방 확인
[root@localhost]# netstat -nltp | grep 443
tcp6 0 0 :::443 :::* LISTEN 20592/docker-proxy
// 접속 확인
[root@localhost]# curl --insecure https://localhost
hello world
.
'Docker' 카테고리의 다른 글
[Docker] CentOS non-root user cron 실행 (0) | 2021.11.04 |
---|---|
[Docker] 기본 사용법 (0) | 2020.06.09 |
[Docker] 라즈베리파이에 도커 사설 레지스트리 구축 (docker private registry on raspberry pi) (0) | 2020.06.08 |