Search
Duplicate
📒

[Docker Container] 03-2. 도커 컨테이너 명령어

상태
미진행
수업
Docker Container
주제
Docker
4 more properties
참고

Docker container 명령어

NOTE
Docker에서 가장 많이 사용되는 CLI(Command Line Interface)를 실습해보자!
흐름에 따라 위의 명령어들을 사용할 수 있다!

container 실습을 위한 이미지 생성

NOTE
vi runapp.js # runapp.js의 내용 const http = require('http'); const server = http.createServer().listen(6060); server.on('request', (req, res) => { console.log('Your request arrived.'); res.write("HostName: " + process.env.HOSTNAME + " \n"); res.end(); }); server.on('connection', (socket) => { console.log("Your Connected."); }); vi Dockerfile # Dockerfile 내용 FROM node:20 -alpine3.17 RUN apk add --no -cache tini curl WORKDIR /app COPY runapp.js . EXPOSE 6060 ENTRYPOINT ["/sbin/tini", "--"] CMD ["node", "runapp.js"]
Shell
복사
실습 이미지를 위한 파일 생성
docker build -t noderun:1.0 . docker image history noderun:1.0 docker run -itd -p 6060:6060 --name=node-run -h node-run noderun:1.0 curl localhost:6060
Shell
복사
실습 이미지 실행
생성결과

docker top | port | stats (프로세스, 포트, 통계 조회)

NOTE
# 컨테이너에서 실행 중인 프로세스 조회 docker top node-run # 컨테이너에 매핑된 포트 조회 docker port node-run # 컨테이너 리소스 사용 통계에 대한 실시간 스트림 출력 # (스트림 비활성화 , --no-stream) docker stats node-run
Shell
복사

cadvisor (docker Metric 정보수집)

NOTE
실제 페이지
정보 수집
# cadvisor 컨테이너 생성 (stats와 유사한 Metric정보 수집) docker run \ --restart=always \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=9559:8080 \ --detach=true \ --name=cadvisor \ --privileged \ --device=/dev/kmsg \ gcr.io/cadvisor/cadvisor:latest docker ps | grep cadvisor
Shell
복사
cadvisor 실행코드

docker logs (로그 정보확인)

NOTE
# 실습 컨테이너에 3초마다 요청을 보낸다. while true; do curl 192.168.56.101:6060; sleep 3; done # 로그 확인 docker logs -f node-run
Shell
복사
계속해서 로그가 찍힘
container에서 발생하는 Log는 디스크문제를 발생시킬 수 있다.
sudo vi /etc/docker/daemon.json # 파일내용 { "insecure-registries": ["192.168.56.101:5000"], "log-driver": "json-file", "log-opts": { "max-size": "30m", "max-file": "10" } } # 도커 재시작 restart docker.service
Shell
복사
컨테이너에서 발생하는 log size를 제한하는 방법

docker cp | restart (container 내부 파일변경)

NOTE
vi runapp.js # 기존 내용변경 const http = require('http'); const server = http.createServer().listen(6060); server.on('request', (req, res) => { console.log('fastcampus request arrived.'); res.write("HostName: " + process.env.HOSTNAME + "\n"); res.end(); }); server.on('connection', (socket) => { console.log("fastcampus Connected."); }); # 컨테이너를 재시작해서 변경된 파일을 읽도록한다. docker cp runapp.js node-run:/app/runapp.js docker restart node-run
Shell
복사
컨테이너 내부파일 변경
docker container cp <Container명 또는 ID>:<Container 내의 파일 경로> <Host 디렉터리 경로> docker container cp <Host 파일> <Container명 또는 ID>:<Container 내의 파일 경로> # test Container의 /etc/passwd 파일을 Host의 /tmp/etc에 복사 ~$ docker run –itd --name=my_container centos ~$ docker cp my_container:/var/log/ /home/kevin/centos_log/ # Host의 현재 디렉터리에 있는 local.txt 파일을 text Container의 /tmp/local.txt로 복사 ~$ touch local.txt ~$ docker cp ./local.txt my_container:/tmp/local.txt ~$ docker exec -it my_container ls /tmp # webserver container 의 /etc/nginx/nginx.conf를 HostOS 경로에 복사 ~$ docker run -d -p 7777:80 --name=webserver nginx:1.25.0-alpine ~$ docker cp webserver:/etc/nginx/nginx.conf /home/kevin/nginx.conf
Shell
복사
다양한 사용 방법

docker attach | exec (컨테이너 내부 명령어, 출력)

