DevOps
[Docker] 컨테이너 관리
cumo
2025. 3. 31. 10:44
도커 기본 설치
sudo dnf -y install dnf-plugins-core
sudo
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker run hello-world
sudo dnf -y install docker && sudo systemctl --now enable docker
sudo usermod -aG docker ec2-user
1. 이미지 검색하고 내려받기
1.1 이미지 검색
도커 이미지는 Docker Hub(https://hub.docker.com 제공된다. 검색은 CLI로도 가능
docker search http
docker pull http:latest
1.2 이미지 구조
도커 이미지는 여러 계층(layer)으로 구성되며, 파일 시스템 스냅샷처럼 동작한다. 상위 계층은 변경되지 않으며, 변경 사항은 하위 계층에서 오버레이된다.
- Base Layer: 예: ubuntu, alpine
- Middle Layer: 사용자 앱 설치나 설정
- Top Layer: 최종 애플리케이션 실행 스크립트
2. 컨테이너 실행
docker run -d --restart alway nginx # 도커 컨테이너 실행
docker run -d --restart always -p 7070:80 --name nginx7070 nginx:latest #특정 포트로 도커 실행
값 | 컨테이너 비정상 종료시 | 도커 서비스 시작시 |
no | 컨테이너 재시작 X | 컨테이너 시작 X |
on-failure | 컨테이너를 재시작함 | 비정상적으로 컨테이너를 시작 |
alway | 컨테이너를 재시작함 | 컨테이너를 시작 |
unless-stopped | 컨테이너를 재시작 | 사용자가 직접 정지하지 않은 컨테이너 시작 |
3. 컨테이너 내부 파일 변경하기
방법 :
- docker cp : cp <호스트경로> <컨테이너 이름>:<컨테이너 내부 경로> 형식으로 호스트에 위치한 파일을
구동 중 인 컨테이너 내부에 복사, 임시 필요 파일을 단편적으로 전송하기 위해 사용 - Dockerfile ADD : Dockerfile을 기반으로 ADD라는 구문을 통해 내부로 복사할 파일 지정 시 이미지 빌드한
파일이 이미지 내부로 복사 - 바인드 마운트 : 호스트의 파일 시스템과 컨테이너 내부 연결을 통해 어느 쪽에서 작성해도 양쪽에 동시에 반영
새로운 컨테이너를 구동 시에도 호스트와 연결할 파일과 디렉터리 경로만을 통해 연결이 가능
데이터베이스의 데이터나, 서버의 첨부 파일 디렉터리처럼 컨테이너가 바뀌어도 없어지면 안되는 자료를 보전 - 볼륨 : 호스트의 파일 시스템과 컨테이너를 연결하는것은 바인드 마운트와 동일하나 도커가 관리하는 볼륨을 컨테이너와 연결하는 것에서 차이가 있음 ,예) NFS 를 생성시에는 다른 호스트에서도 도커가 관리하는 볼륨 사용 가능
mkdir -p /root/html
/usr/share/nginx/html , /root/html 연결
docker run -d -p 8081: 80 \ -v /root/html:usr/nginx/html --restart always --name nginx-bind-mounts nginx <docker ID>
RUN 옵션
옵션 | 설명 |
-v | 호스트 디렉터리와 컨테이너 디렉터리 연결하는 옵션 |
사용하지 않는 컨테이너 정리하기
docker ps -f ancestor=http #사용중인 컨테이너 확인
docker stop tender-synder 컨테이너 정지
docker stop f530
docker ps -q -f ancestor=http
docker stop $(docker ps -q -f ancestor=nginx) # 괄호 안의 내용을 인자로 정지
#컨테이너 삭제
docker rm $(docker ps -aq -f ancestor=nginx) #삭제
# 이미지 삭제
docker rmi $(docker images -q http) #컨테이너가 삭제 상태일 때 삭제 가능