도커 설치 및 기초

9258 단어 docker도커docker

저번 글에서 우분투환경의 VM을 만들었습니다.
도커는 리눅스 기반에서만 사용할 수 있기에 VM에서 도커를 설치해보겠습니다.

터미널을 키시고 명령어를 입력해주세요
(Ubuntu 20.04에서는 다음 코드만으로 바로 설치할 수 있습니다.)

$ sudo apt update && sudo apt install -y docker.io net -tools
$ sudo usermod -aG docker $USER

$ sudo reboot #서버 재시작


도커 기본 명령

컨테이너 실행

기본포맷

$ docker run <OPTIONS> <IMAGE>:<TAG> <CMD> <args>

이미지는 필수로 명시해야합니다.

예제

그럼 간단한 예제를 해보겠습니다.

$ docker run docker/whalesay cowsay 'hello world'

도커의 상징인 고래가 hello world라고 하네요.

docker run 이라는 명령 뒤에 실행하고자 하는 이미지(docker/whalesay)를 적고 마지막으로 컨테이너에 전달할 인자(cowsay 'hello world')를 지정합니다.

컨테이너를 실행하면 로컬에 docker/whalesay라는 이미지가 없어서 자동으로 이미지를 원격 저장소에서 가져옵니다.

도커 이미지 주소의 형식입니다.

<레지스트리 이름>/<이미지 이름> : <TAG>

레지스트리 주소는 도메인 주소 형식을 가지며 Default 값으로 docker.io 레지스트리를 사용합니다.
예제에서는 레지스트리가 생략되었으므로 docker.io가 되고, docker/whalesay가 이미지 이름, TAG는 생략되었습니다. TAG도 생략 시 Default 값으로 latest라는 TAG를 사용합니다.

docker/whalesay == docker.io/docker/whalesay:latest #결론은 같은 의미로 동작한다는 뜻입니다.

그렇다면 docker/whalesay 이미지에 다른 파라미터를 전달해보겠습니다.

$ docker run docker/whalesay echo hello

이번에는 cowsay가 아닌 echo명령어입니다. 해당 컨테이너는 파라미터로 어떤 인자를 전달하느냐에 따라 수행하는 명령이 달라집니다.


다음은 -d 옵션으로 컨테이너를 백그라운드로 실행해보겠습니다. 이번에 사용할 도커 이미지는 nginx라는 이미지입니다. 마찬가지로 로컬에 없기 때문에 원격 저장소에서 이미지를 가져옵니다.

$ docker run -d nginx


-d 옵션으로 컨테이너 실행시, CONTAINER_ID가 리턴이 됩니다.

CONTAINER_ID는 사용자마다 다릅니다.
docker ps를 통해 본인의 CONTAINER_ID를 확인할 수 있습니다.

nginx == docker.io/nginx:latest 	#nginx의 이미지 주소 형태입니다.

컨테이너 조회

실행한 컨테이너에 대해서 조회할 수 있습니다.

$ docker ps


컨테이너 상세정보 확인

컨테이너의 상세정보를 확인하기 위해서 다음 명령을 사용합니다.

$ docker inspect <CONTAINER_ID>


컨테이너의 상세정보들을 출력합니다.


컨테이너 로깅

컨테이너에서 출력되는 로그 기록을 확인할 수 있습니다.

$ docker logs <CONTAINER_ID>


-f는 follow output옵션입니다.

CTRL + C로 로깅을 종료합니다.


컨테이너 명령 전달

간혹 실행된 컨테이너에 새로운 패키지를 설치하거나 설정을 수정해야 하는 경우가 있습니다.
이런 경우에 exec명령을 이용하여 컨테이너 명령을 전달할 수 있습니다.

$ docker exec <CONTAINER_ID> <CMD>

exec 명령으로 nginx컨테이너에 wget을 설치하고 localhost로 요청을 보내겠습니다.


컨테이너 / 호스트간 파일 복사

실행한 컨테이너와 호스트 서버간에 파일을 주고받을 수 있습니다.

docker cp <HOST_PATH> <CONTAINER_ID>:<CONTAINER_PATH>

호스트서버의 /etc/passwd 파일을 컨테이너 내부의 /usr/share/nginx/html/ 위치로 복사합니다.

curl localhost/passwd요청으로 호스트의 파일이 컨테이너 내부로 복사된 것을 확인할 수 있습니다.


컨테이너에서 호스트로 파일복사

$ docker cp <CONTAINER_ID>:<CONTAINER_PATH> <HOST_PATH>


index.html이 제대로 복사가 된걸 확인할 수 있습니다.


컨테이너 중단

사용이 완료된 컨테이너를 중단합니다.

$ docker stop <CONTAINER_ID>

docker ps에는 보이지 않지만 -a 옵션을 통해서 종료된 컨테이너까지 확인할 수 있습니다.


컨테이너 재개

종료된 컨테이너를 다시 시작시킵니다.

$ docker start <CONTAINER_ID>


컨테이너 삭제

중단된 컨테이너를 완전히 삭제합니다.

$ docker rm <CONTAINER_ID>

컨테이너를 삭제 후에는 더이상 재개할 수 없습니다.
먼저 컨테이너를 중단하고 삭제합니다.


docker ps -a를 하더라도 nginx컨테이너가 조회되지 않는 것을 확인할 수있습니다.


Interactive 컨테이너

이미지 실행시, -it 옵션을 통해서 직접 컨테이너 안으로 접속하여 작업할 수도 있습니다.
-it은 interactive (stdin, stdout 연결), tty(터미널 연결)의 약자입니다.
ubuntu:16.04 이미지를 실행하여 bash쉘을 실행합니다.

$ docker run -it ubuntu:16.04 bash

$ cat /etc/os-release	#컨테이너 내부의 OS버전을 확인

$ exit 					#컨테이너 중지

exec -it 명령어를 사용하여 이미 생성한 컨테이너에도 접속이 가능합니다.

$ docker run -d nginx

$ docker exec -it <CONTAINER_ID> bash	#exec명령어로 bash접속


컨테이너 내부로 접속하는 일은 보통 디버깅, 임시로 패키지를 설치할 때 주로 사용합니다.

컨테이너는 휘발성 프로세스이기 때문에 컨테이너 내부의 파일시스템에 파일로 저장하더라도 컨테이너 삭제 시 모든 데이터가 사라집니다.
따라서 패키지를 설치하더라도 컨테이너를 종료하면 설치된 패키지가 없어집니다.

좋은 웹페이지 즐겨찾기