Container System : 별도의 OS들을 필요로 하지 않기 때문에 효율적으로 작동, 별도의 OS 대신 Host OS에 접근하는 Container Engine이 필요
가장 유명한 Container Engine : Docker Engine
Docker는 기본적으로 Linux 기반으로 작동
그러나 Windows 및 MacOS에서도 작동 가능 (Docker가 알아서 Linux 환경을 설정)
Container Tools (이전의 Docker Extension이 현재 Container Tools Extension으로 개편)
Visual Studio Code 내에서 쉽게 Docker Image 및 Container 관리 가능
Dev Containers
Visual Studio Code 내에서 쉽게 Container 내부로 접속하여 개발 가능
docker ps -a
와 같은 명령어가 sudo 권한으로만 실행된다면, 혹은
Docker가 정상적으로 설치되었고 실행중이나 Visual Studio Code Docker Extension에서
Is Docker installed and running?
다음과 같은 오류가 발생한다면, 아래의 명령어를 Terminal을 통해 실행한다.
sudo groupadd docker # docker Group 추가
sudo usermod -aG docker $USER # docker Group에 사용자 추가
grep docker /etc/group # docker Group에 사용자가 추가되었는지 확인
docker Group에 사용자가 추가되었지만 해당 오류가 지속적으로 발생한다면 Server Reboot 혹은 ~/.vscode-server/
삭제후 다시 Server 접속
# CUDA 11.8 및 PyTorch가 구성되어 있는 PyTorch 공식 Docker Image
docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
docker create --name sample_container pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
docker start sample_container
# 위의 세 명령어를 아래의 한 명령어를 통해 대체 가능
docker run --name sample_container pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
Docker Container를 생성했으면 원하는 Container를 골라 "Attach in New Window"
(자동으로 Container start)
apt update
apt dist-upgrade -y
apt install -y sudo vim nano git # 원한다면 다른 Packages도 함께 명시하여 설치
docker pull [IMAGE NAME] # Docker Hub(Registry)로부터 Image 다운로드
docker images # Docker Image 확인
docker rmi [IMAGE NAME] # Image 삭제
docker create --name [원하는 CONTAINER NAME] [IMAGE NAME] # 다운로드 받은 Image를 기반으로 원하는 이름의 Container를 생성
docker start [CONTAINER NAME or CONTAINER ID] # Container start
docker stop [CONTAINER NAME or CONTAINER ID] # Container stop
docker attach [CONTAINER NAME or CONTAINER ID] # Container 내부 접속
docker exec -it [CONTAINER NAME or CONTAINER ID] /bin/bash # docker attach와 유사, 메인 프로세스(docker attach)와는 독립적으로 동작하는 새로운 프로세스가 컨테이너 내에서 시작
docker run --name [CONTAINER NAME] [IMAGE NAME] # docker pull + docker create + docker start
docker run -it --name [CONTAINER NAME] [IMAGE NAME] # docker pull + docker create + docker start + docker attach
# docker start는 기본이 Background 실행이지만 docker run의 경우 기본적으로 Foreground 실행이다.
# docker run을 Background로 실행하려는 경우 -d 옵션을 추가해준다.
docker stats # 실행 중인 모든 컨테이너의 실시간 리소스 사용량 확인
docker stats [CONTAINER NAME or CONTAINER ID] # 실행 중인 특정 컨테이너의 실시간 리소스 사용량 확인
docker ps # Container 조회
docker ps -a # stop된 Container를 포함한 모든 Container 조회
docker rm [CONTAINER NAME or CONTAINER ID] # Container 삭제
docker rm --force [CONTAINER NAME or CONTAINER ID] # Container 강제 삭제
docker start [CONTAINER NAME or CONTAINER ID] # Container start
docker stop [CONTAINER NAME or CONTAINER ID] # Container stop
docker ps # Container 조회
docker ps -a # stop된 Container를 포함한 모든 Container 조회
docker logs -f [CONTAINER NAME or CONTAINER ID] # Container log 보기
docker history [IMAGE NAME] # 이미지가 어떻게 생성되었는지, 각 레이어가 어떤 명령어에 의해 추가되었는지 등의 정보를 확인
docker commit [CONTAINER NAME or CONTAINER ID] [생성할 IMAGE NAME:TAG] # 원하는 Container를 Image로 저장
docker tag [생성된 IMAGE NAME:TAG] [YOUR_DOCKER_ID]/[REPOSITORY NAME:TAG] # Docker Hub에 올릴 이름으로 태그를 지정
docker login # Docker Hub 계정 정보 입력
docker push [YOUR_DOCKER_ID]/[Docker Hub에 Upload 할 REPOSITORY NAME:TAG] # 원하는 Image를 Docker Hub에 Upload
docker run --name [CONTAINER NAME] -p 8080:80 httpd # Port Forwarding : Host - Container
docker run -p 8000:80 -v C:\Users\username\Desktop\htdocs\:/usr/local/apache2/htdocs/ httpd # Host와 Container의 File System 연결
<참고>
생활코딩 Docker 입문 수업 Youtube 강좌
https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf