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 |
댓글