도커 컨테이너 만들어보기 - 실습

2024. 2. 5. 18:27웹개발/컨테이너

강의 영상

[따배도] 4-2. 도커 컨테이너 만들어보기: 실습

 

다음 내용을 실습한다.

* 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로 찾아간다.

https://hub.docker.com/_/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