도커를 편하게 다루기 위해 Kitematic 이라는 도구가 있지만 CLI 기준으로 정리한다.
(Windows, Mac, Linux 등 OS에 상관없이 도커의 CLI를 사용하는 방법은 전부 동일)
1. 컨테이너 생성
● 도커 엔진 버전 확인
[root@localhost ~]# docker -v
Docker version 20.10.6, build 370c289
도커는 다양한 기능이 빠르게 업데이트되고 새로운 버전이 배포되므로 사소한 버전차이로 중요한 기능을 사용하지 못 할 수도 있기 때문에 설치된 도커 엔진의 버전을 확인하는 것은 중요하다.
● 도커 컨테이너 생성
(1) docker run
[root@localhost ~]# docker run -i -t ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
0551a797c01d: Pull complete
512123a864da: Pull complete
Digest: sha256:4a8a6fa8810a3e01352981b35165b0b28403fe2a4e2535e315b23b4a69cd130a
Status: Downloaded newer image for ubuntu:14.04
root@aad16506e16e:/#
ubuntu:14.04 이미지가 로컬에 존재하지 않아 도커 중앙 이미지저장소인 도커 허브에서 자동으로 이미지 다운로드한다.
i 옵션 : 상호 입출력을 가능케 한다.
t 옵션 : tty를 활성화 하여 bash 쉘을 사용하도록 컨테이너를 설정한다.
위 두 옵션(-i -t) 중 하나라도 사용하지 않으면 쉘 환경을 정상적으로 이용할 수 없다.
run 명령으로 컨테이너를 생성하면 생성 및 실행과 동시에 컨테이너 내부로 들어온다.
컨테이너에서 기본 사용자는 root가 되고 호스트이름은 무작위 16진수 해시값(해당 호스트의 고유 ID)이 된다.
(2) docker create
[root@localhost ~]# docker create -i -t --name socentos centos:7
1f799c0834f7a71e67070f2eed6e928b65b2726102178aee9f99611b2ee719bc
컨테이너 생성 시 run 말고도 create 명령어를 사용할 수 있다.
name 옵션 : 컨테이너의 이름을 설정한다.
create 명령 결과로 출력된 값(1f799....)은 무작위 16진수 해시값이며 컨테이너의 고유 ID가 된다.
이 해시값(고유 ID)은 docker inspect 명령어로 확인할 수 있다.
또한 run 과 달리 create 명령은 컨테이너 생성만 할 뿐 내부로 들어가지 않는다.
run 명령 : pull (이미지없을 시) => create => start => attach(-i -t 옵션 시)
위 과정이 한꺼번에 포함된다.
create 명령 : pull(이미지없을 시) => create. 이 두가지 과정만 진행한다.
● 컨테이너 시작/진입
[root@localhost ~]# docker start socentos
socentos
[root@localhost ~]# docker attach socentos
[root@1f799c0834f7 /]#
socentos 라는 컨테이너를 start 로 시작했고 attach 로 진입하였다. (root@고유ID로 변경된 것 확인)
[root@localhost ~]# docker attach socentos
[root@1f799c0834f7 /]# read escape sequence
[root@localhost ~]# docker attach 1f7
[root@1f799c0834f7 /]#
read escape sequence 는 ctrl+P,Q 로 빠져나와 출력되는 내용이다.
위 처럼 고유ID 의 해시값 초기 2~3문자만 입력하여 진입(attach)해도 가능하다.
● 컨테이너를 빠져나오는 방법
exit / ctrl+D : 컨테이너를 빠져나옴과 동시에 컨테이너를 정지시킴
ctrl+P, Q : 컨테이너를 정지하지 않고 빠져나옴 (애플리케이션 개발목적으로 컨테이너를 사용할 땐 이 방법을 많이 씀)
● 이미지 내려받기
[root@localhost ~]# docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
pull 명령은 도커 공식저장소에서 이미지를 다운받는다.
위 명령은 centos:7 이미지를 다운로드 한 것이다.
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 13b66b487594 2 weeks ago 197MB
centos 7 8652b9f0cb4c 5 months ago 204MB
위 명령으로 도커 엔진에 존재하는 이미지의 목록을 알 수 있다.
● 도커 컨테이너 목록 확인
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f799c0834f7 centos:7 "/bin/bash" About an hour ago Up About a minute socentos
aad16506e16e ubuntu:14.04 "/bin/bash" About an hour ago Exited (0) About an hour ago pensive_visvesvaraya
ps에 a 옵션을 주면 정지된 컨테이너 까지 포함되서 출력해준다.
CONTAINER ID : 컨테이너에 자동으로 할당되는 고유한 ID. 위에선 일부분만 출력되지만 [ docker inspect 컨테이너이름 | grep Id ] 로 검색하면 전체ID 확인 가능하다.
IMAGE : 컨테이너 생성 시 사용된 이미지
COMMAND : 컨테이너가 시작될 때 실행될 명령어
#docker run -i -t ubuntu:14.04 echo hello world! 라고 하면 컨테이너는 실행될 때 마다 echo hello world! 를 실행함. 하지만 이미지에 내장된 커맨드인 /bin/bash 를 덮어쓰기 때문에 상호 입출력이 가능한 쉘이 실행되지 않아 hello world! 만 출력하고 컨테이너가 종료된다.
CREATED : 컨테이너가 생성되고 난 뒤 흐른 시간
STATUS : 컨테이너의 상태( 실행중 : Up / 종료 : Exited / 일시중지 : Pause )
PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트를 나열
NAMES : 컨테이너의 고유한 이름. 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커엔진이 임의로 형용사와 명사를 무작위로 조합해 이름을 설정
● 컨테이너 삭제
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f799c0834f7 centos:7 "/bin/bash" About an hour ago Up 10 minutes socentos
aad16506e16e ubuntu:14.04 "/bin/bash" 2 hours ago Exited (0) About an hour ago pensive_visvesvaraya
[root@localhost ~]# docker rm aad
aad
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f799c0834f7 centos:7 "/bin/bash" About an hour ago Up 10 minutes socentos
한번 삭제한 컨테이너는 복구가 불가하다.
실행중인 컨테이너는 삭제할 수 없으믈 ㅗ정지시키거나 강제 옵션을 주어 삭제해야 한다.(rm -f)
docker container prune
docker stop $(docker ps -a -q) 한 다음 docker rm $(docker ps -a -q)
위 명령은 모든 컨테이너를 삭제하는 명령이다.
'docker' 카테고리의 다른 글
도커 컨테이너 다루기(4) - 도커 네트워크 (0) | 2021.05.26 |
---|---|
도커 컨테이너 다루기(3) - 도커 볼륨 (0) | 2021.05.25 |
도커 컨테이너 다루기(2) - 컨테이너 외부 노출 (0) | 2021.05.24 |
CentOS 7 + 도커 설치 (0) | 2021.04.16 |
docker란? (0) | 2021.04.16 |