지난번 도커 설치 후에 나름 여유가 없었던거 같네요.^^;;
이제 다시 도커 공부를 시작할려고 합니다.
도커가 정상적으로 설치됐다고 간주하고 바로 시작하겠습니다.
■ 도커 개념
도커란 컨테이너를 기반으로 논리적으로
독립된 실행환경을 제공하는 가상화 도구입니다.
독립적이란 말은
OS나 하드웨어에 제약받지 않는다는 뜻입니다.
기존의 가상화 도구로 Vmware나 Virtualbox라는 가상머신을 아실거에요.
가상머신은 하드웨어만 가상화 할수 있었기때문에
OS(윈도우, 리눅스 등..) 를 꼭 먼저 설치해야만 필요한 프로그램들을 설치할수 있었습니다.
하지만
docker는 운영체재(OS) 수준으로 가상화 하기때문에
필요한 프로그램만 가상화하면 끝입니다.
이래서 너무 단순하고 가벼워 자원도 적게 차지하고 빠릅니다.
가상화 구현체인 이미지와 컨테이너 두가지 개념만 아시면
쉽게 접급할수 있을거에요.
♥ 이미지 , Image
프로그램 실행에 필요한 모든 파일들과 설정값들을 모아둔 파일입니다.
우리 알고 있는 이미지라면 흔히 사진을 디지털 형태의 파일로 만든거죠.
생각해 보면 디카로 사진 찍어 이미지를 만든다는것은
내가 담고 싶은 장면이 그대로 이미지에 그려지게 될거에요.
한번 만든 이미지는 복사를 아무리 많이 해도
처음 이미지를 만든 그 배경이나 장면(상태)은 절대 변화지 않습니다.
도커의 이미지 개념도 동일하다고 생각하시면 돼요.
도커 이미지를 만들었다면
어떤 경우에도 절대로 변화지 않고 동일하게 재사용할수 있습니다.
♥ 컨테이너 , container
이미지를 그대로 가져와 독립적인 실행환경을 만드는 기술입니다.
■ 도커 명령어 권한 주기
docker 명령어는 기본적으로 root 권한이 있어야 됩니다.
sudo docker 이렇게 docker 앞에 sudo라는 명령어를 사용하거나
root 계정으로 전환해야 원활하게 사용할수 있어요.
내 계정에서도 docker 명령어를 편하게 사용할수 있게 docker 그룹에 추가해주세요.
● 계정 권한 확인 [sidepower@localhost ~]$ id sidepower uid=1000(sidepower) gid=1000(sidepower) groups=1000(sidepower),10(wheel) ● docker 그룹 추가하기 [sidepower@localhost ~]$ sudo usermod -aG docker sidepower [sudo] sidepower의 암호: ● 계정 권한 재확인 [sidepower@localhost ~]$ id sidepower uid=1000(sidepower) gid=1000(sidepower) groups=1000(sidepower),10(wheel),972(docker) |
■ 도커 버전확인
root 계정 또는 sudo 명령어를 통해 도커를 설치하고 버전까지 정상적으로 확인했을거에요. 그 후에 사용자 계정(sidepower)으로 돌아와서 버전 체크를 해보니 이상하게 오류가 발생했습니다. /var/run/docker.sock 파일에 접근 권한(permission denied)이 없다고 표시되네요.^^;; [sidepower@localhost ~]$ docker version Client: Docker Engine - Community Version: 20.10.7 API version: 1.41 Go version: go1.13.15 Git commit: f0df350 Built: Wed Jun 2 11:56:24 2021 OS/Arch: linux/amd64 Context: default Experimental: true Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied ● 파일 권한 확인 [sidepower@localhost ~]$ ll /var/run/docker.sock srw-rw----. 1 root docker 0 7월 15 06:24 /var/run/docker.sock 리눅스 권한 설명 바로가기 ● 파일에 모든 사용자 읽고,쓰기 권한 주기 (666) [sidepower@localhost ~]$ su 암호: [root@localhost sidepower]# chmod 666 /var/run/docker.sock [root@localhost sidepower]# ll /var/run/docker.sock srw-rw-rw-. 1 root docker 0 7월 15 06:24 /var/run/docker.sock [root@localhost sidepower]# exit exit ● 다시 도커 버전 확인 Server 버전까지 보이는데요. [sidepower@localhost ~]$ docker version Client: Docker Engine - Community Version: 20.10.7 API version: 1.41 Go version: go1.13.15 Git commit: f0df350 Built: Wed Jun 2 11:56:24 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.7 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: b0f5bc3 Built: Wed Jun 2 11:54:48 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.6 GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d runc: Version: 1.0.0-rc95 GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7 docker-init: Version: 0.19.0 GitCommit: de40ad0 |
■ 도커 기본 명령어
많은 명령어와 옵셥들이 있지만 자주 사용하는 것만 정리를 했습니다.
◆ 이미지 다운로드
docker pull [이미지 이름]:[TAG]
TAG는 이미지 버전정보를 말하며
ubuntu 리눅스 다운로드 한다면
ubuntu:12.10 또는 ubuntu:14.02 처럼 버전을 지정하면 됩니다.
또 [latest]로 지정하면 최신버전을 다운로드 합니다.
◆ 이미지 목록 확인
docker images [OPTIONS] [REPOSITORY[:TAG]]
● 이미지 목록 확인 [sidepower@localhost ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 4 months ago 13.3kB ● ubuntu 리눅스 최선버전 도커 이미지 다운로드 [sidepower@localhost ~]$ docker pull ubuntu:latest latest: Pulling from library/ubuntu a31c7b29f4ad: Pull complete Digest: sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest ● 이미지 목록 확인 [sidepower@localhost ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest c29284518f49 39 hours ago 72.8MB hello-world latest d1165f221234 4 months ago 13.3kB |
◆ 이미지 삭제
docker rmi [OPTIONS] IMAGE [IMAGE...]
● 이미지 목록 확인 [sidepower@localhost ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest c29284518f49 42 hours ago 72.8MB hello-world latest d1165f221234 4 months ago 13.3kB ● 이미지 삭제 [sidepower@localhost ~]$ docker rmi hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 Deleted: sha256:f22b99068db93900abe17f7f5e09ec775c2826ecfe9db961fea68293744144bd ● 이미지 목록 확인 [sidepower@localhost ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest c29284518f49 42 hours ago 72.8MB |
◆ 컨테이너 목록 확인
docker ps [옵션]
● 실행중인 컨테이너 목록 확인 [sidepower@localhost ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 텅~~~~비어있음~ ● 실행중 또는 한번이라도 실행된 컨테이너 모두 확인(-a 옵션) [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 97412a74a48e hello-world "/hello" About an hour ago Exited (0) About an hour ago thirsty_ritchie 47e10e8e597b hello-world "/hello" About an hour ago Exited (0) About an hour ago zealous_wescoff |
◆ 컨테이너 실행하기
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
run 명령어로 이미지를 선택해서 컨테이너를 실행합니다.
그치만 이미지를 없을 경우에는 docker hub에 있는
동일한 이름의 이미지를 자동으로 다운로드해서 컨테이너로 실행시키 줍니다.
run은 pull + start 명령어를 합친거와 같습니다.
run 명령어에 자주사용하는 옵션
옵션 | 설명 |
-d | 백그라운드 모드 실행 . detached mode |
-name | 컨테이너 이름 지정 |
-rm | 프로세스 종료시 컨테이너도 자동 삭제 . 보통 1회성 처리 위해. |
-p | 포트 포워딩 . 호스트와 컨테이너 통신을 위한 포트번호 지정 |
-v | 호스트와 컨테이너 디렉터리 연결 . 컨테이너 불능시에도 데이타 보장 |
-e | 컨테이너 내부 환경 변수 지정 |
-it | 터미널 입력 가능 |
-link | 컨테이너 연결 |
● 옵션 없이 run 으로만 컨테이너 실행 실행하고 몇초뒤에 바로 끝나네요. STATUS를 보면 7초전에 Exited가 표시되죠. [sidepower@localhost ~]$ docker run ubuntu:latest [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0eb00394720 ubuntu:latest "bash" 9 seconds ago Exited (0) 7 seconds ago clever_morse 5344e4b92780 ubuntu:latest "bash" 2 hours ago Exited (0) 2 hours ago compassionate_beaver ● -it 옵션으로 ubuntu 리눅스 터미널로 들어갑시다. -it 옵션과 함께 쉘을 지정해 줘야 됩니다. 마지막 /bin/bash로 했습니다. [sidepower@localhost ~]$ docker run -it ubuntu:latest /bin/bash root@fcf3823a98ab:/# ▶ ubuntu 터미널 들어왔네요. 정말 ubuntu안으로 들어왔는지 확인해 볼게요. root@fcf3823a98ab:/# cat /etc/*release* DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS" NAME="Ubuntu" VERSION="20.04.2 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.2 LTS" VERSION_ID="20.04" root@fcf3823a98ab:/# exit exit [sidepower@localhost ~]$ ● 컨테이너 목록 확인 Exited로 3개 모두 종료되었지만 목록에서 사라지지 않고 계속 표시됩니다. 이처럼 컨테이너가 실행되면 -a 옵션으로 실행된 컨테이너를 모두 확인할수 있습니다. [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcf3823a98ab ubuntu:latest "/bin/bash" 4 minutes ago Exited (0) About a minute ago elated_antonelli d0eb00394720 ubuntu:latest "bash" 5 minutes ago Exited (0) 5 minutes ago clever_morse 5344e4b92780 ubuntu:latest "bash" 3 hours ago Exited (0) 3 hours ago compassionate_beaver ● 컨테이너 종료시 목록에서도 삭제되게 --rm 옵션 사용 [sidepower@localhost ~]$ docker run --rm -it ubuntu:latest /bin/bash root@3b868d4fb06f:/# cat /etc/issue Ubuntu 20.04.2 LTS \n \l root@3b868d4fb06f:/# exit exit ● 컨테이너 목록 확인 --rm 옵션으로 마지막 실행된 이력은 생기지 않았습니다. [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcf3823a98ab ubuntu:latest "/bin/bash" 6 minutes ago Exited (0) 3 minutes ago elated_antonelli d0eb00394720 ubuntu:latest "bash" 7 minutes ago Exited (0) 7 minutes ago clever_morse 5344e4b92780 ubuntu:latest "bash" 3 hours ago Exited (0) 3 hours ago compassionate_beaver [sidepower@localhost ~]$ |
◆ 컨테이너 이름 지정 실행
이전까지는 따로 이름을 지정하지 않았죠. ㅋ
지정하지 않으면 docker에서 아무 이름이나 유일하게 자동으로 지정합니다.
name 옵션으로 내가 원하는 이름으로 해보세요.
● 컨테이너 --name 옵션으로 myApp 이름 지정하기 [sidepower@localhost ~]$ docker run -it --name myApp ubuntu /bin/bash root@3b868d4fb06f:/# cat /etc/issue Ubuntu 20.04.2 LTS \n \l ● 컨테이너 목록 확인 [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a2afb7d38e ubuntu "/bin/bash" 28 seconds ago Up 26 seconds myApp |
◆ 종료된 컨테이너 실행하기
docker start [컨테이너 이름]
● 컨테이너 목록 확인 [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a2afb7d38e ubuntu "/bin/bash" 2 minutes ago Exited (0) 6 seconds ago myApp ● Exited 종료된 컨테이너 시작하기 [sidepower@localhost ~]$ docker start myApp myApp ● 컨테이너 목록 확인 Up은 기동되어 있다는 표시입니다. [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a2afb7d38e ubuntu "/bin/bash" 3 minutes ago Up 6 seconds myApp |
◆ 컨테이너 종료하기
docker stop [컨테이너 이름]
● 컨테이너 목록 확인 [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a2afb7d38e ubuntu "/bin/bash" 3 minutes ago Up 6 seconds myApp ● 컨테이너 종료하기 [sidepower@localhost ~]$ docker stop myApp myApp ● 컨테이너 목록 확인 [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a2afb7d38e ubuntu "/bin/bash" 3 minutes ago Exited (0) 4 seconds ago myApp |
◆ 컨테이너 재시작하기
docker restart [컨테이너 이름]
● 컨테이너 재시작하기 [sidepower@localhost ~]$ docker restart myApp myApp ● 컨테이너 목록 확인 [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a2afb7d38e ubuntu "/bin/bash" 3 minutes ago Up 5 seconds myApp |
◆ 컨테이너 접속하기
위에서는 run으로 실행할때 -it 옵션으로 /bin/bash쉘을 지정해서 컨테이너안으로 들어갔었죠.
attach 명령어를 통해 이미 실행된 컨테이너 내부로 바로 들어갈수 있습니다.
myApp 컨테이너는 ubuntu 리눅스이기때문에 /bin/bash로 접속해서 명령어를 실행할수 있습니다.
docker attach [컨테이너 이름]
[sidepower@localhost ~]$ docker attach myApp root@c9a2afb7d38e:/# cat /etc/issue Ubuntu 20.04.2 LTS \n \l |
◆ 외부에서 컨테이너 내부 명령어 실행하기
docker exec [컨테이너 이름] [명령어] [명령어 인자..]
도커 명령어중에 최고 잘 만든거 같아요.
운영중에 자주 사용하게 될거 같더라고요.ㅋ
번거롭게 컨테이너에 접속하지 않아도 바로 실행 결과를 볼수 있네요.^^
[sidepower@localhost ~]$ docker exec myApp cat /etc/issue Ubuntu 20.04.2 LTS \n \l [sidepower@localhost ~]$ |
◆ 컨테이너 삭제
docker rm 컨테이너 이름 또는 컨테이너 ID
[sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 97412a74a48e hello-world "/hello" About an hour ago Exited (0) About an hour ago thirsty_ritchie 0771fc73e905 hello-world "/hello" About an hour ago Exited (0) About an hour ago naughty_nash ● 컨테이너 이름으로 삭제 [sidepower@localhost ~]$ docker rm thirsty_ritchie thirsty_ritchie [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0771fc73e905 hello-world "/hello" About an hour ago Exited (0) About an hour ago naughty_nash ● 컨테이너 ID로 삭제 [sidepower@localhost ~]$ docker rm 0771fc73e905 0771fc73e905 [sidepower@localhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
감사합니다.
'IT > CLOUD' 카테고리의 다른 글
Dockerfile 만들기 . docker image 만드는법 build commit (2) | 2023.02.25 |
---|---|
쿠버네티스 설치 없이 웹에서 구축 연습하기 . Play with Kubernetes (2) | 2022.10.09 |
[클라우드] Cloud 꼭 배워야 하는 이유 . IaaS PaaS SaaS 개념정리 (0) | 2021.07.04 |
리눅스 CentOS8 Spark 3.0.2 설치하기 . 빅데이터 스파크란 (0) | 2021.03.06 |
리눅스 CentOS 8 도커 docker 설치하기 (172) | 2020.11.09 |
댓글