도커 설치 및 기초
저번 글에서 우분투환경의 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 <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접속
컨테이너 내부로 접속하는 일은 보통 디버깅, 임시로 패키지를 설치할 때 주로 사용합니다.
컨테이너는 휘발성 프로세스이기 때문에 컨테이너 내부의 파일시스템에 파일로 저장하더라도 컨테이너 삭제 시 모든 데이터가 사라집니다.
따라서 패키지를 설치하더라도 컨테이너를 종료하면 설치된 패키지가 없어집니다.
Author And Source
이 문제에 관하여(도커 설치 및 기초), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yoongyum/도커-설치-및-기초저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)