알아두면 쓸데있는 Docker 명령어 모음
Docker Container & Images
도커 이미지는 프로그램 실행을 위한 기본 환경을 담고 있는 파일이라 생각하면 된다. 도커 이미지 하나당, 하나의 프로젝트를 보통 담당한다고 볼 수 있으며, 도커 이미지를 바탕으로 컨테이너를 생성하여 실제 작업을 진행한다.
docker images # 도커 이미지 목록 조회
docker ps [-a] # 도커 컨테이너 목록 조회
docker stop [container name] # 실행중인 도커 컨테이너 중지
docker start [container name] # 중지된 도커 컨테이너 실행
docker rm [-f] [container name] # 도커 컨테이너 삭제
docker rmi [docker image name] # 도커 이미지 삭제
docker exec -it [container name] /bin/bash # 실행중인 컨테이너 접속
* docker attach 명령어도 exec 명령어와 마찬가지로 기존 실행중인 컨테이너에 접속하는 것은 동일하다. attach 명령어의 경우 기존 실행중이던 프로세스에 직접 접속하는 반면, exec 명령어는 새로운 세션을 만들어 접속하기 때문에 기존 프로세스에 영향을 주지 않는다.
yaml 파일을 컨테이너로 빌드하는 명령어는 다음과 같다.
docker compose up -d
Docker Volume
도커 볼륨은 데이터를 컨테이너 외부에 저장할 수 있는 방법을 제공한다. 컨테이너는 기본적으로 휘발성이기 때문에, 컨테이너를 삭제하면 내부에 저장된 데이터도 사라지게 되는데 도커 볼륨을 통해 데이터를 지속적으로 저장할 수 있다.
docker volume ls # 도커 볼륨 조회
docker volume create [volume name] # 도커 볼륨 생성
docker volume remove [volume name] # 도커 볼륨 제거
docker volume을 사용하여 컨테이너를 실행해보자.
docker run -it -v [볼륨 이름]:[컨테이너 내 마운트 경로] [도커 이미지 id]
docker run -it --mount source=[볼륨 이름], target = [컨테이너 내 마운트 경로]
Docker Network
기본적으로 도커는 각 컨테이너에 네트워크를 할당하고 격리된 환경에서 실행되도록 하지만, 도커 네트워크를 구성하면 컨테이너 간 통신이 가능해진다. 컨테이너가 동일한 네트워크에 연결되면, '컨테이너 이름' 기반으로 통신할 수 있다.
docker network ls
docker network create [network name]
docker network remove [network name]
docker 실행 시 네트워크를 지정해보자
docker run -it --network [네트워크 이름] [도커 이미지 id]
Docker 시간대 설정
Docker 컨테이너 내부에서는, 현재 본인이 위치한 지역의 시간대를 잘 인식하지 못할 가능성이 크다.
컨테이너 안에서 date 명령어를 수행해보면, 컨테이너 내부의 시간대를 알 수 있다.
date # 2024. 10. 08. (화) 01:57:00 Asia
글을 작성하는 시점이 10월 8일 오전 10시 57분인 점을 감안하면, 9시간 시차가 존재하는 것을 알 수 있다.
기본 환경에서는 zoneinfo 값이 없다. 관련 정보를 받아오기 위해, tzdata 패키지를 설치해야 한다.
apt update -y
apt install tzdata
ls /usr/share/zoneinfo/Asia
다음과 같이 시간대를 연동해주고 나면, 현재 시간으로 잘 인식하는 것을 볼 수 있다.
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date