사고쳤어요
Docker 이미지 다루어보기 본문
도커 이미지
- 실행하는 데 필요한 모든 파일들과 그것을 실행하는 방법을 한데 묶어놓은 것
- 상태를 저장하지 않는 방식으로 네트워크로 전송되고 레지스트리에 저장되며 이름 및 버전 지정 가능
- 계층화되어있으며 어떤 이미지로부터 다른 이미지를 생성할 수 있음
도커 컨테이너
- 이미지의 실행 인스턴스
- 하나의 이미지로부터 여러 컨테이너들을 만들어 동일한 응용을 여러 개 실행할 수 있음
- 상태를 저장하는 방식으로 컨테이너를 사용하면서 상태를 변경할 수 있음
Docker 이미지 생성
Docker Hub Container Image Library | App Containerization
Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.
hub.docker.com
위의 사이트에서 원하는 이미지를 검색한다.
여기서는 대표적인 apache http server인 httpd를 생성할 것이다.

터미널에서 docker search httpd 명령을 통해서도 검색이 가능하다.

docker run httpd
위 명령어를 실행하면 httpd 이미지에 대한 정보를 서버로부터 받은 뒤 실행된다.

docker run -d -p 8080:80 httpd
참고로 wsl에서 docker를 실행하여 테스트하는 경우 윈도우에서 127.17.0.3 등의 IP로 접속이 불가능하다.
이를 위해서는 WSL 내부와 포트와 윈도우 포트를 매핑해야 한다.
위의 명령어를 입력 후, localhost:8080으로 접속하면 WSL에서 실행한 docker의 httpd를 확인할 수 있다.


docker images를 입력하면 현재 docker가 가지고 있는 이미지들을 보여준다.

docker rmi httpd 명령을 통해 httpd를 제거해보자.
그런데 container 4ecf3c9e78f4가 httpd를 사용중이여서 컨플릭트가 발생한다.

docker ps -a 명령을 통해 컨테이너들을 확인할 수 있는데, 여기서 위의 4ecf3c9e78f4가 보인다.

docker rm <CONTAINER ID> 또는 docker rm <NAMES>로 컨테이너를 제거할 수 있다.

이제 docker rmi httpd를 실행하였을 때 httpd가 성공적으로 삭제된다.

docker run -it httpd /bin/bash
# wsl의 경우
docker run -it -p 8080:80 httpd /bin/sh
위 명령은 httpd 이미지를 기반으로 컨테이너를 실행하고,
그 안에서 /bin/bash 셸을 실행하여,
사용자가 컨테이너 내부로 들어가 터미널을 조작할 수 있도록 해준다.

cat > index.html을 통해 기존에 It Works!라고 출력되던 index.html을 New Page!로 바꿔주었다.

그리고 httpd-foreground를 실행하면

It works!로 보여졌던 페이지가 New Page!로 보여지게 된다.

이후 컨테이너를 종료하더라도, 해당 컨테이너를 다시 실행하고 index.html을 확인해보면 New Page!로 변경되어있는 것을 확인할 수 있다.

docker commit <컨테이너 이름 / 컨테이너 ID> <이미지 이름>:<버전>
#example
docker commit heuristic_goodall my_http:0.1
위와 같이 변경된 내용을 이미지로 생성하여 관리하고 싶다면 위의 명령어를 통해 이미지를 생성할 수 있다.
Dockerfile을 통한 이미지 생성

nano Dockerfile
FROM httpd:latest
RUN echo "<html><body><h1>Docker build test</h1></body></html>" > /usr/local/apache2/htdocs/index.html
ENTRYPOINT /usr/local/bin/httpd-foreground

먼저 위와 같이 Dockerfile을 생성해준다.

docker build -t my_http:0.2 .
위 코드를 통해 my_http 0.2를 생성한다.

그리고 해당 이미지를 실행하면 Docker build test가 나오는 것을 확인할 수 있다.
이미지 레포지토리로 업로드
이미지를 레포지토리로 업로드하기 위해서는 먼저 docker에 로그인을 해야 한다.


docker tag my_http:0.2 <docker ID>/my_http:0.2를 통해 이미지를 복사하여 이름을 변경해준다.

docker push <docker image>
docker push 명령어를 통해 이미지를 업로드한다.

Docker hub를 확인하면 이미지가 성공적으로 업로드된 것을 볼 수 있다.

이제 모든 이미지를 삭제한 뒤 docker run kevinmj12/my_http:0.2를 실행하면 레포지토리로부터 이미지를 받아와 실행이 된다.
'프로그래머스' 카테고리의 다른 글
| [2024 KAKAO WINTER INTERNSHIP] n+1 카드게임 (C++) (0) | 2025.10.01 |
|---|---|
| [2024 KAKAO WINTER INTERNSHIP] 산 모양 타일링 (C++) (0) | 2025.09.23 |
| [프로그래머스] 비밀 코드 해독 (C++) (0) | 2025.03.20 |
| [프로그래머스] 아이템 줍기 (C++) (1) | 2024.11.07 |
| [2022 KAKAO WINTER INTERNSHIP] 등산코스 정하기 (C++) (1) | 2024.11.02 |