ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 (5)포그백그, -itd, COMMAND&detach key, -p포트하나만주면
    docker 2022. 1. 25. 17:39

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

    포그라운드 :

    백그라운드 :

     

    ---

    검색해보면

    • i : Interactive 모드로 표준입력과 표준출력을 키보드와 화면을 통해 가능하도록 하는 옵션이다.
    • t:  텍스트 기반의 터미널(TTY)을 애뮬레이션해주는 옵션이다.

    interactive모드가 키보드 화면 가능하게 하는거고

    TTY가 리눅스 켰을 때 F1~F6으로 다른 터미널 창 또 띄우는거인가봐??

     

    https://www.popit.kr/%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%B2%98%EC%9D%8C-docker-%EC%A0%91%ED%95%A0%EB%95%8C-%EC%98%A4%EB%8A%94-%EB%A9%98%EB%B6%95-%EB%AA%87%EA%B0%80%EC%A7%80/

    여기에도 있고

     

    그럼 -d만 하면 명령어가 계속 실행되고 있는 상황이 아니고 컨테이너가 종료되고

    -it를 해서 shell을 백그라운드로 실행해서 종료가 안되고

    이때 attach를 해서 exit하면 쉘이 꺼지니까 컨테이너가 또 종료돼 !

     

    그리고 -it옵션을 안주면 -d detach옵션을 줄 수가 없어 라는데,

    엘리 강의 보니까 줄 수 있는데?ENTRYPOINT때문인가? 거기선 run.sh를 해줘서 그런가봐

     

    ---

    COMMAND

    가 끝나면 컨테이너가 죽는 것

     

    C:\docker> docker container run --help

    보면

    Usage:  docker container run [OPTIONS] IMAGE [COMMAND] [ARG...] 라고 써있어서

    맨 마지막에 컨테이너가 실행됐을 때 거기서 실행할 명령어를 쓰면

     

    C:\docker> docker container run -p 8080 -itd example/echo:latest /bin/bash

    c9dbab4d09e381407ab0157a252ec60e9ee84b676f03e28cbe95d1a27971e482

     

    이렇게 하면 내가 

    C:\docker> 

    인 상태가 되고

    C:\docker> docker container ls

    해보면

    CONTAINER ID   IMAGE                 COMMAND       CREATED          STATUS          PORTS                     NAMES

    c9dbab4d09e3   example/echo:latest   "/bin/bash"   12 seconds ago   Up 11 seconds   0.0.0.0:63726->8080/tcp   happy_montalcini

    이렇게 돼있거든

     

    이건 컨테이너를 실행하고 컨테이너는 bash shell(bin/bash)를 실행하고, -d를 줘서 내가 제어권을 다시 받아온 것

     

    이때 안에서 작업하고 싶으면?

    ->docker container attach c9d : 안으로 들어올 수 있다

     

    C:\docker> docker container attach c9d

     

    살펴보면

     

    root@c9dbab4d09e3:/go# ls /echo

    main.go

    root@c9dbab4d09e3:/go# cat /echo/main.go  ⇐ 이미지 생성 시 만든 디렉터리(/echo)와 파일(main.go)가 존재

    package main

     

    import (

            "fmt"

            "log"

    .

    .

    .

     

    근데 이때? exit해서 빠져나오면?

    컨테이너가 죽는다

    ▽컨테이너를 만들 때 COMMAND 항목이 있는데 그 프로그램이 끝나면 컨테이너도 죽어

     

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

    docker container run -p 8080 -itd example/echo:latest /bin/bash

    docker container run -p 8080 -itd example/echo:latest

     

    이 두개는

     

    C:\docker> docker container ls -a

    CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS                     PORTS                     NAMES

    9317682730d9   example/echo:latest   "go run /echo/main.go"   7 seconds ago   Up 5 seconds               0.0.0.0:58470->8080/tcp   tender_merkle

    c9dbab4d09e3   example/echo:latest   "/bin/bash"              8 minutes ago   Exited (0) 2 minutes ago                             happy_montalcini

     

    커맨드가 차이나

     

    run을 할 때 /bin/bash를 주면 얘가 커맨드로 가게됨.

    커맨드에 명시돼있는게 종료되면 해당하는 컨테이너는 stop

     

    도커파일에도 보면 CMD에 명시돼 있는게 컨테이너가 제일 먼저 실행해주는 명령어

    그냥 docker run해서 실행하면 이렇게 명시돼 있는게 실행됨

    docker run할 때 cmd부분에다가 새로운거 넣어주면 도커파일에 명시돼있는 거 다음에 새로운게 실행됨(▽덮어쓰이는게 아니야?)

     

    마지막으로 실행된 커맨드가 도커의 실행을 지속시켜주는 역할을 함

     

    go run은 run이니까 안죽고 계속 떠있는데 = 실행하고 다시 제어권 받아와서 내가 하고싶은거 해 컨테이너는 컨테이너대로 계속 떠있고

     

    /bin/bash는 -d 한 다음 attach해서 exit하면 그게 끝나니까 컨테이너가 죽음

     

    bin/bash를 안 죽이고 빠져나오는 방법은?

    docker container attach 명령을 하고 다시 나갈 때, 컨테이너가 중지되는 것을 막기 위해서는 detach key를 이용해서 복귀해야해

    Ctrl 키를 누른 상태에서 p와 q를 순서대로 입력

     

    docker container run --help 보면

    attach 상태에서 exit하면 걔를 죽이고 나오는건데

     

    Ctrl 키를 누른 상태에서 p와 q를 순서대로 입력하면 백그라운드로 남겨놓은 상태로 호스트로 빠져나오는 것

     

    디폴트는 Ctrl 키를 누른 상태에서 p와 q

     ⇒ docker container run 할 때 옵션으로 설정 가능

    ---

    -p 옵션에 하나만 명시하면

    방금 이렇게 쓸 때

     

    컨테이너 내부 사용 포트만 명시하는 것 -> 이건 반드시 해줘야겠지, 컨테이너 안의 프로그램이 설정해놓은 포트

     : docker ps 해봤으면 설명 안들어도 알겠다

     

    호스트측 포트는? 도커가 임의 포트를 지정

     

    나중에 운영환경에서는 컨테이너를 여러개 띄운다

    웹서버를 수십개 수백개 띄운다

     

    서버 부하를 줄이려고 앞쪽에 로드밸런서를 둘 때가 있어. 이요청은 이쪽 저 요청은 저쪽

     

    웹서버라는 컨테이너를 하나 만들어놓으면 docker run해서 띄우고 띄우면 웹서버가 늘어남

    전부 8080으로 돌고 있는거다 컨테이너는 다 격리돼 있어서

    외부(호스트)에서 봤을 땐 포트에서 다 달라져야해

    내부포트만 지정해주면 밖에있는건 자동으로 할당되게 한다 그게 내부포트만 지정하는 방식

    ->아하 명령어는 어차피 같겠네

    58470 이렇게 자동으로 임의포트를 지정해준다

     

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

    정리

     

    컨테이너를 실행, go만 돌아야해, listening하고있어야해

     

    docker container run -p 8080 -itd example/echo:latest /bin/bash

    나는 shell를 실행해서 사용자 입력을 받고 처리할 수 있도록 만들어놓은것

     

    -d를 안주면 컨테이너 프롬프트가 뜰것  ▽-it로 입출력만 공유하고 백그라운드를 안해놨으니까?

    줘서 detach

    그래서 attach함

    거기서 exit하면 컨테이너가 stop됨 이제 왜그런진 알지

     

    /bin/bash하면 run명령어에서 전달한 COMMAND

    이것과 다르게 command포함하지 않고 컨테이너 실행하면 Dockerfile의 CMD항목에 정의한 명령어가 COMMAND가 됨

     

    위랑 똑같이 했을 때 exit했을 때 컨테이너 종료 안시키려면? = detach모드로 전환시키려면?

    Ctrl + p + q

     

    컨테이너 안에서 실행한 프로그램이 계속 돌아가야, 할일 다하면 컨테이너가 stop됨

     

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

    컨트롤 p q 하는 detach 키 설정하기

    선생님 하는법 찾는데 구글 검색에서 샘플을 계속 찾음 샘플이 최고구나

    하다가 안돼서 중요한거 아니니까 그냥 컨트롤 p q 하래

     

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

    itd옵션을 다양하게 해보는게 필요하다

     

Designed by Tistory.