[ 이미지 만드는 법 2가지 ]
1. Commit
- 이미 존재하는 컨테이너를 이미지로 백업하는 용도
2. Build
- 존재하지 않는 이미지를 생성하는 것
https://www.youtube.com/watch?v=0kQC19w0gTI
[ Docker commit ]
docker extension 이 vs code에 깔려있다면 보다 편하게 container 상황을 확인할 수 있다.
docker run --name web-server -it ubuntu:20.04
코드를 실행시키면 ubuntu:20.04 도커 이미지를 설치하고, 이를 가지고 web-server라는 이름의 컨테이너를 만들어준다.
-it 라는 옵션을 통해 컨테이너 안의 본셸을 열어놓을 수 있었다.
docker commit web-server web-server-commit
"web-server" 라는 내 컨테이너를 "web-server-commit" 이라는 이름의 이미지로 저장하였다.
[ Docker build ]
Dockerfile 을 만들었습니다.
명령어를 통해 build를 해 봅니다.
docker build -t web-server-build .
-t 옵션은 tag를 의미합니다. web-server-build 라는 이름의 이미지를 만들겠다는 의미입니다.
경로는 현재 경로 . 로 설정하였습니다.
다음과 같이 docker image가 생성되었습니다.
파이썬3 안에 서버가 내장되어 있기 때문에 python3를 설치하려 합니다.
[ web-server-commit ]
commit 에 대한 연습이기 때문에 컨테이너 안에서 다음의 명령어를 진행해줍니다.
1. 컨테이너 안에서 python3 를 설치해 줍시다.
apt update
apt install python3
2. 웹서버가 사용자 요청이 들어왔을 때, 그 요청을 /var/www/html 에서 찾도록 만들고 싶습니다.
mkdir -p /var/www/html
cd /var/www/html
- -p 옵션을 주면 경로에 해당하는 폴더 전체가 생성된다고 합니다.
3. 사용자에게 요청이 들어왔을 때, 그 요청을 응답해줄 기본 웹페이지 생성
echo "Hello, <strong>Docker</strong>" > index.html
4. python3 에 내장되어있는 웹서버가 실행이 되면서 기본 포트인 8000번 포트에 Listening 하게 됩니다.
python3 -m http.server
[ web-server-build ]
build에 대한 연습이기 때문에 Dockerfile를 먼저 작성해줍니다.
1. 컨테이너 안에서 python3 를 설치해 줍시다.
- RUN apt update && apt install -y python3
- RUN 명령어를 여러번 쓸 수도 있지만, RUN 명령어를 여러번 쓰면 레이어 여러 개가 생성되기 때문에 추천하지 않는다고 합니다.
- 따라서 && 라는 키워드를 통해 한 줄로 명령어를 이어서 작성해 줍니다.
- -y 옵션을 넣어주지 않으면 설치 중간에 설치 하시겠습니까? 라는 메세지가 뜨게 되고 docker가 제대로 build 되지 않게 됩니다.
2. 웹서버가 사용자 요청이 들어왔을 때, 그 요청을 /var/www/html 에서 찾도록 만들고 싶습니다.
- WORKDIR /var/www/html
- 디렉토리가 없다면 디렉토리를 만들고
- 사용자를 디렉토리로 이동하고
- 이후 실행하는 run, entry point, cmd 등의 명령어가 실행될 때, WORKDIR 을 대상으로 그 명령어가 실행이 됩니다.
3. 사용자에게 요청이 들어왔을 때, 그 요청을 응답해줄 기본 웹페이지 생성
- RUN echo "Hello, <strong>Docker</strong>" > index.html
- WORKDIR 안에 index.html이 생겨나게 된다.
또는 다음의 방법을 쓸 수 있습니다.
- COPY ["index.html", "."]
- HOST에 있는 index.html을 WORKDIR 에 복사하라는 명령어 입니다.
4. python3 에 내장되어있는 웹서버가 실행이 되면서 기본 포트인 8000번 포트에 Listening 하게 됩니다.
- CMD ["python3", "-u", "-m", "http.server"]
- Docker에서 python3에 내장된 웹서버를 실행하기 위해서는 python3에 기본적으로 포함된 속성으로 인해서 -u 옵션을 주어야만 실행되고 있는 log가 화면으로 출력되게 됩니다.
- RUN 은 Build 가 되는 시점에 실행되는 명령어 입니다. (이미지에 반영)
- CMD는 컨테이너가 실행될 때 실행되는 명령어 입니다. (컨테이너에 반영)
5. 이제 만든 Dockerfile로 이미지 생성 및 컨테이너를 실행시켜 봅시다.
docker build -t web-server-build .;
docker rm --force web-server;
docker run -p 8888:8000 --name web-server web-server-build;
web-server-build 라는 이름으로 build 하였고,
web-server 라는 컨테이너는 제거해주고, web-server 라는 이름으로 컨테이너를 만들었습니다.
8000번 포트에서 listening 하고 있는 python3 기본 웹서버가 실행이 되었습니다.
* 참고로 CMD 명령어를 실행시키고 싶지 않다면, 뒤에 pwd를 붙여서 CMD 대신 pwd를 실행시킬 수 있습니다. (오버라이딩)
docker build -t web-server-build .;
docker rm --force web-server;
docker run -p 8888:8000 --name web-server web-server-build pwd;
'Docker' 카테고리의 다른 글
[Docker 입문] Docker compose (0) | 2023.01.23 |
---|---|
[Docker 입문] Docker로 프로젝트별 컨테이너 만들기(commit 실습) _생활코딩 (0) | 2023.01.23 |
[Docker 입문] 호스트와 컨테이너의 파일시스템 연결 _생활코딩 (0) | 2023.01.23 |
[Docker 입문] 명령어 실행 _생활코딩 (0) | 2023.01.23 |
[Docker 입문] 네트워크 _ 생활코딩 (0) | 2023.01.23 |