Welcome :っ)

Devlog/Docker

Docker 기본 명령어 정리

lazy.won 2022. 12. 20. 17:09
728x90
반응형

 

들어가기에 앞서, Docker는 OS의 자원을 사용하기 때문에, 기본적으로 root 권한으로 실행해야 한다.

따라서 일반 계정으로 접속 시 sudo를 앞에 붙여주어야 한다. 하지만, 매번 sudo를 입력하기 귀찮고 빠뜨릴 때도 많다. 

sudo를 입력하지 않는 아래 두 가지 방법이 있다.

 

1. 처음부터 root 계정으로 로그인하거나 root 계정으로 전환한다.

sudo su root

2. 현재 계정을 docker 그룹에 포함한다.

sudo usermod -aG docker ${USER}
sudo service docker restart

 

 


이미지 관련 명령어

Docker Hub에서 이미지 검색

sudo docker search <이미지 이름>

 

Docker Hub에서 이미지 받기

sudo docker pull <이미지 이름>:<태그> 형식이며, latest를 설정하면 최신 버전을 받는다. 

latest 대신 18.0420.04를 입력하여 태그를 지정해 줄 수 있다.

sudo docker pull <이미지 이름>:latest

 

로컬에 있는 Docker 이미지 목록 확인

이미지 목록을 출력하여 도커 이미지가 잘 받아졌는지 확인한다.

sudo docker images

 

Docker 이미지를 컨테이너로 생성한 뒤 bash 쉘 실행하기

docker run <옵션> <컨테이너 이름> <이미지 이름> <실행할 파일> 형식으로 작성하면 된다.

이미지 이름 대신 이미지 ID를 사용해도 된다. 

sudo docker run -it --name hello ubuntu /bin/bash
# ubuntu 이미지를 hello 컨테이너로 생성한 뒤 ubuntu 이미지 안의 /bin/bash 를 실행한다.
  • 이 명령어를 실행하면 Host OS와 완전히 격리된 공간이 생성된다. 이때, 우분투 이미지에서 /bin/bash 실행 파일을 직접 실행했기 때문에 여기서 exit으로 bash 쉘에서 빠져나오면(도커 -> HostOS) 컨테이너가 정지된다.
  • -i(interactive), -t(Pseudo-try) 옵션을 사용하면 실행된 Bash 쉘에 입력 및 출력을 할 수 있다.
    • -i : 사용자가 입출력을 할 수 있는 상태
    • -t : 가상 터미널 환경을 애뮬레이션 하겠다는 것
    • -d : 컨테이너를 일반 프로세스가 아닌 데몬 프로세스(백그라운드) 형태로 실행하여 프로세스가 끝나도 유지되도록 한다. 
  • -name 옵션으로 컨테이너 이름을 정할 수 있고, 이름을 지정하지 않으면 Docker가 자동으로 이름을 생성하여 지정한다.

 

Docker 이미지 삭제

sudo docker rmi <이미지 이름 or 이미지 ID>:<태그> 형식

sudo docker rmi ubuntu:latest
  • sudo docker rmi ubuntu 이런식으로 이미지 이름만 지정한다면 태그는 다르지만 ubuntu 이름을 가진 모든 이미지가 삭제된다.
  • sudo docker images로 확인 가능하다.

 


컨테이너 관련 명령어

Docker 컨테이너 목록 확인

sudo docker ps -a
  • -a 옵션을 사용하면 정지된 컨테이너까지 포함하여 모두 출력한다.
  • 아무 옵션 주지 않는 경우 실행 중인 컨테이너만 출력된다.

 

Docker 컨테이너 시작

sudo docker start <컨테이너 이름 or 컨테이너 ID> 형식

sudo docker start hello

 

Docker 컨테이너 재시작

sudo docker restart <컨테이너 이름 or 컨테이너 ID> 형식

sudo docker restart hello

 

시작한 Docker 컨테이너에 접속하기

sudo docker attach <컨테이너 이름 or 컨테이너 ID> 형식

sudo docker attach hello

 

컨테이너 실행

[run 명령어]

run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고, 없다면 Docker Hub에서 다운로드(pull) 한 후 컨테이너를 생성하고 시작한다. 

이때, 컨테이너는 정상적으로 실행되었지만, 만약 무엇을 해야 할지 명령어를 전달하지 않으면 컨테이너는 생성되자마자 종료된다. 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없다면 컨테이너는 종료된다

sudo docker run [옵션] <이미지 이름>:<태그> [명령어]
  • [옵션] 정리
    • -d : detached mode (백그라운드 모드)
    • -p : 호스트와 컨테이너 포트를 연결
    • -v : 호스트와 컨테이너의 디렉토리를 연결
    • -e : 컨테이너 내에서 사용할 환경변수 설정
    • --name : 컨테이너 이름 설정
    • --rm : 프로세스 종료 시 컨테이너 자동 제거. rm 옵션 주지 않으면 컨테이너가 종료되더라도 삭제되지 않고 남아있음.
    • -it : 터미널 입력을 위한 옵션
    • -network : 네트워크 연결

[exec 명령어]

exec 명령어는 run 명령어와 달리 실행 중인 도커 컨테이너에 접속할 때 사용한다. 컨테이너 안에 ssh server 등을 설치하지 않고 exec 명령어로 접속한다.  

 

외부에서 컨테이너 접속하여 컨테이너 내부 셸 실행

sudo docker exec -it <컨테이너 이름 or 컨테이너 ID> /bin/bash

 

컨테이너 빠져나오기

1. 컨테이너를 종료하면서 빠져나오기

exit 또는 ctrl+D

2. 컨테이너가 가동되는 상태를 유지하면서 접속만 종료하기

ctrl + P 입력 후 Q 입력

 

Docker 컨테이너 정지

sudo docker stop <컨테이너 이름 or 컨테이너 ID> 형식

sudo docker stop hello
  • sudo docker ps를 해보면 컨테이너를 정지했기 때문에 출력되지 않는다.

 

Docker 컨테이너 삭제

sudo docker rm <컨테이너 이름 or 컨테이너 ID> 형식

sudo docker rm hello
  • 컨테이너를 아예 삭제했기 때문에 sudo docker ps -a를 해도 출력되지 않는다.
  • -f 옵션을 주면 컨테이너를 강제 삭제한다.

 

Docker network create 명령어

도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만든다. 

예를 들어 <네트워크 이름>으로 컨테이너 mysql과 node가 통신할 네트워크를 만들 수 있다. 

sudo docker network create <네트워크 이름>

 

컨테이너 log 확인 명령어

컨테이너가 정상 동작하는지 로그를 통해 확인 가능하다. 

docker logs [옵션] <컨테이너 이름 or ID>
  • -f 옵션: 실시간으로 생성된 로그 계속 추적 가능
  • --tail 옵션: 마지막 로그부터 지정한 라인 수만큼 확인 가능

 

 

 

 

 

320x100
반응형

'Devlog > Docker' 카테고리의 다른 글

Docker란 무엇일까? 왜 사용할까?  (0) 2022.12.16