들어가기에 앞서, 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.04, 20.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 옵션: 마지막 로그부터 지정한 라인 수만큼 확인 가능
'Devlog > Docker' 카테고리의 다른 글
Docker란 무엇일까? 왜 사용할까? (0) | 2022.12.16 |
---|