도커에 대해서 공부한 내용을 정리하려고 합니다. 본 내용은 처음 도커를 공부하시거나 왜 도커를 배워야하는지에 대해 의문점이 있으시다면 한번 보시면 좋을 것 같습니다. 잘못된 내용이나 궁금하신 점은 댓글로 작성해주시면 감사드립니다.
도커 이미지
도커 이미지
는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념입니다. 이미지는 도커 명령어로 내려받을 수 있으므로 별도로 설치할 필요는 없습니다. 도커에서 사용하는 이미지의 이름은 기본적으로 [저장소 이름]/[이미지 이름]:[태그]
의 형태로 구성됩니다.
- 저장소(Repository) 이름은 이미지가 저장된 장소를 의미합니다. 저장소의 이름이 명시되지 않은 이미지는 도커에서 기본적으로 제공하는 이미지 저장소인 도커 허브(Docker Hub)의 공식(Official) 이미지를 뜻합니다.
- 이미지 이름은 해당 이미지가 어떤 역할을 하는지 나타냅니다. 이미지의 이름은 생략할 수 없으며 반드시 설정해야 합니다.
- 태그는 이비지의 버전 관리, 혹은 리비전(Revision) 관리에 사용합니다.
도커 컨테이너
이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립공간이 생성되고, 이것이 바로 도커 컨테이너가 됩니다. 대부분의 도커 컨테이너는 생설될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지고 있기 때문에 도커 이미지의 목적에 맞도록 사용되는 것이 일반적입니다. 예를 들어 웹 시스템을 구축한다면 화면을 보여주는 컨테이너, 데이터베이스를 관리하는 컨테이너, 검색 엔진용 컨테이너 등으로 컨테이너를 나누어 구축하게 됩니다.
도커 컨테이너 다루기
도커를 사용하기전에는 항상 설치된 도커 엔진의 버전을 확인합니다.
도커는 다양한 기능이 빠르게 업데이트되고 새로운 버전이 배포되므로 설치된 도커 엔진을 확인하는 것은 매우 중요합니다. 사소한 버전의 차이로 도커의 중요한 기능을 사용하지 못할 수도 있기 때문입니다. 새로운 PC 또는 서버에서 도커를 사용한다면 먼저 버전을 확인하는 것이 좋습니다.
docker run
명령어로 컨테이너를 생성할 때 -i 옵션으로 상호 입출력을, -t 옵션으로 tty를 활성화해서 배시(bash) 셸을 사용하도록 컨테이너 설정이 가능합니다. docker run
명령어에서 이 2가지 옵션 중 하나라도 사용하지 않으면 셸을 정상적으로 사용할 수 없습니다. 컨테이너 내부에서 빠져나오는 방법은 exit
를 입력하거나 Ctrl+D
를 동시에 입력하는 것입니다. 그러나 이 방법은 동시에 컨테이너를 정지시킵니다.
다른방법은 컨테이너를 정지하지 않고 빠져나오는 것으로 Ctrl+P, Q
를 입력하는 것입니다. 단순히 컨테이너의 셜에서만 빠져나오기 때문에 컨테이너 애플리케이션을 개발하는 목적으로 사용할 때는 이 방법을 많이 사용합니다.
컨테이너를 생성할 때는 run 명령어가 아닌 create
명령어를 사용할 수도 있습니다. 다음 명령어를 입력해 centos:7 이미지로 컨테이너를 생성합니다. --name
옵션에는 컨테이너의 이름을 설정합니다. 여기서는 study-docker로 설정합니다.
도커에서 run 명령어와 create 명령어에는 차이가 있습니다. run 명령어는 pull, create, start 명령어를 일관적으로 실행한 후 attach가 가능한 컨테이너라면 컨테이너 내부로 들어갑니다. 그러나 create 명령어는 도커 이미지를 pull한 뒤에 컨테이너를 생성만 할 뿐 start, attach를 실행하지 않습니다. 따라서 보통 컨테이너를 생성함과 동시에 시작하기 때문에 run 명령어를 더 많이 사용합니다.
기본적인 도커 엔진 명령어 정리
도커 이미지 관련
$ docker images
: 이미지 목록 보기$ docker search [이미지 이름]
: 이미지 검색$ docker pull [이미지 이름]:[버전]
: 이미지 받기- 버전: latest 를 쓰면 최신 버전으로 받을수 있다.
$ docker rmi [이미지 id]
: 이미지 삭제$ docker rmi -f [이미지 id]
: 이미지 삭제- 컨테이너를 삭제하기 전에 이미지를 삭제 할때, -f 옵션을 붙어면 컨테이너도 강제 삭제가 가능하다.
$ docker image prune
: 사용하지 않는 이미지 삭제$ docker image prune -a
: 사용하지 않는 이미지를 모두 삭제$ docker image prune -f
: 사용하지 않는 이미지를 강제로 삭제
도커 컨테이너 관련
$ docker ps
: 실행중인 컨테이너 목록 보기$ docker run [options] image[:TAG|@DIGEST] [COMMAND] [ARG...]
: 컨테이너 실행- ex)
$ docker run -i -t --name server ubuntu:latest /bin/bash
- ex)
옵션 | 설명 |
---|---|
d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 (컨테이너의 표준 입력과 로컬 컴퓨터의 키보드 입력을 연결) |
–rm | 프로세스 종료시 컨테이너 자동 제거 |
–link | 컨테이너 연결 [컨테이너 명:별칭] |
$ docker container rename [이전이름] [신규이름]
: 컨테이너 이름변경$ docker start [컨테이너 id 또는 name]
: 컨테이너 시작$ docker restart [컨테이너 id 또는 name]
: 컨테이너 재시작$ docker attach [컨테이너 id 또는 name]
: 컨테이너 접속$ docker stop [컨테이너 id 또는 name]
: 컨테이너 정지- Bash Shell에서
exit
또는Ctrl + D
를 입력하면 컨테이너가 정지된다. Ctrl + P
,Ctrl + Q
를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서 빠져나온다.
- Bash Shell에서
$ docker rm [컨테이너 id 또는 name]
: 컨테이너 삭제
sudo 없이 Docker 명령어 쓰기
$ sudo usermod -aG docker $USER
: 현재 접속중인 사용자에게 권한주기$ sudo usermod -aG docker your-user
: your-user 사용자에게 권한주기
Tip
컨테이너를대상으로 하는 모든 명령어는 컨테이너 이름 대신 ID를 쓸 수 있습니다. ID의 이름이 너무 길 때는 앞의 2~3자만 입력해도 됩니다. (같은 앞자리가 있다면 에러가 발생하니 적절히 3~4자를 입력하세요!)