Docker 컨테이너 관리를 위한 CLI 정리

wookja·2024년 6월 23일
0

Docker

목록 보기
1/3
post-thumbnail

Docker Container CLI

docker run [option] docker_image [command]

옵션설명
-i, --interactice대화식 모드 열기
-tTTY(단말 디바이스 할당)
-d, --detach=true백그라운드에서 컨테이너 실행하고 컨테이너 ID 등록
--name실행되는 컨테이너에 이름부여 (미 지정시 자동으로 부여 됨)
--rm컨테이너 종료 시 자동으로 컨테이너 제거
--restart컨테이너 종료 시 적용 할 재시작 정책 지정
--env, -e컨테이너의 환경 변수 지정 (--env-file은 여러 환경 변수를 파일로 생성하여 지정하는 방법)
-v, --volume=호스트경로:컨테이너경로호스트 경로와 컨테이너 경로의 공유 볼륨 설정 (Bind mount)
-h컨테이너 호스트명 지정 (미 지정시 컨테이너 ID가 호스트명으로 등록)
-p [Host 포트]:[ Container 포트], --publish호스트 포트와 컨테이너 포트 연결
-P, --publish-all=[true / false]컨테이너 내부에 노출 된(expose) 포트를 호스트 임의의 포트에 게시
--workdir, -w컨테이너 내부의 작업 경로(directory)

실습 환경 : UTM

  • VM 1대(k8s-master)로 진행

  • OS : Rocky Linux

js file, Dockerfile 생성

[root@k8s-master docker]# cat > 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.");
});


[root@k8s-master docker]# cat > 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"]


docker build

  • 이미지 빌드
[root@k8s-master docker]# docker build -t noderun:1.0 .
[root@k8s-master docker]# docker images | grep noderun
noderun 1.0 2ddb250a6232 2 minutes ago 182MB

docker run

  • 컨테이너 실행
docker run -d --name=node-run -p 6060:6060 noderun:1.0
[root@k8s-master docker]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS              PORTS                                       NAMES
763c05bf08b0   noderun:1.0   "/sbin/tini -- node …"   About a minute ago   Up About a minute   0.0.0.0:6060->6060/tcp, :::6060->6060/tcp   node-run
[root@k8s-master docker]# 
[root@k8s-master docker]# curl localhost:6060
HostName: 763c05bf08b0

docker top | port | stats

  • 컨테이너에서 실행 중인 프로세스 조회
[root@k8s-master docker]# docker top node-run 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                13720               13698               0                   21:55               ?                   00:00:00            /sbin/tini -- node runapp.js
root                13740               13720               0                   21:55               ?                   00:00:00            node runapp.js

docker port

  • 컨테이너에 매핑된 포트 조회
[root@k8s-master docker]# docker port node-run
6060/tcp -> 0.0.0.0:6060
6060/tcp -> [::]:6060

docker stats

  • 컨테이너 리소스 사용 통계에 대한 실시간 스트림 출력 (스트림 통계 비활성화 , --no-stream)
[root@k8s-master docker]# docker stats node-run
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O   PIDS
763c05bf08b0   node-run   0.00%     7.418MiB / 3.501GiB   0.21%     2.36kB / 1.04kB   0B / 0B     8

docker logs

  • 컨테이너 로그 출력
[root@k8s-master docker]# docker logs -f node-run
Your Connected.
Your request arrived.
Your Connected.
Your request arrived.

docker [container] inspect

  • 컨테이너 내부 구조 정보 확인
  • kubectl describe 와 비슷한 느낌이다.
[root@k8s-master docker]# docker container inspect node-run 
[
    {
        "Id": "763c05bf08b0f0dd83316b2fd5b8a85c715d2ffb67d2b70f526a2c8d52b3496e",
        "Created": "2024-06-23T12:55:27.721165996Z",
        "Path": "/sbin/tini",
        "Args": [
            "--",
            "node",
            "runapp.js"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 13720,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-06-23T12:55:28.036524563Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:f1d59eed1cac86972983802e27032bbc69080115c0269fd4ea3157f1833c4134",
        "ResolvConfPath": "/var/lib/docker/containers/763c05bf08b0f0dd83316b2fd5b8a85c715d2ffb67d2b70f526a2c8d52b3496e/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/763c05bf08b0f0dd83316b2fd5b8a85c715d2ffb67d2b70f526a2c8d52b3496e/hostname",
        "HostsPath": "/var/lib/docker/containers/763c05bf08b0f0dd83316b2fd5b8a85c715d2ffb67d2b70f526a2c8d52b3496e/hosts",
        "LogPath": "/var/lib/docker/containers/763c05bf08b0f0dd83316b2fd5b8a85c715d2ffb67d2b70f526a2c8d52b3496e/763c05bf08b0f0dd83316b2fd5b8a85c715d2ffb67d2b70f526a2c8d52b3496e-json.log",
        ... 생략      

docker cp | restart

  • 컨테이너 내의 source 수정 하기
[root@k8s-master docker]# vi runapp.js

const http = require('http');
const server = http.createServer().listen(6060);

server.on('request', (req, res) => {
console.log('wookja request arrived.');
			  # 수정
res.write("HostName: " + process.env.HOSTNAME + "\n");
res.end();
});
server.on('connection', (socket) => {
console.log("wookja Connected.");
             # 수정
});
[root@k8s-master docker]# docker cp runapp.js node-run:/app/runapp.js
Successfully copied 2.05kB to node-run:/app/runapp.js
[root@k8s-master docker]# docker ps |grep node
763c05bf08b0   noderun:1.0   "/sbin/tini -- node …"   26 minutes ago   Up 26 minutes   0.0.0.0:6060->6060/tcp, :::6060->6060/tcp   node-run

[root@k8s-master docker]# docker restart node-run
node-run
[root@k8s-master docker]# docker logs -f node-run 
Your Connected.
Your request arrived.
Your Connected.
Your request arrived.
wookja Connected.
wookja request arrived.

docker exec [option][container] [command]

  • nginx 컨테이너 실행 후 접속하기
[root@k8s-master docker]# docker run -d --name=mynginx -p 80:80 nginx:alpine
Unable to find image 'nginx:alpine' locally
... 생략

[root@k8s-master docker]# docker exec -it mynginx /bin/sh
/ # ls
bin                   etc                   mnt                   run                   tmp
dev                   home                  opt                   sbin                  usr
docker-entrypoint.d   lib                   proc                  srv                   var
docker-entrypoint.sh  media                 root                  sys

docker stop & docker rm

  • 컨테이너 중지 , 삭제
docker stop [container]
docker rm [container]

docker images (image ls)

  • 이미지 조회
docker images
docker image ls

docker image rm

  • 이미지 제거
docker image rm [image]


profile
차곡차곡 쌓아가는 Cloud 블로그

0개의 댓글