본문 바로가기
Docker

Docker를 활용한 서버 배포 (2) : 이미지와 컨테이너 다루기

by Byeong 2024. 12. 21.

 Docker 이미지는 컨테이너 내에서 애플리케이션을 실행하는 데 필요한 라이브러리 및 설정 값 등을 포함하고 있다. 이미지를 통해 만들어진 Container는 소프트웨어가 패키징 되어 있어 다른 운영 체제 환경에서도 동일하게 실행될 수 있으며, 여러 컨테이너가 동일한 이미지를 기반으로 동시에 작동할 수 있다.

 Docker Hub에서 이미 만들어진 이미지를 다운로드할 수도 있고, Dockerfile을 사용해 직접 이미지를 만들 수도 있다. 만들어진 이미지는 AWS EC2와 같은 클라우드 환경에서도 다운로드하여 소스 코드 없이 쉽게 배포할 수 있다.

Docker 이미지를 다운로드하고, 컨테이너를 만들고 실행하는 방법을 실습을 통해 알아보자.


Docker 이미지 다운로드

docker pull ubuntu

#출력 내용
22.04: Pulling from library/ubuntu
a186900671ab: Download complete
Digest: sha256:0e5e4a57c2499249aafc3b40fcd541e9a456aab7296681a3994d631587203f97
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

 

ubuntu 이미지를 다운로드 해준다.

ununtu:latest처럼 tag를 지정해 줄 수도 있다. 

 

Docker image 확인

docker images

#출력 내용
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       22.04     0e5e4a57c249   3 months ago   106MB

 


Docker Container 사용 ( 수동 )

1. docker create : 이미지를 이용해서 컨테이너를 생성.

docker create -ti --name ubuntu_test ubuntu

#출력 내용
fd1c096572efa3e1d58bb617f8bb2a70c6fbba331545ebbcb1fc4df812285c77

-ti : 셸을 통해 컨테이너 내부에서 명령을 입력하고 출력을 볼 수 있다.

--name "이름" : 컨테이너 이름 지정 한다.

ubuntu : 사용할 이미지 이름 선택한다. 뒤에 ubuntu:latest처럼 명시를 안 해도 최근 이미지를 사용한다.

 

2. docker pa -a : 생성된 컨테이너 조회.

docker pa -a

#출력 내용
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS    PORTS     NAMES
571e1fa60b7e   ubuntu    "/bin/bash"   2 seconds ago   Created             ubuntu_test

-a : 작동하지 않는 모든 컨테이너를 보여 준다. 

지금 상태(Status)는 생성된 상태이지 작동을 하지 않는 상태이다. 

 

3. docker start : 중지된 컨테이너를 다시 시작.

docker start ubuntu_test
ubuntu_test #출력 내용

docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
571e1fa60b7e   ubuntu    "/bin/bash"   4 minutes ago   Up 8 seconds             ubuntu_test

ubuntu_test 컨테이너를 시작하고 상태를 확인하면 Up으로 백그라운드에서 실행된 상태이다.

 

4. docker attach : 실행 중인 컨테이너에 접속.

docker acttach ubuntu_test
root@571e1fa60b7e:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

실행 중인 애플리케이션의 출력을 보거나 입력을 할 수 있다.

 

5. docker stop : 실행 중인 컨테이너 정지.

docker stop ubuntu_test
ubuntu_test #출력 내용

docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                       PORTS     NAMES
571e1fa60b7e   ubuntu    "/bin/bash"   13 minutes ago   Exited (137) 6 seconds ago             ubuntu_test

해당 컨테이너 상대를 확인 Exited 정지된 상태를 확인 가능.


Docker container 생성 및 자동 실행

docker run -ti --name ubuntu_test ubuntu
root@356c5035f2ca:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

 

docker run을 사용하면 해당 이미지를 이용해 컨테이너가 실행된다. 

항상 실행 중인 프로세스가 있다면 -d 옵션을 줘서 백그라운드에서 작동하게 할 수 있다. 

 


Docker 이미지 및 컨테이너 정리하기

1. docker container prune : 종료된 모든 컨테이너 삭제.

docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]  y

#출력 내용
Deleted Containers:
7f9e9e11fe8afa4dfb8a01bbf71873b867b4aa705a45ce5df86879506458a14b
Total reclaimed space: 4.096kB

컨테이너가 실행 중일 경우 삭제가 안된다. 꼭 해당 컨테이너를 정지시키고 삭제를 해야 한다.

 

원하는 컨테이너만 삭제를 원한다면 docker rm을 사용하면 된다.

docker rm <컨테이너 ID 또는 이름> #해당 컨테이너 삭제
docker rm -f <컨테이너 ID 또는 이름>#실행중인 해당 컨테이너 강제 삭제

 

2. docker image prune : dangling와 사용되지 않는 모든 이미지를 삭제.

docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    80dd3c3b9c6c   4 weeks ago   139MB

docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

#출력 내용
Total reclaimed space: 0B

 

 docker image prune을 통해서는 ubuntu이미지가 삭제가 안된다. 그 이유는 기본적으로 dangling 이미지만 삭제한다. "dangling 이미지"는 태그가 없는 이미지로, "<none>:<none>" 형태만 삭제 가능하다. 반면, ubuntu:latest처럼 태그가 지정된 이미지는 dangling 이미지가 아니기 때문에 삭제되지 않습니다.

 

docker rmi를 사용해서 삭제를 해줘야 한다. 

docker rmi ubuntu:latest
Untagged: ubuntu:latest
Deleted: sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab

docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

태그가 있는 이미지는 직접 삭제를 해줘야 한다. 

 

 

3. docker system prune

사용하지 않는 도커 이미지, 컨테이너, 볼륨, 네트워크 등 모든 도커 리소스를 일괄적으로 삭제한다. 

 


Docker Desktop 활용

docker desktop

 

Docker Desktop을 사용하면 이미지와 컨테이너를 시각적으로 관리하고 상태를 쉽게 확인할 수 있다.


마무리 

 

다음에는 Docker 이미지를 만들고, Docker Compose를 사용해 효율적인 배포를 구현하는 방법을 다룰 예정이다.