2024.09.15 - [DevOps/Docker] - [DOCKER] Docker 아키텍처
이제 도커와 관련된 일반적인 명령어들을 살펴보자.
> Docker Hub(Registry)에서도 많은 이미지를 볼 수 있고, 이전에 설치했던 EC2에서 CLI로 볼 수도 있다.
> 이 곳에서 명령어를 포함한 많은 정보를 얻을수 있다.
컨테이너 이미지 관리 명령어
- 이미지 검색 : docker search (docker hub에서만 검색된다)
- 이미지 다운로드 : docker pull
- 이미지 목록 보기 : docker images
- 이미지 히스토리 보기(레이어 정보) : docker history
- 이미지 세부 정보 보기 : docker inspect
- 이미지 삭제 : docker rmi
컨테이너 조작 명령어
- 컨테이너 생성 : docker create
- 컨테이너 실행 : docker start
- 컨테이너 종료 : docker stop
- 컨테이너 강제 종료 : docker kill
- 컨테이너 삭제 : docker rm
- 컨테이너 실행 : docker run (create + start)
- 컨테이너 목록보기 : docker ps
- 컨테이너 세부 정보 확인 : docker inspect
동작중인 컨테이너 관리
- 컨테이너 내부 명령어 실행 : docker exec [컨테이너 이름] [실행 명령어]
- 컨테이너 프로세스 목록 보기 : docker top [컨테이너 이름]
- 컨테이너 로그 보기 : docker logs [컨테이너 이름]
- 컨테이너 내부 파일 복사 : docker cp [filename] [컨테이너 이름:/파일이름]
- 컨테이너 내부 파일 변경 이력 확인 (read/write 레이어에서) : docker diff [컨테이너 이름]
컨테이너 Registry 관리
- 이미지 빌드 : docker build
- 이미지 태그 설정 : docker tag
- Registry 로그인 : docker login
- Registry 로그아웃 : docker logout
- 이미지를 아카이브 파일로 저장 : docker save
- 아카이브 파일을 이미지로 로드 : docker load
- 이미지 내보내기 : docker export
- 이미지 가져오기 : docker import
위에 나열한 기본적인 명령어를 바탕으로 여러가지 테스트를 진행한다.
원하는 컨테이너 조회
> /(슬래시) 앞에 글자가 있다면 공식적인 것이 아니라 개인이 따로 만든 이미지 이다.
> 메뉴바에 Trusted Content라는 메뉴가 있다. 이 세가지중 하나에 해당한다면 믿고 쓸 수 있다.
> 무조건 official 이미지를 사용하자!!
docker search --filter=stars=3 --no-trunc busybox
> 별 점수가 3개 이상, 설명 줄임표 없는 이미지 출력 예시
컨테이너 이미지 다운로드
> /var/lib/docker/overlay2 디렉토리에 받은 이미지 저장
> 초기세팅은 아무것도 없음
> busybox를 pull 해서 다운 받았는데, 해시값이 보임
> 해시값: Pull complete 메시지 하나당 레이어가 한개씩 있다는 의미
docker images
> 태그(버전)가 같다면 동일 이미지가 유지된다.
> TAG는 다르게 보이지만 실제 docker hub에 현재 기준(2024.09.16) nginx의 latest는 1.27 태그 이므로 IMAGE ID가 동일한것을 확인 할 수있다.
gallery.ecr.aws Registry
hub.docker.com 에서만 이미지를 다운받을수 있는게 아니다. AWS에서도 이런 컨테이너 기반 서비스를 제공한다.
> 사이트 접속후 apache(nginx와 같은 웹 서버) 검색
> bitnami/apache 클릭 (bitnami에서 만들어진 container는 trust container임)
> Copy
> docker pull [복사한 이미지]
> Registry 마다 이름이 다르게 운영되는걸 확인
docker inspect busybox
> 이미지 세부정보 보기
> Layer 등의 다양한 정보 확인 가능
docker history nginx
> 컨테이너가 어떻게 만들어졌는지 확인
> <missing> 이라고 표시된 부분이 Base Image
docker rmi [이미지 이름]
> 리소스 삭제해서 디스크 공간 확보
컨테이너 관리
- 컨테이너는 읽기전용의 이미지 레이어(불변의 Union File System(UFS)) + 읽기/쓰기 가능한 컨테이너 레이어를 결합
- 컨테이너 생성 (create) : 컨테이너 레이어 생성
- 컨테이너 실행 (start)을 하면 격리된 환경에서 프로세스로 동작
cd /var/lib/docker/overlay2
> 레이어 관리 디렉토리로 이동
docker create --name web nginx
> 컨테이너 생성
> 컨테이너 레이어 생성 확인
> 컨테이너를 실행한적은 없다. 다만 생성 했을 뿐
- 실행 하고 있지 않은 모든 컨테이너를 보고 싶다면?
docker ps -a
> -a 옵션
docker start [컨테이너 이름 OR CONTAINER ID]
> 프로세스로 동작 확인
> PORTS 열림
Container의 6가지 Isolation
PID, Network[IP address], Host[hostname], Mount, User, IPC(Shared Memory)
- 그렇다면 컨테이너의 IP 주소는 어떻게 찾지?
docker inspect [컨테이너 이름]
> IP 주소 확인
> curl 명령으로 nginx 컨테이너 접속
docker stop web
> Exited(0) : 정상종료 되었다는 의미
docker rm [컨테이너 이름]
> 레이어가 다시 줄어든것을 확인
Docker run 명령어
- pull -> create -> start -> attach(이미지가 없다면 연결) 전부 포함
- 옵션이 굉장히 많음
-d 옵션 : 백그라운드(daemon 모드)로 동작
--name 옵션 : 뒤에 이름 붙일수 있음
docker run -d --name web nginx
> create + start 와 같은 결과
Docker exec 명령어 (컨테이너 내부로 들어가기)
- docker exec [options] [container_name OR id] [컨테이너에서 실행하고 싶은 명령어]
-i + -t = -it 옵션 : bash OR shell 명령을 쓸때 무조건 사용
docker exec -it web /bin/bash
> Container ID, IP 주소 확인
cd /usr/share/nginx/html/
> Nginx html 파일인 index.html 파일 확인
exit
> 컨테이너 외부로 나오기
호스트 파일 컨테이너로 복사
docker cp index.html web:/usr/share/nginx/html
- 컨테이너 -> 호스트의 경우 파일 순서만 바꿔서 명령어를 입력해주면 된다.
> 디폴트 nginx 페이지 변경 확인
로그 파일 확인
- docker logs [컨테이너 이름]
--follow 옵션, -f 옵션 : 실시간 로그
--since, --until : 기간에 따라 로그 조회
--tail 옵션 : 제일 마지막 몇 개까지 조회
- docker top [컨테이너 이름] : 컨테이너 내부에서 어떤 프로세스가 동작 중?
- docker diff [컨테이너 이름] : Base Image와 생성된 컨테이너 사이에 달라진 부분만 보여줌
> C : Change
> A : Add
> D : Delete
Foreground 컨테이너 설정
- docker run -it
Background(Daemon) 실행 : -d 옵션
Foreground(터미널) 실행 : -it 옵션
ls /bin
명령어로 쓸 수 있는 명령어 확인
- exit 하면 바로 컨테이너가 종료됨 (stop 상태)
정~~말 기본적인 Docker 명령어에 대해서 알아봤다! 많은 도움이 되었으면 합니다 :)
'DevOps > Docker' 카테고리의 다른 글
[DOCKER] 컨테이너 스토리지 관리 (2) | 2024.10.07 |
---|---|
[DOCKER] Docker 아키텍처 (0) | 2024.09.15 |
[DOCKER] 도커 설치 및 컨테이너 개념과 동작 원리 (2) | 2024.09.15 |