TOP
class="layout-aside-left paging-number">
본문 바로가기
프로그래밍 및 기타/Cloud : AWS

[Cloud] 컨테이너 이미지, 컨테이너 생성 및 실행 (feat. 도커)

by 기록자_Recordian 2025. 2. 26.
728x90
반응형
이전 내용
 

[aws] Oracle Virtual Box 설치 및 실행

이전 내용 [aws] Tomcat 서버와 DB 연동하기이전 내용 [aws] 도커(Docker) 란?이전 내용 [aws] AMI(Amazon Machine Image) 복제이전 내용 [aws] Elastic IP 할당받아 인스턴스에 연결하기이전 내용 [aws] VPC 피어링(pe

puppy-foot-it.tistory.com

 

[도커]

 

[aws] 도커(Docker) 란?

이전 내용 [aws] AMI(Amazon Machine Image) 복제이전 내용 [aws] Elastic IP 할당받아 인스턴스에 연결하기이전 내용 [aws] VPC 피어링(peering)이전 내용 [aws] CloudFront이전 내용 [aws] IAM 계정 생성하기이전 내

puppy-foot-it.tistory.com


도커 허브란?

 

도커 허브(Docker Hub)는 도커 컨테이너 이미지의 공유 및 관리 플랫폼으로, 도커 허브를 사용하는 주요 이유는 다음과 같다.

1. 이미지 공유 및 배포

  • 공유 용이성: 도커 허브는 개인이나 조직이 생성한 도커 이미지를 쉽게 공유할 수 있는 저장소를 제공한다. 개발자는 자신이 만든 이미지를 다른 팀원이나 외부 사용자와 손쉽게 공유할 수 있다.
  • 버전 관리: 여러 버전의 이미지를 관리할 수 있어, 과거 버전으로 롤백하거나 특정 버전을 쉽게 사용할 수 있다.

▶ 퍼블릭으로 사용하면 무료로 사용할 수 있으나, 말그대로 모든 사람들이 볼 수 있다. 기업에서는 주로 프라이빗으로 사용하는 데, 유료이다.

 

2. 공개 및 개인 레지스트리

  • 공개 이미지: 다양한 공식 이미지(예: Ubuntu, Nginx, MySQL 등)와 다양한 커뮤니티 이미지가 무료로 제공된다. 이를 통해 개발자는 기초부터 시작할 필요 없이 빠르게 애플리케이션을 구축할 수 있다.
  • 개인 및 팀 프로젝트: 개인적인 프로젝트나 팀 내부에서만 사용하는 비공식 이미지를 위한 개인 저장소도 운영할 수 있다.

3. CI/CD 통합

  • 자동화 도구와의 통합: 도커 허브는 다양한 CI/CD 도구(예: Jenkins, GitLab CI 등)와의 통합을 통해 자동 배포 및 지속적 통합을 지원한다. 이는 개발, 테스트, 배포의 각 단계를 자동화하여 효율성을 높인다.

4. 간편한 관리 및 모니터링

  • 위치 불문 접근성: 도커 허브에 저장된 이미지는 인터넷에 연결된 모든 장치에서 접근 가능하므로, 다양한 환경에서 애플리케이션을 배포하고 실행하는 데 편리하다.
  • 모니터링: 이미지의 다운로드 수, 사용 통계, 업데이트 내역 등을 확인할 수 있어 사용 현황을 모니터링할 수 있다.

5. 커뮤니티 및 생태계

  • 활발한 커뮤니티: 도커 허브는 전 세계적으로 수많은 사용자와 개발자들이 모여있어, 다양한 리소스와 도움을 받을 수 있는 기회를 제공한다. 공식 문서, 튜토리얼, 검증된 이미지 등을 활용할 수 있다.

도커 허브 계정 생성

 

먼저 구글에서 도커 허브 검색하여 사이트에 접속

 

Docker 계정을 생성한다. (구글이나 깃허브 연동 말고 직접 생성)

 


Xshell 에서 Docker 로그인

 

다시 Xshell 로 돌아와서 도커에 로그인하는 명령어를 입력하고 비밀번호를 입력한다.

docker login - u 이메일 주소

 

 

◆ 도커 허브에서 nginx 라는 이미지 검색해보기

docker search nginx

위의 명령어는 도커 허브에서 "nginx"라는 키워드에 해당하는 이미지를 검색하는 데 사용된다. 이 명령을 실행하면 관련된 도커 이미지 목록과 그 이미지에 대한 간단한 설명을 확인할 수 있다.

※ 이 중에 바이러스나 보안 관련 문제로 인해 웬만하면 'Official' 이 붙은 것을 사용하기를 권장한다. (Official 은 리눅스 재단에서 인증하는 이미지라는 뜻)

 

 

◆ 도커 허브에서 nginx 이미지 다운로드 및 검색 하기

docker pull nginx:1.14

위의 명령어는 도커 허브에서 nginx의 버전 1.14 이미지를 다운로드 하는 명령어인데, 만약 nginx 뒤에 아무것도 없다면 latest(최신 버전)이 다운로드 된다.

 

다운로드된 이미지 검색하기

docker images

 

◆ 다운받은 이미지를 컨테이너로 만들고 실행하기 (run 명령어)

아래 명령어는 run 명령어를 사용하여 다운받은 nginx 1.14 버전을 로컬호스트 80 포트와 80 포트를 포트포워딩하여 nc 라는 이름으로 만들어서 백그라운드에서 실행하게 된다. 그리고 실행하면서 하단에 생성된 컨테이너가 뜬다.

docker run -d --name=nc -p 80:80 nginx:1.14

※ 포트 포워딩(Port Forwarding)은 네트워크에서 외부의 특정 포트로 들어오는 요청을 내부 네트워크의 특정 장치 또는 포트로 전달하는 과정이다. 이 기술은 일반적으로 라우터나 방화벽에서 사용되며, 특정 서비스나 애플리케이션에 대한 접근을 가능하게 한다.

 

◆ 현재 실행되고 있는 컨테이너 목록 확인하는 명령어

docker ps 라는 명령어는 현재 실행되고 있는 컨테이너의 목록이 보인다.

docker ps

 

앞서 호스트 IP (끝자리 1번은 로컬 호스트에서 점유하고 있으므로)의 끝자리를 2번으로 바꾼 뒤 VirtualBox의 Firefox 주소창에 넣으면 아래와 같이 nginx 사이트가 뜬다.

만약 IP 주소를 모르겠다면, 아래 명령어를 입력하면 컨테이너에 대한 정보를 알 수 있다.

 

최신 버전의 nginx 생성 및 실행 / 도커 컨테이너 목록 확인 / 컨테이너 이미지 목록 확인

 

doccker inspect 컨테이너명

※ docker inspect 명령어:  주어진 컨테이너의 상세 정보를 조회하는 데 사용되는 도커 CLI 명령어다. 이 명령을 통해 특정 컨테이너의 설정, 구성 및 상태 등의 정보를 JSON 형식으로 확인할 수 있다.

 


nginx 홈페이지 내용 바꿔보기

 

이번엔 호스트 IP를 입력하면 뜨는 화면을 다르게 바꿔본다. (정확히는 nginx의 index.html 내용을 바꾸는 것)

docker exec -it 컨테이너명 /bin/bash

이미 실행 중인 Docker 컨테이너에 접속하여 그 안에서 상호작용할 수 있는 Bash 셸을 여는 데 사용된다. 이 명령을 통해 사용자는 지정된 컨테이너 내부에서 직접 명령을 입력하고 작업을 수행할 수 있다.

 

# nginx의 index.html 경로로 접근
cd /usr/share/nginx/html

# 내용 바꾸기
echo "I am Homepage" > index.html

# 바뀐 내용 확인
cat index.html

 

echo "I am Homepage" > index.html

현재 작업 중인 디렉토리에 index.html이라는 파일을 생성하거나 해당 파일이 이미 존재하는 경우 그 내용물을 새로운 내용으로 덮어쓰는 작업을 수행

  • ehco: 특정 문자열을 출력하는 명령어
  • > : 출력을 리다이렉션(redirect)하는 기호. 명령어의 실행 결과를 파일로 저장할 때 사용

그리고나서 VirtualBox의 Firefox에서 호스트 IP(끝 2번)으로 검색해보면 아래와 같이 바뀐 것을 확인할 수 있다.

 

 

컨테이너들은 overlay2 라는 폴더에 생성된다.

 

또한, 이름을 명시하지 않으면 컨테이너 이름은 랜덤으로 생성된다.


 

◆ run과 create 차이

  • run 명령어로 할 경우에는 생성 및 실행
  • create 명령어로 할 경우에는 생성만 되어 실행은 start 명령어를 사용하여 다시 진행해줘야 된다.

▶ 따라서 현업에서는 효율을 위해 run 명령어를 주로 사용한다.

 

◆ 컨테이너 목록 보기 차이

  • docker ps: 실행 중인 컨테이너만 보임
  • docker ps -a: 전체 컨테이너 목록이 보임

 

 


컨테이너 빌드하기

 

도커에서 컨테이너 빌드는 애플리케이션을 포함한 컨테이너 이미지를 생성하는 과정을 의미한다. 이러한 이미지는 프로덕션 환경에서 애플리케이션을 실행하는 데 필요한 모든 종속성과 설정을 포함하고 있다.

  • 도커 이미지: 애플리케이션과 그 실행에 필요한 모든 파일, 라이브러리, 종속성, 설정 정보를 포함하는 정적인 파일. 사용자들이 보지 못함(IP 없음)
  • 도커 컨테이너: 도커 이미지를 기반으로 실행되는 실체로, 애플리케이션이 동작하는 환경입니다. 이미지에서 인스턴스화 되어 실행되며, 데이터와 변경 내용을 유지할 수 있음. 사용자들이 볼 수 있음(IP 있음)

빌드를 하는 대략적인 과정은 다음과 같다.

도커파일 생성 → 도커 빌드 → 도커 실행(run)  → 도커 확인(inspect)

 

1. 도커파일

컨테이너 이미지를 빌드하기 위해 주로 Dockerfile이라는 파일을 사용한다. 이 파일에는 이미지 생성 시 필요한 모든 명령어가 포함되어 있다.

도커파일을 제대로 만들어놓으면 앞으로 앞서 했었던 aws에서 인스턴스를 생성해서 톰캣 설치하고 등등등 번거롭고 시간이 걸리는 작업을 이 파일 하나로 다 끝낼 수 있다.

따라서 도커에서는 이 도커파일을 얼마나 잘 작성하는 가가 제일 관건이다.

즉, 도커는 인스턴스(붕어빵)를 찍어내는 틀(붕어빵 틀)이고 그 핵심이 이 도커파일이다.

▶ 추후 도커파일 작성하는 법에 대해 써볼 예정

 

2. 도커파일 폴더에 옮겨넣고 도커 빌드하기

# 도커파일 빌드 명령어
docker build -t 이미지이름:태그 (주로 버전 - 업데이트를 위해 버전 명시하는 것이 좋음) .
docker build -t 이미지이름:태그 .

※ -t: 생성할 이미지에 태그를 부여. 태그는 이미지의 식별자 역할

 

3. 도커 이미지가 잘 생성되었는지 확인

docker images

 

이 이미지를 가지고 컨테이너를 생성할 수 있다.

 

◆ 빌드 시 주의 사항

  • 캐시 활용: 도커는 이전의 빌드 캐시를 사용하여 빌드를 최적화한다. 이를 통해 변경된 부분만 재빌드하여 시간을 절약할 수 있다.
  • 최적화: 사용하는 패키지와 파일의 수를 최소화하여 이미지 크기를 줄이는 것이 중요하다.
  • 정리 및 관리: 불필요한 이미지나 컨테이너를 주기적으로 정리하여 시스템의 자원을 효율적으로 관리하는 것이 필요하다.
[명령어 정리]

- docker ps: 현재 운영 중인 컨테이너 표시
- docker ps -a : 운영 중이 아닌, Stop 되어있는 컨테이너도 표시 (즉, 모두 표시)
- docker images : 현재 os에 다운된 컨테이너 이미지 표시
- docker run (pull+create+start) : 다운, 생성, 시작 합친 명령어
- docker inspect : inspect 옵션은 컨테이너 또는 컨테이너 이미지의 상세정보를 보고 싶을 때 사용하는 옵션 현장에서는 해당하는 컨테이너 또는 컨테이너 이미지에 어떤 문제가 있을 때 클라우드 엔지니어가 트러블슈팅할 때 많이 사용하는 옵션
- exec 명령어 : 실행중인 컨테이너에 접근하기 위한 명령어

컨테이너, 컨테이너 이미지 삭제하기

 

컨테이너 이미지 삭제

컨테이너 이미지를 삭제하고 싶은 경우에는 하단의 명령어로 삭제할 수 있다.

rmi 삭제하고 싶은 이미지명:태그(버전)

 

먼저 docker images 명령어로 이미지 목록을 확인하고, 삭제하고 싶은 이미지를 명령어를 사용하여 삭제하고나서 다시 이미지 목록을 조회해보면

# 이미지 목록 확인
docker images
# 이미지 삭제
docker rmi webserver:v2.0
# 이미지 목록 확인
docker images

 

webserver:v2.0 이라는 이미지가 목록에서 삭제되어있는 것을 확인할 수 있다.

 

 

◆ 컨테이너 삭제

컨테이너를 삭제할 때는 rm 명령어로 삭제할 수 있다.

그리고, docker ps를 이용하여 컨테이너를 조회해보면 하나도 안 뜨는데, 왜냐하면 현재 실행되는 컨테이너가 없기 때문이다.

즉, docker ps 명령어는 현재 실행되고 있는 컨테이너 목록만 뜬다.

이럴 때 꺼져있는 컨테이너를 포함한 전체 컨테이너 목록을 보고싶을 때 사용하는 명령어는

# 전체 컨테이너 목록 보기
docker ps -a

해당 명령어를 입력하니 전체 컨테이너 목록이 출력되었다.

 

이 컨테이너를 삭제하려면 

docker rm [컨테이너 ID 또는 컨테이너 이름]

 

 

◆ 컨테이너, 컨테이너 이미지 삭제 관련 옵션(강제 삭제, 일괄 삭제)

 

1. 강제 삭제 (-f)

컨테이너와 이미지는 실행 중일때 삭제가 안 되는데, 만약 이를 강제적으로 삭제하려면

-f 명령어를 사이에 입력하여 삭제해주면 된다.

# 컨테이너 이미지 강제 삭제
docker rmi -f [이미지이름:태그]

# 컨테이너 강제 삭제
docker rm -f [컨테이너 ID 또는 컨테이너 이름]

# 죽어있는 컨테이너까지 삭제
docker container prune

 

2. 전체 삭제(-a -q)

컨테이너나 컨테이너 이미지를 전체 삭제하려면

# 컨테이너 일괄 강제 삭제
docker rm -f $(docker ps -a -q)

# 컨테이너 이미지 일괄 강제 삭제
docker rmi -f $(docker images -q)

 

컨테이너 이미지 강제 삭제

 

죽어있는 컨테이너까지 삭제

 

남아있는 컨테이너 전체 목록 확인


다음 내용

 

[Cloud] 도커 허브에서 컨테이너 이미지 다운로드 & 업로드하기

이전 내용 [Cloud] 컨테이너 이미지, 컨테이너 생성 및 실행 (feat. 도커)이전 내용 [aws] Oracle Virtual Box 설치 및 실행이전 내용 [aws] Tomcat 서버와 DB 연동하기이전 내용 [aws] 도커(Docker) 란?이전 내용

puppy-foot-it.tistory.com

728x90
반응형