Docker - 컨테이너와 이미지 관리

문한성·2023년 4월 12일
0

공부

목록 보기
21/28
post-thumbnail

이미지와 컨테이너 삭제하기

도커 컨테이너를 삭제한다.

docker rm <컨테이너>

중지된 모든 컨테이너를 삭제한다.

docker container prune

도커 이미지를 삭제한다.

docker rmi <이미지>

사용중이 아니고 태그가 존재하지 않는 모든 이미지를 삭제한다. 태그가 존재하는 이미지도 삭제하려면 뒤에 -a 옵션을 붙여준다.

docker image prune

이미지를 삭제 할 때, 해당 이미지를 포함하고 있는 컨테이너가 존재한다면 컨테이너의 실행 유무와 상관없이 삭제가 불가능하다.

컨테이너가 멈추면 자동으로 삭제하기

docker run 명령어를 통해 도커를 실행할 때에는 --rm 옵션을 주어 컨테이너가 멈추면 자동으로 삭제가 되도록 할 수 있다. 이 옵션은 컨테이너를 멈추고 코드를 수정한 후 다시 컨테이너를 빌드해 주어야 하는 종류의 작업을 할 때 유용하다.

docker run --name client --rm -d -p 8080:80 sebcontents/client

도커 이미지 살펴보기

도커 이미지에 대한 자세히 살펴보고 싶다면 docker image inspect <이미지> 명령어를 통해 이를 살펴볼 수 있다.

docker image inspect a10f304effcf
[
    {
        "Id": "sha256:a10f304effcf4536ea01bba62621179645345b5bc700610746cb26afee28132a",
        "RepoTags": [
            "feedback-node:dev"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2023-04-11T16:14:38.608980225Z",
        "Container": "",
        "ContainerConfig": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "DockerVersion": "",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8000/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NODE_VERSION=19.8.1",
                "YARN_VERSION=1.22.19",
                "PORT=8000"
            ],
            "Cmd": [
                "npm",
                "start"
            ],
            "ArgsEscaped": true,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "/app",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 1010977087,
        "VirtualSize": 1010977087,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/i5fq39f2m4w2h6w5g3nf9076w/diff:/var/lib/docker/overlay2/6pwfi747bbjmkrnkk2d06xidn/diff:/var/lib/docker/overlay2/5jp2vx9hsgpmfexfavgqyh8z7/diff:/var/lib/docker/overlay2/10dae99d0da58fb1c2eb966512d276e815e0fb5874946fc9a481caf3a4bcfeb7/diff:/var/lib/docker/overlay2/ef8dc2e5e02a3d91e2068a460c5ae9dfc1c4f9a6654c9e9653d2b1fc5d0bcaa4/diff:/var/lib/docker/overlay2/2030cb1ceb7c0fee62b67d8cc2a19d699470f0f82863899630ee5590b8a147f2/diff:/var/lib/docker/overlay2/8b78bc1810077f7349de46506d4981559a5294026ae343508b6f99fc40ca6563/diff:/var/lib/docker/overlay2/43340b6997d9c466865a67c72c1ee769b49957a9ec84287c6d5154044ff419cb/diff:/var/lib/docker/overlay2/5fb01435c1a8accae60f7dc58e720e93163a54347fe156f9a00ce23f9dd76213/diff:/var/lib/docker/overlay2/e457936d20bc3fad67776dfaa5ea737626c7d87ebb7c18c10818dac715823db2/diff:/var/lib/docker/overlay2/33784312efa3eeef392c0fa8e47bcdca2b0a0d8dd704800eaa80af2c717493e7/diff:/var/lib/docker/overlay2/57377088239a9db0ce907181968e6240e370910da447efa897f871978f73ae68/diff",
                "MergedDir": "/var/lib/docker/overlay2/v8rn8cakvetmqht10dn8boii0/merged",
                "UpperDir": "/var/lib/docker/overlay2/v8rn8cakvetmqht10dn8boii0/diff",
                "WorkDir": "/var/lib/docker/overlay2/v8rn8cakvetmqht10dn8boii0/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:ec09eb83ea031896df916feb3a61cefba9facf449c8a55d88667927538dca2b4",
                "sha256:053a1f71007ec7293dceb3f229446da4c36bad0d27116ab5324e1c7b61071eae",
                "sha256:a90e3914fb92b189ed9bbe543c4e4cc5be5bd3e7d221ef585405dd35b3e4db43",
                "sha256:5ab567b9150b948de4708a880cad7026665e7e0a227dea526cc3839eca4b2515",
                "sha256:d4514f8b2aac13e66dfc8b6e15aa2feb0d4ff942a192d9481f09b45e681ceb40",
                "sha256:7efd70d0bc369b94d8c5810e20609c9e4eadc0fdaa4deabc6df52174c73104a6",
                "sha256:bf55b14248a70f89f31efca6dbcb1de3b4376c82d1c5906f754060bd4f18f390",
                "sha256:d25cfc53cd3feda742c04ecc7b07e26a8ec1769f572bf05c218edfa2d4910349",
                "sha256:a229f6e7a6155e80a80ee2d3615fe482bd85adfe4f090e152e4d296ef81ffc6d",
                "sha256:4f8487a50a113ebff84d13c007dce271d6305816b9b099b959dd33669f84f152",
                "sha256:f1ebef12b48793407461abd729ca2844c64b466f14da09d4e5bfeb17d4499c7b",
                "sha256:23e0c4a511f4087608e513f2f0ea7e99bd0b0739bfa2f22130974ce1db90e9fc",
                "sha256:b6bd2b72b3a21ea8e877451eaf7a38e4dcdc787f237ebbe0e02fcdc7cfeccaae"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-04-11T16:14:38.95737024Z"
        }
    }
]

컨테이너에서의 파일 복사

docker cp <파일경로> <컨테이너:컨테이너 내부의 경로>를 통해 로컬 환경의 파일을 컨테이너 내부로 넣을 수 있고 이와 반대로 docker cp <컨테이너:컨테이너 내부의 경로> <파일경로>를 통해 도커 내부의 파일을 로컬 환경으로 가져올 수 있다. 이 명령어는 컨테이너 내부로 설정 파일을 변경해 넣거나, 컨테이너 내부의 로그를 꺼낼 때 유용하게 사용될 수 있다.

docker cp ./ part1:/usr/local/apache2/htdocs/

컨테이너와 이미지에 태그 추가하기

컨테이너

docker run에서 --name 옵션을 통해 컨테이너에 이미지를 줄 수 있다. 혹은 컨테이너의 이름은 바꿔주고 싶다면 다음을 통해 바꿔줄 수 있다.

docker rename <에전 이름> < 이름>

이미지

도커에서 이미지는 tag라는 이름으로 존재하는데 tag는 크게 name:tag로 콜른을 통해 2가지 부분로 나뉜다. name은 repository라고도 불리며 일반적으로 생각하는 이름을 나타내고, tag는 이미지의 특정한 버전을 나타내는데 사용된다.

docker image tag <이름을 바꿀 이미지> <원하는 이미지명>

존재하는 이미지의 이름을 바꿀 수 있고, dockerfile을 통해 build 할 때에는 -t 옵션을 이용해 이름을 지정해줄 수 있다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글