[Docker] 설치, 명령어 정리

whatSup CheatSheet·2022년 9월 29일
0

Container

목록 보기
2/9
post-thumbnail

Docker 설치(Ubuntu22.04)

본 설치는 docker docs를 따라갑니다.

  • (만약 이전 버전이 설치되어 있다면) 다음 명령어로 이전 버전을 삭제합니다.
sudo apt-get remove docker docker-engine docker.io containerd runc
  • apt 패키지 인덱스를 업데이트하고, 필요한 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  • 도커의 GPG키를 추가합니다.
 sudo mkdir -p /etc/apt/keyrings
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • 다운로드를 위해 repository를 바라보게 합니다.
 echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 도커 엔진을 설치합니다.
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 다음 명령어를 실행시켜, root유저가 아닌 유저에게도 docker 관련 명령을 수행할 수 있는 권한을 부여합니다.
sudo usermod -a -G docker $USER
sudo service docker restart
  • 다음 명령어를 실행시켜, 정상적으로 설치되었는지 확인합니다.
docker --help

Docker의 기본적인 명령어

  • docker 커맨드 --help : 커맨드에 대한 도움말을 출력합니다.

docker search [OPTIONS] TERM

  • 도커 이미지를 검색합니다.
  • ex) docker search nginx

docker pull

docker pull [OPTIONS] NAME:TAG

  • Docker image repository로부터 Docker image를 가져옵니다.
  • ex) docker pull ubuntu:20.04

    Public한 repository(ex. docker hub) 대신 private 한 repository에서 이미지를 가져오는 경우.

    • docker login을 통해서 특정 repository를 바라보도록 한 뒤, docker pull을 수행하는 형태로 사용합니다.

docker images

docker images [OPTIONS] [REPOSITORY[:TAG]]

  • 로컬에 있는 docker image 리스트를 출력합니다.
  • ex) docker images

docker ps

docker ps [OPTIONS]

  • 현재 실행 중인 도커 컨테이너 리스트를 출력합니다.
  • 옵션
    • -a : 실행 중이지 않은 컨테이너를 포함하여 전체 목록을 출력
    • --no-trunc : 컨테이너 ID 전체를 보여줌
  • ex) docker ps -a

docker create

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

  • 도커 컨테이너를 생성 합니다.
    • 옵션은 아래 run과 비슷합니다.

docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • 도커 컨테이너를 생성 & 실행시킵니다(create & start).
  • 옵션
    • --name ubuntu-test : 컨테이너 이름(id가 아님)
      • 지정하지 않으면 랜덤으로 생성됨
    • -d : 데몬(백그라운드)모드
      • 컨테이너의 커맨드를 백그라운드 형태로 실행
      • 도커의 컨테이너를 실행한다는 것은 HOST OS에서 프로세스를 실행하는 것과 동일한 개념임. 따라서 이 설정을 하지 않으면 현재 실행하는 셸 위에서 컨테이너가 실행되고, 컨테이너 로그를 바로 볼 수 있으나 컨테이너를 나가면 실행이 종료됨
    • -it: -i + -t 옵션. 컨테이너를 실행함과 동시에 interactive한 terminal로 접속시켜주는 옵션
    • -p 8888:8888 : 포트 지정
      • 로컬호스트 포트->(=:)컨테이너 포트 형태로, 로컬 포트 8888으로 접근 시 컨테이너 포트 8888으로 연결되도록 설정
        • 로컬 호스트: 우리 컴퓨터
        • 컨테이너: 컨테이너 이미지 내부
    • -e MYSQL_ROOT_PASSWORD=1234 : 환경변수 설정
      • 사용하는 이미지에 따라 설정이 다름
      • (예를 들어) MYSQL은 root계정의 비밀번호를 생성함
        • --env-file=파일로 특정 환경변수 파일을 호출해서 설정도 가능
    • --rm : 컨테이너가 종료되면 자동으로 제거
    • -w / --workdir : 컨테이너의 작업 디렉토리를 설정 -> 명령어를 실행할 곳(-w에 선언한 공간이 최우선적으로 기본 작업 공간이 됨)
    • --restart : 재시작 관련 옵션을 설정합니다.
      • --restart no : 재시작하지 않음
      • --restart on-failure : STATUS가 Exited(0)이 아닐 경우 재시작
      • --restart always : 항상 재시작
    • 리소스 사용량 제약 관련
      • --gpus all : 컨테이너에서 최대로 사용 가능한 gpu의 수 지정(모두 사용)
      • --cpus 0.5 : 컨테이너에서 최대로 사용 가능한 cpu의 수 지정(50%만 사용)
      • -m / --memory : 메모리 사용량 제한
  • ex) docker run -it --name test1 ubuntu:20.04 /bin/bash (/bin/bash는 컨테이너를 실행시킴과 동시에 실행할 커맨드(bash 터미널 켬))

