2024. 2. 5. 18:27ㆍ웹개발/컨테이너
강의 영상
다음 내용을 실습한다.
* nodejs 애플리케이션 컨테이너 만들기 : hellojs
* 우분투 기반의 웹 서버 컨테이너 만들기
* 만들어놓은 컨테이너 배포하기
nodejs 애플리케이션 컨테이너 만들기 : hellojs
다음과 같은 디텍토리를 만든 후 이동한다.
mkdir hellojs
cd hellojs
다음과 같은 helloworld 코드로 hello.js를 생성한다.
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, World!\n');
});
server.listen(8080);
docker hub에서 node로 찾아간다.
node - Official Image | Docker Hub
Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.
hub.docker.com
node에 해당하는 다양한 버전이 존재한다. Dockerfile의 FROM 의 base image에서 {이미지이름}:{버전} 형식으로 입력하게 되는데 해당 버전 중 하나를 선택해서 진행하도록 한다. 여기서는 현재 최신 버전인 21버전으로 진행한다.
다음과 같은 내용으로 Dockerfile 파일을 생성한다.
FROM node:21
COPY hello.js /
CMD ["node", "/hello.js"]
컨테이너 이미지를 빌드한다.
docker build -t hellojs:latest .
도커 이미지가 생성되었는지 확인한다.
docker image ls
우분투 기반 웹서버 컨테이너 생성 및 실행
httpd의 Dockerfile을 참조하여 ubuntu기반의 웹서버를 위한 Dockerfile을 생성한다.
홈에서 webserver디텍토리를 생성한 후 이동한다.
mkdir webserver
cd webserver
다음과 같은 Dockerfile을 생성한다.
FROM ubuntu:18.04
LABEL maintainer="silee <lsi9393@naver.com>"
# install apache
RUN apt-get update \
&& apt-get install -y apache2
RUN echo "TEST WEB" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
ubuntu 18.04버전으로 베이스 이미지를 생성한 후 repository에서 apache2를 설치한다. 이후 테스트를 위한 index.html을 생성 후 CMD를 통해 아파치를 실행이 진행된다.
이 후 dockerfile을 다음과 같이 빌드한다.
docker build -t webserver:v1 .
정상적으로 빌드가 완료되어 이미지가 생성됨을 확인할 수 있다.
웹서버가 동작되는지 다음 명령으로 확인한다.
docker run -d -p 80:80 --name web webserver:v1
다음과 같이 Docker 프로세스가 실행됨을 확인할 수 있다.
웹브라우저 접근시 다음과 같이 테스트 페이지가 출력된다.
도커의 web server를 종료시킨 후 컨테이너를 제거한다.
docker stop web
docker rm -f web
조회 시 도커 프로세스가 종료됨을 확인할 수 있다.
hellojs 컨테이너 및 실행
hellojs는 다음과 같이 8080포트로 실행한다.
docker run -d -p 8080:8080 --name web hellojs
웹브라우저로 8080으로 접속 시 다음과 같이 Hello, World!가 출력된다.
컨테이너 배포
다음 명령어로 로그인을 진행한다. Docker에 회원가입된 계정이 있어야한다.
docker login
도커 이미지의 태그 이름에 계정 이름을 붙여 다음과 같이 수정한다.
docker tag webserver:v1 lsi3131/webserver:v1
docker tag hellojs:latest lsi3131/hellojs:latest
이제 이미지를 push 한다.
docker push lsi3131/webserver:v1
docker push lsi3131/hellojs:latest
docker hub에 접속하여 repositories를 확인하면 다음과 같이 추가된 것을 확인할 수 있다.
Homework
다음 내용을 진행하는 컨테이너를 빌드하여 실행한다.
주어진 script를 실행하는 컨터이너를 빌드
* 컨테이너 이름 : fortune:20.02
* dockerfile 내용
- base image: debian
- 컨테이너의 아래의 webpage.sh 파일을 복사
#!/bin/bash
mkdir /htdocs
while :
do
/user/games/fortune > /htdocs/index.html
sleep 1o
done
- 컨테이너에 fortun 어플리케이션 설치 : apt-get install fortune
- 컨테이너 실행 시 저장한 webpage.sh가 실행되도록 구성
다음과 같이 fortune 디렉토리 생성 및 이동한다.
mkdir fortune
cd fortune
webpage.sh을 다음과 같이 작성한다.
#!/bin/bash
if [[ ! -d "/htdocs" ]]; then
echo "make dir /htdocs"
mkdir -p "/htdocs"
else
echo "dir exist /htdocs"
fi
while :
do
/usr/games/fortune > /htdocs/index.html
sleep 10
done
webpage.sh 실행을 위해 권한을 변경한다.
chmod 755 webpage.sh
Dockerfile을 다음과 같이 작성한다.
FROM debian:12
LABEL maintainer="silee <lsi9393@naver.com>"
# install fortune
RUN apt-get update \
&& apt-get install -y fortune
COPY webpage.sh /
CMD ["./webpage.sh"]
Dockerfile을 빌드한다.
docker build -t fortune:20.02 .
docker 이미지를 실행한다.
docker run -d -p 80:80 --name fortune fortune:20.02
fortune에 스크립트가 잘 실행되었는지 확인하기 위해 파일 구조에 접근한 후 cat /htdocs/index.html으로 데이터의 변화를 확인한다.
docker exec -it fortune /bin/bash
'웹개발 > 컨테이너' 카테고리의 다른 글
도커 컨테이너 보관창고 - 실습 (0) | 2024.02.06 |
---|---|
도커 컨테이너 보관창고 - 이론 (0) | 2024.02.06 |
도커 컨테이너 만들어보기 - 이론 (0) | 2024.02.05 |
우분투 Docker 살펴보기 - 실습 (0) | 2024.02.03 |
우분투 Docker 설치 (0) | 2024.02.02 |