ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 (2)명령어 attach, exec...
    docker 2022. 1. 24. 15:38

    ===

    http://www.pyrasis.com/docker.html

     : 이재홍 도커

    https://docs.docker.com/engine/reference/commandline/cli/

     : 도커 공식문서, 엄한 네이버에서 방황하지 말고 공식봐라

     

    ============

     :

    Build : 이미지 만들기

    Ship : 이미지 이동

    Run : 이미지 실행

     

    ============

    윈도우 10 Pro이상부턴 도커데스크탑으로 바로 실행

    WSL환경에선 더 쉬워

     

    ============

    최신 버전의 우분투 이미지를 이용해서 컨테이너를 실행하고 echo 명령어로 Hello Docker를 출력

    cd \

    mkdir docker

    cd docker

    docker container run ubuntu /bin/echo/ "Hello Docker"

    Hello Docker

     

     : ubuntu라는 운영체제가 있고, 그 운영체제 안에서 명령어를 실행한 것

     

    docker : 명령어

    container : 옵션

    run : 명령어

    ubuntu : 이미지이름

    /bin/echo/ "Hello Docker" : 컨테이너 실행 후 실행할 명령어 ▽커맨드와 인자겠지?

     

    내가 컨테이너를 실행하는데 사용할 이미지 이름은 ubuntu

    이미지는 실행파일

    컨테이너는 프로세스

     

    1)Unable to find image 'ubuntu:latest' locally

    2)latest: Pulling from library/ubuntu

    3)ea362f368469: Pull complete

    4)Digest: sha256:b5a61709a9a44284d88fb12e5c48db0409cfad5b69d4ff8224077c57302df9cf

    5)Status: Downloaded newer image for ubuntu:latest

     

    1) : 이미지를 제일 먼저 찾는게 로컬 이미지 저장소

    2) : 없으니까 원격 이미지 저장소(여기에서는 도커허브)에서 ubuntu공식 이미지를 로컬로 다운로드

    3) : 완료

    4) : 이미지의 해시값, 이미지가 변경됐는지 안됐는지를 확인

    5) : 다운로드 됐다고

    이거하고 실행돼서 Hello Docker가 나옴

     

    *echo : 입력한 문자열을 그대로 출력 = 에코가 메아리잖아

     

    난 윈도우를 쓰는데 우분투가 내 pc에서 실행이됐다

     

    ============

    docker --help : 명령어 체계

    docker : 도커명렁어

    그 다음 command가 들어감

     

    container : 컨테이너 관련 명령어

    image : 이미지 crud

     

    C:\docker> docker container run --name myubuntu2 -itd ubuntu

    b5b6b36f1d5fcdebe17064ba0ed677b1d8bceba8d333c7eec7a121e43775cee3 ⇐ 컨테이너 ID

     

    컨테이너를 실행할 때 --name 이거 옵션 안주면 만들어지고, 주면 지정,

    컨테이너의 이름은 유일해야한다

     

    컨테이너의 상태를 알려면 

    docker container ls 또는

    docker container ps

     

    C:\docker> docker container ls

    CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES

    b5b6b36f1d5f   ubuntu    "bash"    2 minutes ago   Up 2 minutes             myubuntu2

     

    실행중인 컨테이너를 조회하는것, 컨테이너 ID는 다른컨테이너랑 구분할 수 있는 정도만 적어도 알아서 됨

     

    docker container ls(=ps) -a

    실행중이지 않은것을 포함 모든 컨테이너 조회

     

    STATUS 가

    Up이면 실행상태

    Exited 면 종료된것

     

    ============

    attach : 실행되고 있는 컨테이너에 붙을 때쓰는 명령어

     

    attach 에도 식별자 ID나 이름을 주면 되는데 ID는 중복없이 구별할 수 없는 것까지 만 치면돼 한글자든 두글자든 해도돼

    attach : 해당하는 컨테이너의 입출력을 내 host와 연결.

    attach      Attach local standard input, output, and error streams to a running container

    C:\docker> docker attach --help

     

    Usage:  docker attach [OPTIONS] CONTAINER

                                    컨테이너 식별자 (= 컨테이너 이름 또는 ID)

    어떤 컨테이너에 붙을건지 명시

    붙어버린다는건 이 뜻임 이 안에 들어와있는것

     

    uname -a 는 리눅스의 커널정보 불러오는 명령어

     

    항상 이 부분을 잘 봐야, 내가 지금 어디있는지 잘 봐야해

    root : 현재 사용자

    @다음 : 해당하는 호스트 네임 = 도커컨테이너는 컨테이너 ID가 출력

    /# : 현재 디렉토리 위치

     

    ============

    exec

    실행중인 컨테이너 안으로 명령어를 전달할 때

    이거하면 attach안해도 되네, 근데 약간 좀 느리네

     

    https://i5i5.tistory.com/314

    여기 보면

    attach : 실행되고 있는 container에 접속할 때 사용합니다. 웹서버와 같이 백그라운드에서 실행되는 container에 attach로 접속하면 커맨드는 입력할 수 없고 로그만 볼 수 있습니다.

    exec : container에 새로운 프로세스를 실행시킬 때 사용합니다. container에 bin/bash를 실행시켜서 쉘을 띄우는 데도 사용합니다. exec를 사용해서 실행되는 명령어는 pid 1이 살아있을 때만 실행되고 container가 재시작 될 때는 같이 재시작되지 않습니다. 그리고 만약 container가 pause되면 docker exec 명령어는 에러를 내고 실행이 실패하게 됩니다.

     

    ============

    build : 이미지를 만든다

    build       Build an image from a Dockerfile

    이미지를 만드는게 여러가지 방법이 있다

     

    Dockerfile로 만드는게 제일

    컨테이너 이미지를 어떻게 만들건지 하는 명세서

     

    ============

    commit

    commit      Create a new image from a container's changes

    도커파일로 이미지를 만들 수도

    실행되고 있는 컨테이너에다가 그 상태그대로 이미지로 만들 수 있다

     

    ============

    cp : Copy

    내 pc에있는 파일, 디렉토리를 컨테이너 내부로, 혹은 반대방향으로

     

    Host = 내 pc, 도커가 실행되는 공간

    Guest = Host머신에서 실행되는 가상공간

     

    ============

    images

    docker images 치면

    로컬이미지저장소에 있는 이미지목록

     

    docker images

    = docker image ls

     

    C:\docker> docker image ls ⇐ 로컬 레지스트리에 저장된 이미지 목록을 출력

     

    ============

    inspect

    도커에서 사용하는 여러 객체들의 정보

    myubuntu2 라는 애의 세부 구성

    디버깅 할 때 이런식으로 볼 수 있다

     

    ============

    컨테이너는 create -> run -> stop -> restart -> kill

     

    create : 

    원래 컨테이너는 create 하고 run하는데

    create안해도 내부적으로 처리한다

     

    restart : 

    docker container restart ~~

     : 정지된 컨테이너 재실행

     

    start       Start one or more stopped containers

    restart     Restart one or more containers

    stop한것에 둘다 먹힘

    kill        Kill one or more running containers (강제 종료)

    Stop    one or more running containers (천천히 종료)

    얘네둘도 하는일이 똑같아 상태봐도 Exited야

     

    ============

    login

     

    로커 레지스트리에 접속

    도커허브에 계정 만든거 원격 레지스트리에 로그인하는 것

    *레지스트리 : 저장소

    도커허브에 접속하려면 인증을 거쳐야되니까

     

    docker login

    치면

    id pwd 넣으라고 나옴

     

    로그인에 성공하면 HOME디렉토리에

    HOME 디렉토리 : c 밑에 사용자 밑에 로그인한 사용자 계정

    여기 어딘가에 있대 찾다 포기

    저장된 정보로 파일을 올리고 등..

     

    ============

    logout

     

    ============

    logs

    로그볼 때

    이렇게 나오네

     

    ============

    pause

    잠깐 멈춤

     

    ============

    port

    포트매핑

     

    ============

    ps

    컨테이너 목록

    docker container ls(=ps)

     

    많이 쓰는 명령어인 경우에 단축형

    docker가 나오고 뭐와 관련된건지 구분을 먼저 해야함

    docker container

    이렇게, 매니지먼트 명령어래

     

    docker container ls라고치면

    컨테이너 에서 목록인 것

     

    docker ps라고만 치면 docker container ls라는거랑 똑같이 : 축약형 제공

    그냥 풀네임 쓰셔도돼요~

     

    ============

    pull

    가져오고

     

    ============

    push

    올리고

     

    ============

    rename : 잘 안씀, 컨테이너는 쓰고 버리는거지 수정 잘 안함

     

    ============

    rm 컨테이너 지우기

     

    ============

    rmi 이미지 지우기

     

    ============

    run

     

    ============

    search

    도커허브에 검색

    star기준 정렬

     

    ============

    start

    중지된걸 실행

     

    ============

    stop

    실행중인것 멈추게

     

    ============

    tag

    이미지의 이름을 바꿈

     

    ============

    top

    상태보는 것

     

    ============

    version

     

    ============

    --help를 적극적으로 활용하기

    docker --help

    docker image --help 이렇게 서브명령어 쭉 나옴

     

    C:\docker> docker container --help

     

    Usage:  docker container COMMAND

     

    Manage containers

     

    Commands:

      attach      Attach local standard input, output, and error streams to a running container

      commit      Create a new image from a container's changes

      cp          Copy files/folders between a container and the local filesystem

      create      Create a new container

    .

    .

    .

    .

    .

    .

     

    이렇게 나옴

     

    도커는 컨테이너를 다루니까 컨테이너 명령어가 대부분

     

    docker container run --help

    라고 쳐도 나와

     

    C:\docker> docker container run --help

     

    Usage:  docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

     

    Run a command in a new container

     

    Options:

          --add-host list                  Add a custom host-to-IP mapping

                                           (host:ip)

      -a, --attach list                    Attach to STDIN, STDOUT or STDERR

          --blkio-weight uint16            Block IO (relative weight),

                                           between 10 and 1000, or 0 to

                                           disable (default 0)

     

    OPTION이 나오고 IMAGE가 나온다

    OPTION 많이 알면 훌륭한 사람

    IMAGE는 식별자, 이미지 ID 또는 이미지 이름

    COMMAND : 컨테이너 실행 후 실행된 컨테이너에 안에서 실행할 명령어 + arg는 그 명령어의 인자값

     

    ============

    run의 옵션

    -a : attach, 표준입출력(stdin...)을 컨테이너와 호스트가 공유

    -i : stdin을 유지

    -it 해당하는 호스트와 입출력을

    -t : pseudo-TTY를 Allocate한다

    -d : detach모드, 백그라운드에서 돌리는 것

    --name 이름지정

    -p

    --rm

    -v

     

    ============

    다른사람보다 도커 잘하는 법

    매일 명령어 이런거 쭉 보기 훑어보기만 해도 매일하면 익숙해진다

     

    ============

    도커의 라이프 사이클

    도커허브와 로컬레지스트리가 있는 것

     

    이미지가 있어야 컨테이너를 만들 수 있다

    없으면 외부의 원격 레지스트리에서 이미지를 가져옴. docker pull(다 명령어다)

     

    로컬 레지스트리에 있는 이미지를 갖고 컨테이너를 만든다, 실행상태로 만드는게 docker run(실질적으로는 create+start)

    생성된상태 + start 하면 실행됨

     

    docker run이 pull+create+start 를 한번에 해줌

     

    started된 상태에서 컨테이너는 자기가 실행되기로 한게 끝나면 그 컨테이너는 죽어버림

    컨테이너 어플리케이션을 만들 땐 이 어플리케이션이 계속 실행될수 있도록 만듦

    docker stop하면 exited

    docker start 또는 docker restart하면 다시 started

    Parused도 마찬가지

     

    ============

    도커 실행환경 확인

    C:\docker> docker system info

    Client:

     Context:    default

     Debug Mode: false

     Plugins:

      buildx: Docker Buildx (Docker Inc., v0.7.1)

      compose: Docker Compose (Docker Inc., v2.2.1)

      scan: Docker Scan (Docker Inc., v0.11.0)

     

    Server:

     Containers: 23

    .

    .

    .

     

    또는

    전체 이미지 몇개가 어느정도

    C:\docker> docker system df

    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE

    Images          1         1         72.78MB   0B (0%)

    Containers      23        1         2.311kB   2.294kB (99%)

    Local Volumes   1         0         3.435GB   3.435GB (100%)

    Build Cache     40        0         1.09GB    1.09GB

     

Designed by Tistory.