-
도커 (4)run하면, detache, -it, logs, tag바꾸기, 일괄삭제,docker 2022. 1. 25. 16:45
============
run하면
docker는 기본 root계정으로 접속
docker container run -p 9090:8080 example/echo:latest
이 상태에서 어떻게 빠져나올까? : 커맨드가 안먹어, Ctrl + C 도 안먹어
(근데 명령 프롬프트에서는 안먹어, wsl은 Ctrl + C 먹어)
왜그럴까?
docker container run -p 9090:8080 example/echo:latest
에서
docker run 하면 도커로 제어를 돌리고, 도커가 컨테이너를 실행해
컨테이너는 실행이 종료될때까지 제어권을 갖고 있다
run 하는 순간 컨테이너가 STOP되기 전엔 제어권을 계속 갖고 있다
(▽뒤에 설명 나올 것, 간단하게는 main.go를 Dockerfile에서 CMD로 실행시키고 있는데 main.go는 서버를 리스닝 중)
이걸 풀어주는 옵션을 써줘야해 -d, -it
============
-d, -it
-d : detache, 백그라운드에서 실행하는 것
attach : 접속
#5 detache 모드로 실행
그러므로 docker container run -d -p 9091:8080 example/echo:latest 하면
안썼을 때 start server같은거 뜨는건 컨테이너 로그인데
얘는 실행하고 바로 돌아옴
-d, --detach : Run container in background and print container ID
C:\Users\myanj> docker container run -d -p 9091:8080 example/echo:latest
45822027b1d01c97fe09a177d1a79611ce72452b1a7880ac2e2ea03ec9ca108c ⇐ 컨테이너 ID 출력 후 제어권을 호스트로 반환
C:\Users\myanj> docker container ls⇐ 제어권을 반환 받았으므로 다른 작업이 가능============
아까 명령어 안먹을 때 attach 모드로 실행한 컨테이너를 중지 하는법 (컨테이너를 실행한 창과 다른 창에서 container stop 명령으로 중지)
(wsl에선 그냥 Ctrl+C하면 되긴해)
C:\docker> docker container run -p 9092:8080 example/echo:latest
제어권이 컨테이너로 가서 컨테이너 내부에서 입력을 받을 수 없음
2022/01/25 01:03:11 start server
종료 시그널을 처리할 수 없음 ⇒ 별도의 창을 실행해서 종료(stop)해야 함
ID를 이용
C:\Users\myanj> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45822027b1d0 example/echo:latest "go run /echo/main.go" 4 minutes ago Up 4 minutes 0.0.0.0:9091->8080/tcp elated_lovelace
1065e6ae0f54 example/echo:latest "go run /echo/main.go" 10 minutes ago Up 10 minutes 0.0.0.0:9090->8080/tcp amazing_rosalind
C:\Users\myanj> docker container stop 1065e6ae0f54
1065e6ae0f54
이걸 풀어주려면 실행시 -it 옵션 추가
============
-it
-it는 입출력 공유
-i, --interactive Keep STDIN open even if not attached
-t, --tty Allocate a pseudo-TTY
i는 상호 주고 받겠다
t는 tty를 쓰겠다, 검색해보니 tty는 터미널이라고 생각하래
docker container run -it -p 9093:8080 example/echo:latest
하면? 컨트롤+C가 먹어
⇒ 컨테이너가 실행 중지되면 호스트로 제어를 반환, 확인하는 사진
입력한 값이 컨테이너쪽으로 전달이 안됨
입출력 공유되니까
종료시그널이 컨테이너로 넘어가고
그럼 종료되고
종료되니까 호스트로 제어권이 넘어오고
============
-itd
docker container run -itd -p 9093:8080 example/echo:latest
일반적으로 컨테이너 프로그램은 백그라운드로 돌려야 내가 쉽게 다른 명령어를 쓸 수 있다, 안그러면 터미널을 계속 띄워야해
it는 생활코딩이 운영체제 배워야 알 수 있댔어
여기보면
보통 -itd 옵션을 많이 씁니다.
- -i, --interactive=false: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다. 보통 이 옵션을 사용하여 Bash에 명령을 입력합니다.
- -t, --tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.
- --name=””: 컨테이너에 이름을 설정합니다.
- -d, --detach=false: Detached 모드입니다. 보통 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행됩니다.
- -p, --publish=[]: 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출합니다. 보통 웹 서버의 포트를 노출할 때 주로 사용합니다.
============
ctrl+z 안먹는데?
============
프롬프트에
# : 관리자권한
$ : 그냥
============
logs
detach모드는 컨테이너를 백그라운드로 사용할 때 씀
근데 로그는 볼 수 없어
docker container logs 컨테이너ID
하면 볼 수 있다, 계속 보려면 -f해줘야함
============
도커허브에 올리려면 태그명 변경
docker image tag example/echo:latest jisookim/echo:1.0
이러면
jisookim/echo:1.0로 바뀜
============
이미지가 도커허브에 나오는건 시간이 걸릴수도 있다
============
이렇게 이미지를 만들고
▽두번째 인자를 첫번째 인자로 바꾸는거네
============
dangling 이미지 : 이름없는 이미지, <none> 이런거, 에러가 생기거나 하면 이런게 쌓임
가 많아지면 관리가 어려워짐, 이미지라는게 하드디스크에 일정한 공간을 차지하고 쓸 수가 없으니 삭제를 해줘야해
물론 docker image rm 이미지식별자(이름이 없으니 ID)
이렇게 써주면 돼
근데 ID가 복잡하잖아 많아지면 더 복잡할거고
============
dangling 이미지 일괄 삭제 ⇒ PowerShell에서 실행
-f
: 필터
docker image ls -f "dangling=true"
: dangling 이미지만 조회
docker image ls -f "dangling=true" -q
: dangling 상태 이미지의 이미지 ID만 조회
shell에서 명령어 실행결과를 문자열로 받아오는게 $()
PS C:\Users\myanj> $(docker image ls -f "dangling=true" -q) ⇐ $(명령) 명령의 실행 결과를 문자열로 반환
e9c8fc774d74
그럼 이제
docker image rm $(docker image ls -f "dangling=true" -q)
만약 컨테이너에서 사용중인 이미지면 삭제가 안되는데 컨테이너 먼저 중지(stop)하고 하기
개별 하든지 : docker container stop 컨테이너ID
모든 컨테이너 스탑하기 : docker container stop $(docker container ls -q)
--docker container stop 의 인자값으로 넣는것임
모두 스탑됐는지 docker container ls 로 확인
그럼 지워짐
============
모든 상태의 컨테이너를 삭제
docker container ls 는 실행상태
docker container ls -aq : 모든 상태의 ID만 가져오기
docker container rm -f $(docker container ls -aq)
: -f는 강제종료하고 삭제
container 대신 image면 모든 이미지 삭제
============
ls -a -q ⇒ ls -aq
--는 풀네임
-는 단축
단축할 땐 결합을 할 수 있어
UNIX POSIX에서 사용하는 네이밍 규칙
'docker' 카테고리의 다른 글
도커 (6)exec&Up&stop, RUN -y, ADD, EXPOSE, -DFOREGROUND, CMD [ ], &&, build -f (0) 2022.01.26 도커 (5)포그백그, -itd, COMMAND&detach key, -p포트하나만주면 (0) 2022.01.25 도커 (3)Dockerfile, tag, COPY, tag, push (0) 2022.01.24 도커 (2)명령어 attach, exec... (0) 2022.01.24 도커 (1)설치, 개념 (0) 2022.01.24