docker attach

docker attach [OPTIONS] CONTAINER

  • 현재 실행되고 있는 컨테이너에 접속하는 명령어입니다.
    • 정확히는 컨테이너의 현재 Host OS shell의 stdin, stdout, stderr을 docker 컨테이너에 붙이는 명령입니다.
    • 즉, 인터렉티브 쉘(-it)이 백그라운드(-d) 모드로 돌아가고 있는 곳에 붙는다는 의미입니다.
    • 따라서 exit로 종료시 백그라운드로 돌아가고 있는 것이 종료됩니다.
      (Ctrl+P, Ctrl+Q를 순차적으로 눌러 실행 상태를 유지한 채로 빠져나올 수도 있습니다.)
  • 웹서버와 같이 백그라운드에서 실행되는 container에 attach로 접속하면 커맨드는 입력할 수 없고 로그만 볼 수 있습니다.

docker exec

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

  • Docker 컨테이너 내부에서 새로운(추가) 명령(프로세스)을 내리거나(외부 -> 내부), 내부로 접속하는 커맨드입니다.
    • 예를 들어 /bin/bash
  • ex)
    docker run -it -d --name test2 ubuntu:20.04
    : -d옵션으로 실행시키고 ps로 확인하면, 아래와 같이 잘 돌아가고 있음을 알 수 있습니다.

    docker exec -it test2 /bin/bash
    : 아래와 같이 container 내부로 접속된 것을 확인할 수 있습니다.

docker logs

docker logs [OPTIONS] CONTAINER

  • 도커 컨테이너의 log를 확인합니다.
    • -f: 계속 지켜보며 log를 출력
    • -tail n: 마지막 n줄 만큼의 로그를 출력

docker stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]

  • 실행 중인 컨테이너를 중단합니다.
  • ex) docker stop test2 docker ps -a

docker pause / docker unpause

docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]

  • 컨테이너를 일시중지 / 재실행 시킵니다.
  • docker stop은 실행 중인 모든 프로세스를 KILL하지만, pause는 실행 중인 프로세스를 일시중지 합니다.
    • pause는 컨테이너가 일시 중지된 동안 메모리를 계속 유지합니다.

docker start

docker start [OPTIONS] CONTAINER [CONTAINER...]

  • 중지된 컨테이너를 (다시)실행시킵니다.

docker rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]

  • (중지된) 도커 컨테이너를 삭제합니다.
    • -f로 실행중인 컨테이너도 삭제할 수 있습니다.
  • ex) docker rm test1 docker rm test2 docker ps -a

prune

  • docker container prune : 종료된 컨테이너를 모두 삭제합니다.
  • docker image prune: (default)dangling된 이미지들을 모두 삭제합니다.
    • dangling된 이미지 : 이미지에 이름이 없는 상태
      (ex. 같은 이름으로 도커 이미지를 여러 번 빌드 시, 새로운 이미지가 기존 이미지의 이름을 뺐음)
    • docker image prune -a 명령어를 사용하면, 컨테이너에서 사용하고 있지 않는 이미지를 모두 제거합니다.
  • docker volume prune : 컨테이너와 연결되어 있지 않는 모든 볼륨을 삭제합니다.
  • docker network prune : 컨테이너에서 사용하지 않는 네트워크를 삭제합니다.
    docker system prune : 도커 오브젝트에서 사용하지 않는 것들을 삭제합니다.

docker rmi

docker rmi [OPTIONS] IMAGE [IMAGE...]

  • 도커 이미지를 삭제합니다.
  • ex) docker rmi hello-world

docker stats

docker stats [OPTIONS] [CONTAINER...]

  • 실행 중인 컨테이너의 상태와 사용 중인 리소스를 확인합니다.

docker cp

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

  • 컨테이너와 호스트 간 파일을 복사합니다.
  • ex)
# 복사할 대상(host) : /home/whattsup/Documents/cp-test
# 복사받을 대상(container 'test_container') : /home/testuser/Documents
docker cp /home/whattsup/Documents/cp-test test_container:/home/testuser/Documents

docker inspect

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

  • 자세한 정보를 출력합니다.
  • 구동중인 컨테이너 정보 출력 : docker inspect <container-id>
  • 볼륨 정보 출력 : docker volume inspect <volume-name>
  • 네트워크 정보 출력 : docker network inspect <network-name>
profile
AI Engineer : Lv 0

0개의 댓글