-
DockerFile과 commit 명령어로 웹서버 이미지 만들기MSA & 쿠버네티스(Kubernetes) - k8s 2022. 8. 8. 00:01
우리는 Docker Hub이라는 Docker에서 운영하는 이미지 저장소에서 도커 이미지를 받아서 run 명령어를 통해 컨테이너로 실행합니다.
만약 우리가 원하는 이미지를 생성하기 위해서는 어떻게 해야 할까요?
1. 컨테이너를 실행하여 commit 명령어로 이미지로 만들 수 있습니다.
2. 도커 파일을 생성하고 build 명령어로 이미지를 만들 수 있습니다.
이를 해석하자면 다음과 같습니다
우분투 20.04 os 환경에서부터 (FROM ~)
파이썬을 설치하고 (RUN~) : 도커 이미지가 생성되기 전에 수행할 쉘 명령어
/var/www/html 경로를 생성하고 (WORKDIR~) : 설정한 실행 파일이 실행될 디렉터리
index.html 파일을 해당 경로에 복사하고 (COPY~)
EXPOSE : 호스트와 연결할 포트 번호
http.server 모듈을 사용하여 웹서버를 시작한다. (ENTRYPOINT~) : docker run 실행 시, 무조건 실행되는 명령어
commit과 build의 차이점
commit은 백업과 같은 느낌이 강하지만 build는 우리가 원하는 시나리오대로 이미지를 생성하는 느낌입니다.
Commit 명령어로 웹 서버 이미지 만들기
docker run --name web-server -it ubuntu:20.04
ubunto:20.04 이미지 파일을 web-server라는 이름의 컨테이너로 실행시킵니다.
docker commit web-server web-server-commit
docker commit [컨테이너 이름] [이미지 이름] 명령어를 활용해서 이미지를 만들 수 있습니다.
docker images
docker images 명령어를 통해 web-server-commit이라는 이미지가 생겼는지 확인합니다.
사실 contrainer를 건드린 게 없기 때문에 ubuntu:20.04 이미지와 동일한 web-server-commit 이미지가 생겼습니다.
해당 컨테이너에 python을 설치해보겠습니다.
apt update apt install python3
사용자의 요청을 응답해줄 경로를 설정합니다.
mkdir -p /var/www/html cd /var/www/html
index.html을 생성합니다.
echo "Hello, <strong>Docker</string>" > index.html
python 서버를 실행시킵니다.
python3 -m http.server
도커 파일로 웹 서버 이미지 만들기
원하는 경로에 Dockerfile 생성
echo "" >> Dockerfile
저는 C:\Users\babab\Desktop 경로에서 Dockerfile을 만들었습니다.
도커 파일을 수정하는 명령어를 입력합니다.
notepad Dockerfile
메모장이 켜집니다.
그리고 Dokerfile에는 다음과 같이 입력합니다.
FROM ubuntu:20.04 RUN apt update && apt install -y python3 WORKDIR /var/www/html COPY ["index.html", "."] CMD ["python3", "-m", "http.server"]
각 줄의 의미는 다음과 같습니다
우분투:20.04 이미지에
apt update, apt install -y python3 명령어를 차례대로 수행하여 파이썬 3을 설치하고
/var/www/html이 존재하지 않으면 만들어서 해당 경로로 이동하고
host에 있는 index.html을 해당 경로로 복사하고
python3 -m http.server 명령어를 실행하라는 의미입니다.
RUN은 빌드가 되는 시점에 실행되는 명령어이고 CMD는 컨테이너가 실행될 때 실행되는 명령어입니다.RUN의 명령어는 이미지에 반영되고 CMD 명령어는 컨테이너에 반영됩니다.
Dockerfile을 통해 이미지를 생성합니다.
docker build -t web-server-build .
docker built -t {이미지명}:{태그} {빌드 콘텍스트}
dokcer images 명령어를 통해 이미지가 생성되었는지 확인합니다.
이때 빌드 콘텍스트는 Dockerfile이 존재하는 경로로. 은 현재 경로를 의미합니다.
이후에 만들어진 이미지를 실행해보겠습니다.
docker run -p 8888:8000 --name web-server web-server-build
web-server-build라는 이미지를 web-server라는 컨테이너로 실행하며 포트 포워딩은 8888 -> 8000으로 설정합니다.
포트포워딩 방향은 host -> contianer 방향입니다.
CMD 명령어를 자동으로 수행하고 싶지 않다면 run 명령어 뒤에 pwd를 붙이면 됩니다.
이제 아래의 URL 주소로 들어가면 웹페이지를 볼 수 있습니다.
http://localhost:8888/index.html
Dockerfile의 장점
이미지가 어떻게 만들어졌는지 기록할 수 있습니다.
(문서화의 측면과 변경에 용이함)
배포에 용이합니다.
(몇기가씩 되는 이미지 파일 자체를 배포하기보다는 이미지를 만들 수 있는 스크립트를 배포하는것이 더 편리합니다)
출처
https://www.youtube.com/watch?v=0kQC19w0gTI
https://wooono.tistory.com/123
'MSA & 쿠버네티스(Kubernetes) - k8s' 카테고리의 다른 글
서킷 브레이커란? (0) 2022.12.03 Docker compose 사용하기 (0) 2022.09.04 도커 컨테이너 수정하기 (0) 2022.08.03 Docker로 Apache 웹서버 띄우기 (0) 2022.08.02 Docker 설치해보기 + Docker에 Jenkins 설치(윈도우10 Home Edition) (1) 2022.07.22