Container System : 별도의 OS들을 필요로 하지 않기 때문에 효율적으로 작동, 별도의 OS 대신 Host OS에 접근하는 Container Engine이 필요
가장 유명한 Container Engine : Docker Engine
Docker는 기본적으로 Linux 기반으로 작동
그러나 Windows 및 MacOS에서도 작동 가능 (Docker가 알아서 Linux 환경을 설정)
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하거나
사용자 home Directory의 .vscode-server/ Directory를 삭제후 다시 Server에 접속한다.
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
# CUDA 11.8 및 PyTorch가 구성되어 있는 PyTorch 공식 Docker Image
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 Pi [IMAGE NAME] # 다운로드 받은 Image를 실행시켜 Pi라는 이름의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 Pi [IMAGE NAME] # docker pull + docker create + docker start
docker run -it --name Pi [IMAGE NAME] # docker pull + docker create + docker start + docker attach
# docker start는 기본이 Background 실행이지만 docker run의 경우 기본적으로 Foreground 실행이다.
# docker run을 Background로 실행하려는 경우 -d 옵션을 추가해준다.
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] # 원하는 Container를 Image로 저장
docker login # Docker Hub 계정 정보 입력
docker push [Docker Hub에서 만들어놓은 REPOSITORY NAME:원하는 TAG NAME] # 원하는 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