- 컨테이너의 중지와 재시작
docker ps
docker ps를 입력하면 현재 실행 중인 도커 컨테이너들을 확인할 수 있다.
만약 현재 실행 중인 컨테이너 외에도 중지된 컨테이너까지 확인하기 위해서는 다음 명령어를 사용하면 된다.
docker ps -a
이러면 현재 종료되어 있는 컨테이너도 확인할 수 있다.
이 종료되어 있는 컨테이너를 다시 재시작할 수도 있다.
docker run은 이미지를 기반으로 새 컨테이너를 만들지만, 변경사항이 없어서 컨테이너를 재실행하고 싶다면 docker ps -a로 컨테이너를 검색한 후
docker start {container ID || container name}
이렇게 종료된 컨테이너를 재실행한 것을 볼 수 있다.
- Attached, Detached
방금 해보았던 docker start로 컨테이너를 실행하면, 외부에서 docker ps로 상태만 확인할 수 있었고 내부에서 작업은 하지 않았었다.
분명히 실행 중인데도 말이다.
이 전의 docker run으로 컨테이너를 실행하면, 해당 터미널에서 컨테이너가 실행되고 다른 터미널에서 상태를 확인할 수 있었다.
이제 여기서 자유롭게 attached, detached를 설정하여 작업해 보도록 하자.
우선 docker start는 detached 모드가 디폴트이며, docker run은 attached 모드가 디폴트이다.
docker run을 확인해보자.
이렇게 콘솔에 컨테이너의 결과가 출력되는 것을 볼 수 있다.
이 컨테이너를 콘솔과 연결되지 않는 detached 모드로 실행하기 위해서는, -d 옵션을 넣어주면 된다.
이렇게 -d 옵션을 넣어주면, 이전과는 다르게 바로 컨테이너가 실행되었다고 나오고 터미널과는 분리되는 것을 볼 수 있다.
분리된 컨테이너와 터미널을 다시 연결하고 싶다면, attach 명령어를 사용하면 된다.
docker attach {container ID || container name}
이렇게 다시 연결되어 결과가 출력되는 것을 볼 수 있다.
터미널과 연결시키지 않고 로그만 가져오고 싶다면, logs 명령어를 사용하면 된다.
이렇게 바로 출력의 결과만 가져오는 것을 볼 수 있다.
- 인터렉티브 모드로 작업하기
웹서버뿐만 아니라 짠 코드를 직접 실행시킬 수도 있다.
작성한 파이썬 코드를 실행해보도록 하겠다.
Dockerfile은 다음과 같이 작성했다.
FROM python
WORKDIR /python
COPY . /python
CMD ["python", "rng.py"]
해당 Dockerfile을 바탕으로 이미지를 생성하고, 컨테이너를 실행한다.
그리고는 run -it를 사용하여, 인터렉티브하게 컨테이너를 실행한다.
docker run -it {image ID || image name}
이러면 해당 컨테이너와 상호작용하며 실행할 수 있다.
run이 아닌 start의 상황에서는 -ai 옵션을 사용하여 인터렉티브하게 재실행한다.
- 이미지와 컨테이너 삭제하기
그 동안 생성했던 많은 이미지와 컨테이너들을 삭제해보도록 하자.
컨테이너를 제거할 때는 rm 명령어를 사용한다.
docker rm {container ID || container name}
당연히 실행 중인 컨테이너는 삭제할 수 없고, 현재 종료된 컨테이너만 제거가 가능하다.
이번에는 이미지를 삭제해보자.
이미지를 삭제할 때는 rmi 명령어를 사용한다.
docker rmi {image ID || image name}
이렇게 이미지가 삭제되는 것을 볼 수 있다.
여기서도 이미지는 해당 이미지를 사용하여 실행 중인 컨테이너가 존재하지 않을 때만 삭제가 가능하다.
해당 명령어를 사용하면, 삭제 가능한 모든 이미를 삭제한다.
docker image prune
만약 컨테이너를 종료 후 해당 컨테이너를 자동으로 제거하고 싶다면, run을 하면서 --rm 옵션을 넣어주면 된다.
docker run --rm {image ID || image name}
이렇게 종료하자마자 자동으로 삭제되는 것을 볼 수 있다.
- 컨테이너에서의 파일 복사
실행 중인 컨테이너로 또는 실행 중인 컨테이너 밖으로 파일 또는 폴더를 복사할 수 있다.
해당 과정에서는 cp 명령어를 사용한다.
docker cp {복사하려는 파일 혹은 폴더} {container name}:{복사하려는 경로}
당연히 반대로 컨테이너에서 가져올 수도 있다.
cp 명령어를 사용하여 경로의 순서를 바꾸면 된다.
docker cp {container name}:{복사하려는 경로} {복사하려는 파일 혹은 폴더}
- 컨테이너와 이미지에 이름 혹은 태그 지정하기
지금까지는 자동으로 도커에서 생성된 이름만을 사용했다.
당연히 이런 이름들도 우리가 직접 지정할 수 있다.
직접 지정하는 방법을 알아보도록 하자.
--name 옵션에 이름을 지정해주면 된다.
docker run --name {container name} {image ID || image name}
myapp이라는 이름이 지정된 것을 볼 수 있다.
이번에는 이미지에 이름을 지정해보자.
이미지의 이름을 태그라고 하며 2개로 구분할 수 있다.
이미지의 리포지토리 : 이미지의 태그 이렇게 구성이 되어 있는 데, 이렇게 만든 이유는 여러개의 특정화된 이미지 그룹을 만들 수 있기 때문이다.
이미지를 가져올 때도 태그를 지정할 수 있으며, 보통은 특정 버전의 이미지를 가져올 때 사용한다.
이미지의 이름을 생성할 때는 -t 옵션을 사용한다.
docker build -t {이미지의 이름}:{이미지의 태그} .
'백엔드 > Docker' 카테고리의 다른 글
Docker에서 볼륨과 바인드 마운트 관리하기 (0) | 2024.02.12 |
---|---|
Docker에서의 볼륨과 바인드 마운트 (0) | 2024.02.12 |
DockerHub 사용하기 (0) | 2024.02.11 |
Docker 이미지와 컨테이너 (0) | 2024.02.03 |
Docker란? (0) | 2024.02.01 |