ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2-1. 도커 명령어
    Docker 2018. 11. 13. 15:54

    도커사용에 필요한 명령어를 정리한다.



    docker run (컨테이너 생성 및 실행 )

    docker run : docker pull, docker create, docker start, docker attach이 한번에 실행이 된다.

    docker pull(이미지없을때) -> docker create -> docker start -> docker attach(-i -t옵션)

    docker run -i -t ubuntu:14.04
    
    docker images // 컨테이너 리스트
    docker pull // 이미지가 없을경우 다운로드
    docker create // 컨테이너 생성
    docker start 컨테이너 // 컨테이너 실행
    docker attach 컨테이너 // 컨테이너 명령어 실행
    -i 옵션 // 상호 입출력
    -t // tty활성화해서 bash 쉘 사용
    컨트롤 + p + q // 프로세스는 종료하지 않고 콘솔만 빠져 나온다.


    docker create (컨테이너 생성)

    docker create -i -t --name myContainer centos:7 // --name 옵션을 통해 컨테이너 명칭 지정
    docker inspect // 컨테이너 ID 확인

    컨테이너 목록 확인

    docker ps // 활성화된 컨테이너만 노출
    docker ps -a // 모든 컨테이너 노출
    
    
    CONTAINER ID  IMAGE          COMMAND       CREATED             STATUS          PORTS    NAMES
    b3e1c0ed5bfe  ubuntu:latest  "sleep 1000"  12 seconds ago      5 seconds ago    300:80  grave_kowalevski
    
    • CONTAINER ID : 컨네이너 고유 hash id
    • COMMAND : 컨테이너가 시작 될 떄 실행도리 명령어. 대부분 이미지에 미리 내장돼 있으며 별도의 커맨드를 설정하지 않아도 된다, 하지만 docker run이나 create 명령어의 맨 끝에 입력해서 컨테이너를 생성할 때 덮어쓸 수 있다.
         docker run -i -t ubuntu:14.04 echo hello world!
    • CREATED : 컨테이너가 생성되고 흐른 시간
    • STATUS : Up(실행중), Exited중단), Pause(일시중단)
    • 컨테이너가 개방한 포트와 호스트에 연결한 포트
    • NAMES : 컨테이너 고유한 이름으로 --name 옵션을 사용했을때 사용자 지정 이름을 사용할 수 있다.
         docker rename beforeContainer afterContainer  // docker rename


    컨테이너 삭제

    docker rm 컨테이너명
    docker rm -f 컨테이너명 // 실행중인 컨테이너는 삭제 할 수 없기에 강제적으로 컨테이너를 삭제한다.
    
    docker stop // 컨테이너 정지
    
    docker container prune // 컨테이너 전체 초기화
    // -a : 전체, -q : 컨테이너 ID만 docker rm $(docker ps -a -q) // prune 대신 컨테이너 ps 리스트를 찾아 삭제함 docker stop $(docker ps -a -q)


    컨테이너 외부노출 (port)

    컨테이너는 가상 머신과 마찬가지로 가상 IP을 할당 받는다.
    172.17.0.x의 IP를 순차적으로 할당한다.
    기본적으로는 NAT의 eth0 인터페이스와 로컬 호스트인 lo  인터페이스가 있고 eh0의 IP/PORT와 컨테이너 IP/PORT을 바인딩 해야한다.

    docker run -p 8000:80 ubuntu:14.04 // 외부 8000을 컨테이너 내부 80포트로 바인딩 한다.
    
    docker run -p 8000:80 -p 9000:80 ubuntu:14.04 // 복수의 포트를 바인딩 할 수 있다.
    

    컨테이너 애플리케이션 구축

    doker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=db mysql:5.7
    echo ${ENVIRONMENT_NAME} // 컨테이너 내부에서 환경변수를 확인 할 수 있다.
    
    docker run -d --name wordpress --link wordpressdb:mysql -p 80 wordpress
    -e // 환경 변수 전달
    -d // Detached 데몬 모드 (foreground)
    --link // NAT으로 할당 받은 IP로 컨테이너 끼리 접근 할 수 있지만 매번 바뀌는 IP는 불편하기 때문에 컨테이너의 Alias을 걸어 접근 할 수 있도록 한다 실행 중인 컨테이너만 link걸 수 있다. 
    docker exec -i -t wordpressdb /bin/bash // Detached모드에서도 쉘을 사용 할 수 있도록 한다.  -i -t옵션으로 상호 입출력이 가능하다
    docker exec wordpressdb ls // 실행후 결과만 output으로 받을 수 있다.


    도커 볼륨

    도커 이미지로 컨테이너를 생성하면 읽기 전용이 되며 컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존한다.
    하지만 컨테이너를 삭제 했을경우 저장하고 싶은 데이터도 함께 삭제 되기 때문에 볼륨이란것을 이용하게 된다.


    1. 호스트와 볼륨 저장소를 공유하는 방법
    2. 볼륨 컨테이너를 활용하는 방법
    3. 도커가 관리하는 볼륨을 사용 하는 방법


    호스트와 볼륭 저장소 공유 

    컨테이너의 파일이 호스트로 파일이 복사된다.
    이미 존재하는 디렉터리 데이터가 있을경우 컨터이너의 디렉터리 자체가 덮어쓰워진다.
    -v 옵션은 호스트 볼륨 공유는 호스트의 디렉터리를 컨테이너의 디렉터리에 마운트 한다.
    docker run -d --name wordpressdb -e MYSQL _ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress \
    -v /home/wordpress:/var/lib/mysql \
    mysql5:7
    
    docker run -d -e WORDPRESS_DB_PASSWORD=password --name wordpress_hostvolumn --link wordpressdb:mysql -p wordpress



    볼륨 컨테이너 이용 방법

    볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 방법, --volumes-from옵션을 설정하면 -v 또는 --volme 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유 할 수 있다.






    도커 볼륨

    도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존할 수 있다. 컨테이너를 생성 하듯이 볼륨을 생성해서 사용한다.

    docker colume create --name myvolume
    docker volume ls // 리스트확인
    docker run -v myvolume:컨테이너의_공유_디렉토리



    도커 네트워크

    도커 컨테이너는 순차적으로 IP을 생성하며 외부와의 네트워크를 제공하기 위해 컨테이너마다 가상 네트워크 인터페이스를 호스트에 생성하며 이 인터페이스의 이름은 veth로 시작한다. 도커 엔진에 의해 자동으로 생성된다.

    컨테이너의 eth0 인터페이스는 호스트의 veth-- 라는 인터페이스와 연결됐으며 veth--인터페이스는 docker0 브리지와 바인딩돼 외부와 통신할 수 있다.


    1. 브리지 네트워크
    2. 호스트 네트워크 : 호스트 네트워크을 그대로 사용
    3. 논 네트워크 : 사용하지 않음
    4. 컨테이너 네트워크 : 타 컨테이너의 네트워크을 사용


    컨테이너 로깅

    컨테이너 표준 출력 StdOut 과 에러 StdErr 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공한다.
    기본적으로 JSON현태로 도커 내부에 로그파일이 저장된다.
    위치 : cat /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log
    도커 데몬 시작시 --log-driver을 써서 로깅 드라이버를 변경 할 수 있다.


    docker logs mysql // 컨테이너 내부에서 출력을 보여주는 명령어
    docker logs --tail mysql // 마지막 줄부터 보여 준다.
    docker logs --since 147465976 mysql // 특정 시간 이후부터 보여 준다.
    Options:
          --details        Show extra details provided to logs
      -f, --follow         Follow log output
          --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
          --tail string    Number of lines to show from the end of the logs (default "all")
      -t, --timestamps     Show timestamps
          --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
    


    syslog 로그

    syslog로그는 유닉스 표준 로그로써 커널, 보안등 시스템과 관련된 로그, 애플리케이션의 로그등 다양한 로그를 수집 저장한다.

    우분트 : /var/log/syslog
    centos : /var/log/messages
    journalctl -u docker.service 명령어로 위치 확인도 가능


    docker run -d --name conainerName --log-driver=syslog ubuntu:14.04
    






















    'Docker' 카테고리의 다른 글

    1-2. 도커란?  (0) 2018.11.11
    1-1. 도커를 시작하기 위해 vm이란?  (0) 2018.11.11

    댓글

Designed by Tistory.