ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. Docker 명령어 [초보자를 위한 Doker 실습 - 데브옵스(DevOps)]
    DevOps/Docker 2023. 5. 11. 18:07

    1. 기본적인 Docker 명령어

    docker run

    - docker run 명령어는 이미지로부터 컨테이너를 실행할 때 사용한다.

    - Docker 호스트에 해당 애플리케이션 인스턴스가 있다면 해당 인스턴스를 실행하고, 호스트에 이미지가 없다면  Docker Hub으로 이동해 이미지를 풀(pull) 한다.

     

    docker ps

    - docker ps 명령어는 실행되는 모든 컨테이너와 해당 컨테이너의 기본 정보를 나열한다.

    - 컨테이너 ID나 컨테이너 실행을 위해 사용되는 이미지의 이름, 현재 상태나 컨테이너 이름 등이 있다.

    - 각 컨테이너는 Docker에 의해 자동으로 생성된 임의의 ID나 이름을 갖는다.

    - -a 옵션을 이용하면 모든 컨테이너를 확인할 수 있다.

        ㆍ이미 멈췄거나 종료한 컨테이너까지 모두 출력한다.

     

    docker stop

    - 실행 중인 컨테이너를 멈출 땐 docker stop 명령어를 사용한다.

    - 이 경우 컨테이너 ID나 컨테이너 이름을 입력해야 한다.

    - docker 명령어가 실행되면 멈춘 컨테이너 이름이 출력된다.

     

    docker rm

    - docker rm 명령어를 통해 멈추거나 종료한 컨테이너를 영구적으로 삭제할 수 있다.

     

    docker images

    - 사용할 수 있는 이미지의 목록과 이미지의 크기를 확인한다.

     

    docker rmi

    - 이미지 삭제

    - 이미지를 삭제하기 전에 해당 이미지를 지움으로써 중단되는 컨테이너가 없는지 꼭 확인할 것

    - 이미지를 삭제하려면 해당 이미지가 종속된 모든 컨테이너를 중단하거나 삭제해야 한다.

     

    docker run

    - docker run 명령어를 실행했을 때 이미지 다운로드를 기다리지 않기 위해 이미지만 다운로드해서 보관할려면?

    # 컨테이너 실행 없이 이미지만 풀(pull) 할 수 있다.
    docker pull

     

    - 실행방식

        ㆍ1. docker run ubuntu 명령어를 실행하면 ubuntu 이미지의 인스턴스를 실행하고 즉시 종료한다.

    -  가상머신과 다르게 컨테이너의 목적은 운영 체제 호스팅이 아니라 특정 작업이나 프로세스를 처리하는 것이다.

        ㆍ작업이 끝나면 컨테이너는 종료된다.

        ㆍ컨테이너는 내부 프로세스가 실행되는 동안만 존재한다.

        ㆍ컨테이너 내부의 웹 서비스가 멈추거나 충돌이 발생하면 컨테이너가 종료된다.

        ㆍubuntu 이미지로부터 컨테이너를 실행하면 즉시 종료되는 이유이다.

            ○ ubuntu는 다른 애플리케이션의 베이스 이미지로 사용되는 운영 체제의 이미지일 뿐이다.

            ○ 컨테이너 자체에서 기본적으로 실행되는 프로세스나 애플리케이션이 없다.

    - ubuntu의 경우와 같이 실행되는 서비스가 없는 이미지라면 docker run 명령어를 이용해 Docker가 프로세스를 실행하도록 명령할 수 있다.

    docker run ubuntu sleep 5

     

    docker exec

    - 특정 컨테이너의 파일 콘텐츠를 확인할 때 사용

    docker exec CONTAINER_NAMES cat /etc/host

    - 이 경우 /etc/hosts 위치에 있는 파일 콘텐츠를 출력한다.

     

    docker attach

    docker run kodekloud/simple-webapp

    - 이와 같이 실행 시 해당 프롬프트에서 실행

    docker run -d kodekloud/simple-webapp

    - Docker 컨테이너를 분리 모드로 실행하는 것

    - 이를 통해 Docker 컨테이너를 백그라운드 모드에서 실행하고 즉시 프롬프트로 돌아온다.

    - 컨테이너는 백엔드에서 계속 실행될 것이다.

     

    - 나중에 실행 중인 컨테이너를 다시 연결 모드로 바꾸고 싶다면 docker attach 명령어에 컨테이너 ID나 이름을 지정하면 된다.

     

    * 어떤 docker 명령어든 컨테이너 ID를 지정할 때는 해당 호스트의 다른 컨테이너와 구분할 수 있는 ID의 첫 문자 몇개만 입력하면 된다.

     

    * 이미지를 삭제하기 전에 컨테이너를 먼저 제거해야한다.

     

    2. Docker Run

    - 다른 버전을 다운로드 할 때

     docker run redis:4.0

        ㆍ태그가 없을 경우 자동으로 기본 태그인 latest로 간주한다.

     

    - 애플리케이션을 도커화해서 실행시키면 프롬프트를 기다릴 필요가 없다.

    docker run kodeklo/simple-prompt-docker

        ㆍ기본적으로 docker 컨테이너가 표준 입력값을 수신하지 않는다.

        ㆍ비 대화형 모드로 실행

    docker run -i kodeklo/simple-prompt-docker

        ㆍ- i 매개변수는 대화형 모드를 의미한다.

    docker run -it kodeklo/simple-prompt-docker

        ㆍ-t 는 가상 터미널을 의미한다.

     

    * Docker 호스트 또는 Docker 엔진 : Docker가 설치된 기초 호스트

     

    만약 웹 브라우저에서 액세스하려면 어떤 IP를 사용해야 할까?

    1. Docker 컨테이너 IP를 사용

        ㆍ모든 Docker 컨테이너는 기본으로 IP를 할당받는다.

        ㆍ하지만 내부 IP이므로 Docker 호스트를 통해서만 액세스할 수 있다. 외부 사용자는 엑세스할 수 없다.

    docker run -p 80:5000 kodekloud/simple-webapp

        ㆍ도커 호스트 Port : 도커 컨테이너 Port

    * Docker 호스트의 동일한 포트에 두 번 이상 매핑할 수 없다.

     

     

    Docker 컨테이너에서 데이터 유지

    - Docker 컨테이너는 자체적으로 분리된 파일 시스템을 갖고 있고 파일 변경은 오직 해당 컨테이너 안에서만 진행된다.

    - 컨테이너를 제거하는 즉시 그 안에 있는 모든 데이터가 날라간다.

    - 데이터를 유지할려면 Docker 호스트 컨테이너 외부 디렉터리를 컨테이너 내부 디렉터리에 매핑해야한다.

    - 이렇게 하면 Docker 컨테이너가 실행될 때 Docker 컨테이너 내의 폴더로 외부 디렉터리가 내부적으로 마운트 된다.

    - 이렇게하면 모든 데이터가 외부 볼륨인 /opt/datadir에 저장되고 Docker 컨테이너를 삭제해도 데이터는 유지된다.

     

    docker inspect

    - 특정 컨테이너의 추가적인 세부 정보

    docker inspect ID/NAMES

     

    docker logs

    - 백그라운드에서 실행한 컨테이너 로그는 어떻게 볼까?

        ㆍ-d 매개변수를 사용해 간단한 웹애플리케이션 실행

        ㆍ분리 모드로 컨테이너를 실행

        ㆍ해당 컨테이너의 stdout 내용인 로그를 볼 수 있다.

    docker logs ID/NAMES

     

     

    * 콘솔에 갇힌 상태일 때, OS 또는 컨테이너가 자동으로 종료될 때까지 나갈 수 없다. 

        ㆍDocker 호스트에 다른 중복 연결을 설정해서 중지시켜야한다. 컨테이너가 중지되면 프롬프트로 돌아갈 수 있다.

        ㆍ컨테이너를 실행할 때 -d 매개변수를 써서 백그라운드의 분리 모드로 실행할 수 있다.

     

    댓글

Designed by Tistory.