NOTE
docker run -d --name top-container ubuntu:22.04 /usr/bin/top -b docker attach top-container
Shell
복사
실행 중인 컨테이너에 stdout, stdin, stderr 스트림을 연결한다.
docker run -itd --name=my_container alpine sh docker exec -d my_container touch /tmp/exec_test docker exec -it my_container sh
Shell
복사
실행 중인 컨테이너에 명령을 실행한다.

docker commit (실행중인 컨테이너 이미지화)

NOTE
docker commit node-run noderun:2.0
Shell
복사
실행 중인 컨테이너의 변경사항을 포함한 새로운 이미지 생성

Docker container 생명주기 관련 명령어

NOTE
자세한건 아래에서..
Docker kill에 대한 코드

docker run | create | start (컨테이너 생성)

NOTE

docker run

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
PowerShell
복사
docker run --name test -it --rm ubuntu:18.04
PowerShell
복사
test라는 이름으로 설정되고, 컨테이너 내부에 들어가며, 프로세스 종료되면 자동으로 컨테이너 종료됨.
이미지 다운로드 + 컨테이너 생성 + 실행을 동시에 하는 명령어
option
Description
-d
detached mode 흔히 말하는 백그라운드 모드
-p
호스트와 컨테이너의 포트를 연결 (포워딩)
-v
호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e
컨테이너 내에서 사용할 환경변수 설정
--name
컨테이너 이름 설정
-it
-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
--rm
프로세스 종료시 컨테이너 자동 제거
--link
컨테이너 연결 [컨테이너 명:별칭]

docker images

docker images
PowerShell
복사
도커 허브로부터 다운받은 이미지를 보여준다.

docker pull

docker pull centos:8
PowerShell
복사
run이랑 다르게 컨테이너를 생성하기 까지는 싫고, 이미지만 다운받을때 사용

docker create

create -it --name mycentos centos:7
PowerShell
복사
파일 스냅샷을 내부에 넣어줌
다운 받은 이미지를 통해 컨테이너를 생성 하려면, docker create 명령을 사용하면 된다.
--name을 통해 컨테이너 이름을 지정해줄 수 있음. (안해주면 자동으로 만들어짐)

docker start

docker start [컨테이너 이름/아이디]
PowerShell
복사
실행될 명령어를 컨테이너에 넣어주고 실행
컨테이너 실행 명령어
접속까지 하려면 docker attach [컨테이너 이름 or 컨테이너 아이디]를 추가로 입력해야함

docker ps (컨테이너 목록 확인)

NOTE

docker ps

docer ps의 결과 → 현재 하나의 컨테이너가 실행중
# 실행중인 컨테이너 목록 보기 docker ps # 전체 컨테이너 목록 보기 docker ps -a, docker ps -all
PowerShell
복사
필드명
의미
CONTAINER ID
컨테이너의 고유한 아이디 해쉬값.실제로는 더욱 길지만 일부분만 표출한다.
IMAGE
컨테이너 생성 시 사용한 도커 이미지.
COMMAND
컨테이너 시작 시 실행될 명령어.대부분 이미지에 내장되어 있으므로 별도의 설정이 필요없다.
CREATED
컨테이너가 생성된 시간.
STATUS
컨테이너의 상태.실행 중은 Up, 종료는 Exited, 일시정지 Pause.
PORTS
컨테이너가 개방한 포트와 호스트에 연결한 포트.특별한 설정을 하지 않은 경우 출력되지 않는다.
NAMES
컨테이너의 고유한 이름. 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 조합해 설정한다.id와 마찬가지로 중복이 안되고 docker rename 명령어로 변경할 수 있다.$ docker rename original-name changed-name

docker stop | kill | rm (컨테이너 제거)

NOTE

docker stop

SIGTERM을 보내고 나서 정리하는 시간을 준다.
docker stop [도커 컨테이너 이름/아이디]
PowerShell
복사

2. docker kill

SIGTERM 없이 바로 SIGKILL을 보내서 즉각적으로 컨테이너를 중지시킨다.
docker kill [도커 컨테이너 이름/아이디]
PowerShell
복사

docker rm

docker rm [컨테이너 이름/아이디] # 정지중인 컨테이너 삭제 docker rm -f, docker rm -force # 실행중인 컨테이너 삭제 docker rm -f $(docker ps -aq) # 전체 삭제
PowerShell
복사

docker rmi

docker rmi [컨테이너 이름/아이디]
PowerShell
복사
도커 이미지 삭제

docker system prune

docker system prune
PowerShell
복사
컨테이너, 이미지, 네트워크 전체삭제(실행중인 컨테이너 영향x)