본문 바로가기
INFRA/DevOps

[Docker] Docker container 생성

by BTC_프로틴 2022. 6. 21.

Container란?

  • 개발한 application(실행파일)과 운영환경이 모두 들어있는 독립된 공간
  • 각각의 application service에 맞춰서 container를 생성

 

Dockerfile이란?

  • container를 만들 수 있도록 도와주는 명령어 집합
  • 쉽고, 간단, 명확한 구문을 가진 text file로 Top-Down 해석
  • container image를 생성할 수 있는 고유의 지시어를 가짐

 

Dockerfile 문법

  • # : comment
  • FROM : container의 base image(운영환경)
  • MAINTAINER : image를 생성한 사람의 이름 및 정보
  • LABEL : container image에 container의 정보를 저장
  • RUN : container build를 위해 base image에서 실행할 commands
  • COPY : container build시 host의 파일을 container로 복사
  • ADD : container build시 host의 파일(tar, url 포함)을 container로 복사
  • ENV : 환경변수 지정
  • USER : 명령 및 컨테이너 실행 시 적용할 유저 설정
  • VOLUME : file 또는 directory를 container의 directory로 mount
  • EXPOSE : container 동작 시 외부에서 사용할 port 지정
  • CMD : container 동작 시 자동으로 실행할 service나 script 지정
  • ENTRYPOINT : CMD와 함께 사용하면서 command 지정 시 사용

 

Nodejs application container 생성

  • directory 생성
mkdir hellojs
cd hellojs
 
  • source code 생성
vi hello.js
const http = require('http');
const os = require('os');
console.log("Test  server starting...");

var handler = function(request, response) {
  console.log("Received request from " + request.connection.remoteAddress);
  response.writeHead(200);
  response.end("Container Hostname: " + os.hostname() + "\n");
};

var www = http.createServer(handler);
www.listen(8080);
  • dockerfile 생성
vi dockerfile
FROM node:12
COPY hello.js /
CMD ["node", "/hello.js"]
  • container image 빌드
docker build -t hellojs:latest .

  • 생성된 container image 확인
docker images

  • container image 실행
docker run -d -p 8080:8080 --name web hellojs
  • container 동작 확인
docker ps
curl localhost:8080

  • container 삭제
docker rm -f web

 

Ubuntu 기반의 web server container 생성

  • 작업할 directory 생성
mkdir webserver
cd webserver
  • dockerfile 생성
vi dockerfile
FROM ubuntu:18.04
LABEL maintainer="yoon <yoon@gmail.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"]
  • container image 빌드
docker build -t webserver:v1 .
  • 생성된 container image 확인
docker images

  • container image 실행
docker run -d -p 80:80 --name web webserver:v1

  • container 동작 확인
docker ps

curl localhost

  • container 삭제
docker rm -f web

 

생성한 container image 배포

  • docker login
docker login
  • container tag 넣기
docker tag hellojs dlsxo4826/hellojs
docker tag webserver:v1 dlsxo4826/webserver:v1
  • tag 확인
docker images

  • docker hub의 개인 계정으로 배포
docker push dlsxo4826/hellojs
docker push dlsxo4826/webserver:v1

  • 개인 docker hub repository에서 확인

 

fortune command를 이용하여 메세지 생성하는 container 생성하기

  • service directory 생성
mkdir fortune
cd fortune
  • fortune command로 메세지 생성하는 script 작성
cat >> webpage.sh << EOF
#!/bin/bash
mkdir /htdocs
while :
do
  /usr/games/fortune > /htdocs/index.html
  sleep 10
done
EOF
  • dockerfile 작성
cat >> dockerfile << EOF
FROM debian:latest
ADD webpage.sh /bin/webpage.sh
RUN apt-get update ; apt-get install -y fortune
RUN chmod +x /bin/webpage.sh
ENTRYPOINT ["/bin/webpage.sh"]
EOF
  • container build and run
docker build -t fortune:latest .
docker run -d --name fortune fortune:latest
  • 실행확인
docker exec -it fortune cat /htdocs/index.html

'INFRA > DevOps' 카테고리의 다른 글

[Docker] Container Registry & Container 사용  (0) 2022.06.27
DevOps 엔지니어  (0) 2022.06.23
git과 github이란?  (0) 2022.06.20
[K8S] containerd 란  (0) 2022.06.16
[Docker] Docker Engine 설치 실습  (0) 2022.06.14

댓글