Tool/Docker

도커(Docker) 사용법 - 설치, 권한 설정, Bash, 기본 명령어

재은초 2024. 1. 18. 20:19
반응형

1. 리눅스에서 Docker 설치하기

$ sudo apt update
$ sudo apt install docker.io                      # 설치
$ docker --version                                # 버전 확인

 

2. 명령 방법

  • 항상 root 권한으로 docker <명령어> 형식으로 실행한다.
  • docker 명령은 root 권한으로 실행해야 하기 때문에 일반 계정에서는 항상 sudo를 사용해야 한다. 아니면 아래 방법으로 root 계정으로 전환하거나 그룹에 포함해 root 권한을 부여해준다.
$ sudo su                                     # root 계정으로 전환
$ sudo usermod -aG docker ${USER}             # 현재 계정을 docker 그룹에 포함
$ sudo systemctl restart docker               # 로그아웃한 뒤 다시 로그인
  • Docker가 리눅스 기반이기 때문에 이미지를 생성할 때 Bash(Bourne-again shell)를 주로 사용하므로, 아래 Bash 문법을 참고할 필요가 있다.
$ echo "hello" > ./hello.txt              # > : 출력
$ echo "world" >> ./hello.txt             # >> : 출력 + 추가
$ cat < ./hello.txt                       # < : 입력

$ hello="Hello World"                     # $ : 변수 설정
$ echo $hello

$ sudo docker rm $(docker ps -aq)         # $() : 명령 실행 결과를 변수화

$ sudo docker run \                       # \ : 한 줄로된 명령을 여러 줄로 표현할 때 사용
    -d \
    --name hello \
    busybox:latest

 

2. 주요 명령어

search : Docker Hub에서 이미지를 검색

$ docker search <검색어>
$ docker search ubuntu

push : 이미지 올리기

  • 로컬에 이미지 데이터 저장: Docker 저장소(Registry) 서버도 Docker Hub를 통해 Docker 이미지로 제공되므로, 먼저 Docker 레지스트리 이미지를 받는다.
$ sudo docker pull registry:latest                              # Docker 레지스트리 이미지 다운
$ sudo docker run -d -p 5000:5000 --name hello-registry \       # registry:latest 이미지를 컨테이너로 실행
    -v /tmp/registry:/tmp/registry \
    registry
  • 이미지를 올리기 위해서 태그를 먼저 생성한다.
$ docker tag <이미지 이름/아이디>:<태그> <Docker 레지스트리 URL>/<이미지 이름>:<태그>
$ docker tag hello:0.1 localhost:5000/hello:0.1              # hello:0.1 이미지를 localhost:5000/hello:0.1 태그로 생성
  • push 명령어로 이미지를 개인 저장소에 올린다.
$ docker push <Docker 레지스트리 URL>/<이미지 이름>:<태그>
$ docker push localhost:5000/hello:0.1           // localhost:5000/hello:0.1의 이미지를 개인 저장소에 올림

pull : 이미지 받기

$ docker pull <이미지 이름>:<태그>
$ docker pull ubuntu:latest

images : 이미지 목록 출력하기

  • -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력하고, 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력한다.
$ docker images

ps : 컨테이너 목록 확인하기

$ docker ps
$ docker ps -a

network ls: 네트워크 목록 확인하기

$ docker network ls

run : 컨테이너 생성하기

  • -i(interactive), -t(Pseudo-tty) 옵션을 사용하면 실행된 Bash 셸에 입력 및 출력을 할 수 있다.
  • --name 옵션으로 컨테이너의 이름을 지정할 수 있으며, 이름을 지정하지 않으면 도커가 자동으로 이름을 생성한다.
$ docker run <옵션> <이미지 이름/아이디> <실행할 파일>
$ docker run -i -t --name hello ubuntu /bin/bash    # ubuntu 이미지를 컨테이너로 생성 후 ubuntu내 /bin/bash 실행

start : 컨테이너 시작하기

$ docker start <컨테이너 이름/아이디>
$ docker start hello

restart : 컨테이너 재시작하기

$ docker restart <컨테이너 이름/아이디>
$ docker restart hello

attach : 컨테이너에 접속하기

$ docker attach <컨테이너 이름/아이디>
$ docker attach hello

exec : 외부에서 컨테이너 안의 명령 실행하기

  • 컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없다.
$ docker exec <컨테이너 이름/아이디> <명령> <매개 변수>
$ docker exec hello echo "Hello World"
Hello World

stop : 컨테이너 정지하기

$ docker stop <컨테이너 이름/아이디>
$ docker stop $(docker ps -aq)            # 모두 정지
$ docker stop hello

rm : 삭제하기

$ docker rm <컨테이너 이름/아이디>
$ docker rm $(docker ps -aq)            # 모두 삭제
$ docker rm hello
$ docker rm <네트워크 이름/아이디>

rmi : 이미지 삭제하기

$ docker rmi <이미지 이름/아이디>:<태그>
$ docker rmi $(docker images -aq)         # 모두 삭제
$ docker rmi ubuntu:latest                # ubuntu의 latest만 삭제
$ docker rmi ubuntu                       # ubuntu 이름을 가진 모든 이미지 삭제

history : 이미지 히스토리 살펴보기

  • Dockefile에 설정한 대로 히스토리가 생성된다.
$ docker history <이미지 이름/이미지>:<태그>
$ docker history hello:0.1

cp : 파일 꺼내기

$ docker cp <컨테이너 이름/아이디>:<경로> <호스트 경로>
$ docker cp hello-nginx:/etc/nginx/nginx.conf ./       # 현재 디렉터리에 nginx.conf 파일 복사

commit : 컨테이너의 변경사항을 이미지로 생성하기

  • -a 옵션으로 커밋한 사용자와 -m 옵션으로 커밋 로그 메시지를 설정한다.
$ docker commit <옵션> <컨테이너 이름> <이미지 이름/아이디>:<태그>
$ docker commit -a "Foo Bar <foo@bar.com>" -m "add hello.txt" hello-nginx hello:0.2

diff : 컨테이너에서 변경된 파일 확인하기

  • A는 추가된 파일, C는 변경된 파일, D는 삭제된 파일을 의미한다
$ docker diff <컨테이너 이름/아이디>

inspect : 세부 정보 확인하기

$ docker inspect <이미지 또는 컨테이너 이름/아이디>
$ docker inspect hello-nginx

 

 

 

 

반응형