SU Library

[Docker초보]Docker 이미지에 대한 정리 본문

DevOps/Docker

[Docker초보]Docker 이미지에 대한 정리

S U 2024. 5. 14. 09:56

 

지난 포스팅(컨테이너 개념정리)에서 살펴보았던 명령어

docker run -it rockylinux:9 date

 rockylinux의 9버전 이미지를 실행하고 date라는 명령어를 실행합니다. 

실행결과

이렇게 이미지를 기반으로 실행된 컨테이너들은 서로 독립적인 관계로 서로가 서로에게 영향을 주지 않습니다. 

docker ps -a

 

docker ps -a의 실행결과

예를 들면 rockylinux:9 이미지를 기반으로 실행된 8d5386861d9f 컨테이너 내부에서 date 명령어를 삭제하는 작업을 진행하였습니다. 8d5386861d9f에서는 date 명령어를 실행할 수 없는 상황이지만, 0e2fbc94bb2b에서는 date를 여전히 사용할 수 있습니다. 즉, 어떤 컨테이너에서 파일을 삭제해도, 다른 컨테이너에는 영향을 끼치지 않습니다. 이런점이  바로 Docker가 자랑하는 이식성입니다. 

 

현재 로컬에 어떤 도커 이미지가 저장되어 있는지 확인하는 방법으로는 

docker images

 

를 통해 

확인할 수 있습니다.  이전의 글들을 통해 도커의 컨테이너 실행시 이미지가 기반이 되고 이 이미지가 존재하지 않을시 TAG을과 레포지토리 이름을 바탕으로 특정 저장소에서부터 내려받는 것을 확인할 수 있습니다. 깃과 동작방식이 유사함을 알 수있는데, 이 저장소들을 Docker Hub(https://hub.docker.com/)라고 부릅니다. 깃처럼 pull명령어를 통해서 다음과 같이 이미지를 다운받을 수 있습니다.

docker pull debian

태그를 명시하지 않을 경우 latest버전이 다운이 됩니다.

우측 컬럼에서 확인할 수 있듯이 이미지의 크기가 적지않음을 확인할 수 있습니다. 해서 종종 이미지를 삭제해야하는 상황이 생기는데, 주의사항이 삭제하기 전  해당 이미지를 사용하는 모든 컨테이너를 종료해야합니다. 그후 

docker rmi rockylinux:9
docker image rm debian

 을 통해 이미지를 삭제할 수 있습니다.


정적 웹사이트를 서빙하는 nginx의 이미지를 빌려 컨테이너로 웹 서버를 구축해보겠습니다.

 

먼저 현재 폴더에 index.html을 생성합니다.

<html>
<style>
html {
  font-size: 16px;
}

h1 {
  text-align: center;
  margin: 2rem 1rem;
}
</style>
<h1>Welcome to SU Docker Tutorial</h1>
</html>

 그후 다음의 명령어를 실행합니다. 

docker run -d --name nginx-static -p 8082:80 -v ${pwd}:/usr/share/nginx/html:ro nginx

 

이는 nginx를 실행하되 8082로 포트포워딩을 한 후 실행하고 -d옵션으로 백그라운드 프로세스를 실행시키는 역할을 합니다. 또한, -v 옵션을 사용하여 현재 디렉터리를 컨테이너의 /usr/share/nginx/html 디렉터리에 마운트 시킵니다. 그리고 마지막 :ro컨테이너에서 이 디렉터리에서 쓰기를 할 수 없도록 읽기 전용으로 마운트하라는 의미입니다. 

 

웹브라우저에서 localhost:8082를 열어보면 다음과같은 화면이 나옵니다.

 

Comments