📖 학습주제
개발환경 구축을 위한 Docker와 K8S 실습 (3)
Docker 명령 정리
Image 관련
docker build --platform=linux/amd64 -t ~~~ : 이미지 빌드
docker images or docker image ls : 현재 로컬에 저장된 이미지 목록
docker rmi or ocker image rm : 이미지 삭제
Docker Hub 관련
docker login -u 사용자ID -p 사용자PW : 로그인
docker pull ~~~ : Docker Hub에 있는 이미지를 로컬에 다운
docker push ~~~ : 만든 이미지를 Docker Hub에 업로드
Container 관련
docker create
docker run --name -p -v 이미지이름
docker ps
docker ps -a
docker ps -q
docker stop 컨테이너이름 (혹은 컨테이너ID)
docker start 컨테이너이름 (혹은 컨테이너ID)
docker restart 컨테이너이름 (혹은 컨테이너ID)
docker kill 컨테이너이름 (혹은 컨테이너ID)
docker pause 컨테이너이름 (혹은 컨테이너ID)
docker unpause 컨테이너이름 (혹은 컨테이너ID)
docker rm 컨테이너이름 (혹은 컨테이너ID)
Container logs
docker logs -f 컨테이너이름 (혹은 컨테이너ID) : 컨테이너 내부에서 생기는 로그를 실시간으로 보여줌(-f 없으면 모든 로그 보여줌)
docker logs --tail 100 컨테이너이름 (혹은 컨테이너ID) : 최근 100개의 로그를 보여줌
exec
docker run --name=hangman ~~~
docker exec hangman cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
Container detach & attach
docker run ~~~
docker run -d ~~~
a043d40*********
docker attach a043
Docker Container의 일생

Docker Volume
Docker Volume 정의
- 호스트 파일 시스템 폴더를 Docker Container 파일 시스템의 폴더로 마운트하는 것
- 호스트쪽에서 내용을 바꾸면 바로 Docker Container쪽에도 반영됨
◦ 반대도 사실이지만 Volume의 속성을 잡기 나름임 (예를 들면 읽기 전용)
- 이를 통해 Docker Container의 상태와 관계없이 데이터를 영구적으로 보관
- 파일 시스템에서 마운트란?
- 원래 마운트란 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해주는 것을 말함
- 예를 들어 윈도우에서 USB를 꼽으면 내 컴퓨터에 새로운 :D 혹은 :E와 같은 식으로 새로운
폴더가 생기는 것이 바로 마운트임
Docker Volume 예
- Container와 Host 시스템이 특정 폴더를 공유
- Container가 사라지더라도 데이터는 남게 하는 것

Container로 MySQL을 실행하는 경우 데이터가 저장되는 공간을 Docker Volume으로 설정
Docker Volume의 필요성
- Docker Container가 실행되었다가 중단되면 데이터들은 어떻게 될까?
-> 특정 소프트웨어가 Docker Container를 통해 일회성으로 동작하는 것이 아니라 계속해서 동작해야 한다면 데이터가 영구적으로 보관되어야함
- e.g.) 데이터베이스가 Docker Container안에서 동작한다면?
- 이를 보장하는 기능이 Docker Volumes => Data Persistence
- Docker Container내의 가상 파일 시스템과 호스트 시스템의 파일 시스템을 맵핑
- e.g.) 호스트 파일 시스템의 /home/trick/logs를 Docker Container의 /var/lib/airflow/logs로 맵핑
- 이 경우 Docker Container가 중단되더라도 모든 Airflow logs는 기록이 남게 됨
Docker Volume 타입
- Host Volumes: docker run -v를 실행할 때 페어로 지정
- docker run -v /home/trick/logs:/var/lib/airflow/logs
- :앞이 호스트 파일 시스템 패스이고 뒤가 컨테이너 파일 시스템 패스임
- Anonymous Volumes: docker run -v를 실행할 때 컨테이너 패스만 지정
- docker run -v /var/lib/mysql/data
- 이 방식이 Dockerfile에서 사용되는 방식으로 호스트쪽에 액세스되지는 않지만 재시작해도
유지됨
- Named Volumes: docker run -v를 실행할 때 이름과 컨테이너 패스를 지정
- docker run -v name:/var/lib/mysql/data
- 가장 선호되는 방식임. 이 방식이 하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능하게 해줌
- 이 포맷으로 뒤에서 살펴볼 docker-compose에서도 사용됨
- Volume을 Readonly로 지정하고 싶다면?
- name:/var/lib/mysql/data:ro
이미지 생성시 Docker Volume 사용법
Dockerfile
- VOLUME 명령을 통해 Anonymous Volumes만 지정 가능
docker-compose
- Host Volumes이나 Named Volumes을 사용하는 것이 일반적
Docker Volume 명령들
docker volume ls
docker volume rm
docker volume prune
docker volume inspect
Docker 환경 클린업
커맨드라인
- Docker Desktop에서 모든 삭제하는 것이 가장 직관적
- Image를 삭제하려면 먼저 실행 중인 Container가 없어야함. 따라서 맞는 순서는 먼저 Container를 중단하고 다음으로 Image를 삭제
- 컨테이너 삭제
- 원래는 docker container ls를 하고 Container ID를 개별적으로 docker container rm 뒤에 추가해야함. 하지만 한번에 이를 실행하는 것이 더 좋음
$ docker container rm -f $(docker container ls -aq)
- 이미지 삭제
- 원래는
docker image ls를 하고 Image ID를 개별적으로 docker image rm 뒤에 추가해야함. 하지만 한번에 이를 실행하는 것이 더 좋음
$ docker image rm -f $(docker image ls -q)
- 정말 다 삭제되었는지 확인
- ocker ps
- ockerimages
Desktop에서 Troubleshoot 메뉴
