📌 도입
dockerhub 같은 곳에서 application을 구동하는데 필요한 image를 다운 받을 것이다.
image는 그 자체로 실행할 수 없기 때문에 run 명령어를 통해서 컨테이너를 만들고, 컨테이너를 통해 해당 application을 실행할 것이다.
그런데 image를 다운받는 것뿐만 아니라, image를 생성하고 싶을 수 있다.
이 때 만들 수 있는 방법은 2가지가 있다.
- commit 명령어를 이용하는 방법
- container에서 commit을 하면 image가 만들어진다.
- 이는 해당 컨테이너에 대한 백업의 성격이 강하다.
- Dockerfile로부터 image를 생성하는 방법
- Dockerfile에 대해 build 명령어를 통해 image를 생성할 수 있다.
- 이는 생성에 대한 성격이 강하다.
📌 실습
▸ 초기화
일단 현재 컨테이너와 이미지들이 차 있으므로 모두 삭제하고 시작하자.
- docker rm -f $(docker ps -aq)
- docker rmi --force $(docker images -q)
📚 컨테이너 → 이미지 생성
그 다음 ubuntu image를 설치하자.
- docker run --name web-server -it ubuntu:20.04
그러고 나서 위의 컨테이너를 통해 새로운 이미지를 생성할 수 있다.
- docker commit web-server web-server-commit
📚 Dockerfile → image 생성
- docker build -t 이름 .
📚 python 설치 - 터미널 이용
python에 내장돼 있는 web-server를 이용하기 위해 python을 설치해주자
아까 docker run --name web-server -it ubuntu:20.04에서, -it 옵션을 주었기 때문에 해당 터미널로 접속이 됐다.
해당 터미널에서 python을 설치하기 위해 아래 두가지 명령어를 입력해주자.
- apt update
- apt install python3
그러면 파이썬이 설치된다.
📚 python 설치 - Dockerfile 이용
FROM ubuntu:20.04
RUN apt update
RUN apt install python3
위처럼 명령어를 적어주면 된다.
그런데 RUN 명령어는 실행될 때마다 Layer가 추가되기 때문에 위처럼 실행하면 비효율적이다.
FROM ubuntu:20.04
RUN apt update && apt install -y python3
위처럼 && 을 이용해서 명령어를 연결할 수 있다.
또한 apt install 을 했을 때 yes 를 입력하기 위해 -y 옵션을 준다.
📚 디렉토리 - 터미널
터미널 창에서 디렉토리를 만들고 이동해보자.
- mkdir -p /var/www/html
- cd /var/www/html
-p option은 없으면 생성하라는 옵션이다.
📚 디렉토리 -Dockerfile
FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
WORKDIR을 지정해주면 된다.
📚 파일 만들기 - 터미널
- echo "hello, <strong>Docker</strong>" > index.html
📚 파일 만들기 - Dockerfile
FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
RUN echo "hello, <strong>Docker</strong>" > index.html
다른 방법으로, COPY를 사용할 수 있다.
FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
COPY ["index.html","."]
📚 파이썬 실행하기 - 터미널
- python -m http.server
📚 파이썬 실행하기 - Dockerfile
FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
COPY ["index.html","."]
CMD ["python3","-u","-m","http.server"]
아래의 명령어로 위의 Dockerfile을 빌드해보자.
- docker build -t webserver-build .
- docker rm --force web-server
- 혹시 web-server라는 이름을 가진 컨테이너가 있다면 삭제해준다.
- docker run -p 8888:8000 --name web-server webserver-build
- 만약 마지막에 pwd, ls 와 같은 명령어를 주면 Dockerfile의 CMD 명령어가 무시되고 해당 명령어가 실행된다.
📚 RUN 과 CMD
- RUN
- 빌드가 실행되는 시점에 실행되는 명령어
- RUN에 명시한 명령어는 이미지에 반영
- CMD
- 컨테이너 실행될 때 실행되는 명령어
- CMD에 명시한 명령어는 컨테이너에 반영
이미지 만들기
- ( https://www.youtube.com/watch?v=0kQC19w0gTI )
이미지 삭제
- ( https://www.lainyzine.com/ko/article/how-to-remove-all-docker-contaniers-and-images/ )
'devops > Docker 강좌📌인프런' 카테고리의 다른 글
Spring Boot - Docker 예제 (0) | 2022.03.22 |
---|---|
생활코딩 도커강좌 #4 - Docker compose (0) | 2022.03.08 |
생활코딩 도커강좌 #3 - 이미지 공유 (0) | 2022.02.28 |
생활코딩 도커 강좌 #1 - 기본 (0) | 2022.02.03 |
댓글