개발자가 환경 설정하는 것은, 필요한 소프트웨어, 도구, 라이브러리, 그리고 설정 등을 설치하고 구성하는 과정입니다. 이는 프로젝트를 개발하고 실행할 수 있는 환경을 마련하는 과정으로, 개발에 필요한 모든 것을 갖추는 것을 의미합니다. 보통 개인 프로젝트를 할 때는 한 번만 환경 설정을 하면 되지만, 협업 프로젝트나 다른 환경에서 작업해야 할 때는 같은 작업을 반복해야 합니다. 이런 문제를 해결하기 위해 도커(Docker)가 사용됩니다. 도커는 컨테이너화된 애플리케이션을 개발, 배포, 그리고 실행하기 위한 플랫폼으로, 개발자는 효율적으로 작업을 수행할 수 있고, 일관된 환경에서 코드를 실행하여 문제를 해결할 수 있습니다.
1. 도커(Docker)란
도커(Docker)는 소프트웨어 플랫폼으로, 애플리케이션을 신속하게 구축, 테스트, 및 배포할 수 있게 해주는 도구입니다. 리눅스 응용 프로그램들을 프로세스 격리 기술을 활용하여 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트입니다. 간단히 말해, 개발자가 애플리케이션을 빌드하고 배포하고 실행하며 업데이트하고 관리할 수 있는 플랫폼입니다. 이를 통해 개발자는 애플리케이션을 격리된 환경에서 패키징하여 이식성을 향상시키고, 보다 쉽게 배포할 수 있습니다.
2. 도커(Docker) 용어
처음 도커에 접속하면 다소 생소한 용어들이 눈에 띌 것입니다. 사용하기에 앞서 도커에서 사용되는 몇 가지 용어들을 정리하였습니다.
1) docker hub : Docker에서 관리하는 이미지(image) 저장소입니다. 여기에는 소프트웨어 공급업체, 오픈 소스 프로젝트 및 커뮤니티에서 제공하는 10만개 이상의 컨테이너 이미지가 있습니다.
※ GitHub와 같은 다른 이미지 저장소도 있습니다. GitHub는 애플리케이션 개발 툴로 유명한 저장소 호스팅 서비스이며, 협업 및 커뮤니케이션을 강화하는 플랫폼이기도 합니다. Docker Hub 사용자는 저장소(repo)를 만들어 여러 이미지를 보관할 수 있습니다. 이 저장소는 공용 또는 전용으로 지정할 수 있으며, GitHub 또는 BitBucket 계정에 연결하는 것도 가능합니다.
2) image : Docker 이미지(image)는 실행 가능한 애플리케이션 소스 코드는 물론, 이 애플리케이션 코드가 컨테이너 형태로 실행되는 데 필요한 모든 툴, 라이브러리 및 종속 항목이 포함되어 있습니다. Docker 이미지를 실행하면 하나의 컨테이너가 실행됩니다.
3) container : Docker 컨테이너(container)는 Docker 이미지의 현재 실행 중인 라이브 인스턴스입니다. Docker 이미지는 읽기 전용 파일이지만, 컨테이너는 이미지를 실행한 상태입니다.
4) pull : 다운로드. Docker 이미지(image)를 다운받을때 pull 버튼을 클릭합니다.
5) run : 실행. container 단위로 실행할 수 있습니다.
3. 도커(Docker) 장점
- 도커 컨테이너는 수정 없이 어떤 데스크탑이나 데이터 센터, 클라우드 환경에서도 실행됩니다.
- 단일 컨테이너 내에 여러 개의 프로세스를 조합할 수 있어 업데이트나 문제 해결에 용이합니다.
- 애플리케이션 소스 코드를 기반으로 컨테이너를 자동으로 빌드할 수 있습니다.
- 컨테이너 이미지의 여러 버전을 관리하고, 이전 버전으로 롤백하거나 버전을 추적할 수 있습니다.
- 기존 컨테이너를 템플리트처럼 사용하여 새 컨테이너를 빌드할 수 있습니다.
- 개발자는 오픈 소스 레지스트리에 제공되는 수천 개의 컨테이너를 활용할 수 있습니다.
4. 실행 명령어 (Window 환경)
Window운영체제에서 Powershell을 통해 Docker를 사용할때 쓰이는 몇 가지 명령어입니다.
기초 명령어
Docker 명령어 | 설명 |
docker pull [image] | [image] 다운 |
docker images | 설치된 이미지 리스트 출력 |
docker run [image] | [image]를 실행하여 임의의 컨테이너 를 만들고 실행 |
docker run --name [name] [image] | [image]를 실행하여 [name] 컨테이너 를 만들고 실행 |
docker logs [container name/ID] | [container] 로그 출력 |
docker logs -f [container name/ID] | [container] 로그를 실시간으로 출력 |
docker stop [container name/ID] | [container] 실행 중지 |
docker rm [container name/ID] | [container] 삭제 (실행중인 상태에서는 삭제 불가능) |
docker rm --force [container name/ID] | [container] 삭제 (실행중인 상태에서 삭제 가능) |
docker ps | 현재 실행중인 컨테이너 정보 출력 |
docker container ls | 현재 실행중인 컨테이너 정보 출력 (위와 같음) |
docker ps -a | 모든 container 정보 출력 |
docker rmi [image] | [image] 삭제 |
docker run -p 8000:80 httpd | httpd 이미지를 활용한 컨테이너 만들기 host container 생성 및 port forwarding : host(container; 80)와 client(8000)를 포트번호를 통해 연결 (host 포트번호는 80으로 고정) |
docker exec [container name/ID] pwd | [container] 경로 출력 |
docker exec [container name/ID] ls | [container] 경로에 있는 파일 리스트 출력 |
docker exec [container name/ID] /bin/sh | [container] 내부 bin폴더에서 shell 프로그램 실행 |
docker exec -it [container name/ID] /bin/sh | [container] 내부 bin폴더에서 shell 프로그램 실행 (컨테이너 내부에 대화형 터미널 환경을 제공하고 사용자의 입력을 받게 함) |
docker exec -it [container name/ID] /bin/bash | [container] 내부 bin폴더에서 bash shell 프로그램 실행 |
exit | 컨테이너 내부 환경에서 나감 |
apt update | apt 패키지 업데이트 (리눅스 배포판에서 패키지 관리를 위해 사용되는 도구) |
apt install nano | nano 설치 (리눅스와 유닉스 시스템에서 사용할 수 있는 텍스트 편집도구) |
nano index.html | html 파일 열기 및 편집 |
Container shell 프로그램 실행 후 사용하는 terminal commend
pwd | 현재 컨테이너 경로 출력 |
ls -al | 컨테이너 내부 파일 목록 출력 |
cd / ~ / | [ ~ ] 경로로 이동 |
컨테이너 외부 html 파일 가져오기
docker run -p 8000:80 -v /외부경로:/컨테이너내부경로/ httpd |
index.html 파일을 container 밖에서 관리하고 싶은 경우, 해당 명령어를 사용하여 파일을 가져온다. |
-v /외부경로:/컨테이너내부경로/ 컨테이너 생성 시 컨테이너 외부의 index.html파일을container 내부에 넣고 컨테이너 생성 /외부경로 : 컨테이너 외부 index.html 파일경로 /컨테이너내부경로 : 컨테이너 내부 index.html 파일경로 |
- 붉은색 : 명령어
- 대괄호[ ]를 포함한 검은색 : 예시 단어 (입력할때는 상황에 맞게 수정해야 합니다.)
이와 같이 도커는 개발자들이 프로젝트를 효율적으로 관리하고 실행할 수 있도록 도와주는 중요한 도구입니다. 환경 설정과 관련된 반복적인 작업을 최소화하고, 애플리케이션을 보다 쉽게 이동하고 관리할 수 있는 도커의 장점은 현대 소프트웨어 개발에서 중요한 역할을 하고 있습니다. 도커의 활용은 더 나은 개발 경험과 효율성 향상을 가져다주며, 이는 개발자들뿐만 아니라 전체적인 소프트웨어 개발 프로세스에 긍정적인 영향을 미칠 것으로 기대됩니다.
Docker에 대해 알게 되어 학습한 내용을 정리하였습니다. 앞으로 꾸준히 공부하며 내용 업데이트하도록 하겠습니다.
읽어주셔서 감사합니다. 😊
'AI 용어' 카테고리의 다른 글
LLM의 경량화와 성능 개선 방법에 대해 알아보자. (0) | 2024.05.29 |
---|---|
LLM 성능 평가에 대해서 알아보자. (0) | 2024.05.27 |
서버와 통신에 사용되는 FastAPI / RemoteRunnable에 대해 알아보자. (0) | 2024.05.23 |
AI 학습을 위한 기본 용어에 대해 알아보자 (2) | 2024.05.21 |
Fine-tuning과 RAG에 대해 알아보자. (0) | 2024.05.14 |