Docker 이미지와 컨테이너 간의 관계 확인

17931 단어 Docker
메모 확인

Docker의 이미지와 용기의 관계를 잘 몰라서.
검증해 봤어요.

Docker Image 다운로드


일단 이미지가 있는지 확인할게요.
$ docker images | grep golang
# なし
아니요.
따라서 이미지를 다운로드합니다.
$ docker pull golang
Using default tag: latest
latest: Pulling from library/golang
d6ff36c9ec48: Pull complete
c958d65b3090: Pull complete
edaf0a6b092f: Pull complete
80931cf68816: Pull complete
813643441356: Pull complete
d2d74a4aa2e6: Pull complete
568efbaeb143: Pull complete
Digest: sha256:4c3279e05a0131c0565466ac538755f104d8d936efbc4c30ba7d717c73f3e2c2
Status: Downloaded newer image for golang:latest
docker.io/library/golang:latest
이미지를 다시 확인합니다.
$ docker images | grep golang
golang                           latest              75605a415539        2 weeks ago         839MB
있다.
이곳에서 인상이 형성되었다.
확인은 했지만 컨테이너가 제대로 되지 않았습니다.
$ docker ps -a | grep golang
# なし

Docker Image 개요

$ docker image inspect golang
[
    {
        "Id": "sha256:75605a4155391abe376fc8124083ec52a2409ceb8a6b5ac6aae7eca133353ce3",
        "RepoTags": [
            "golang:latest"
        ],
        "RepoDigests": [
            "golang@sha256:4c3279e05a0131c0565466ac538755f104d8d936efbc4c30ba7d717c73f3e2c2"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-08-12T00:22:46.039326176Z",
        "Container": "b90c34099f107af34b5e4581d76118f411d58162c68eea08415ce9b18a640c42",
        "ContainerConfig": {
            "Hostname": "b90c34099f10",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOLANG_VERSION=1.15",
                "GOPATH=/go"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) WORKDIR /go"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:1b1d02bcac5b6e48f9b2312bc8bed4f3bb3f96b61fb2bf70fcfd1a1f19b98032",
            "Volumes": null,
            "WorkingDir": "/go",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "18.09.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOLANG_VERSION=1.15",
                "GOPATH=/go"
            ],
            "Cmd": [
                "bash"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:1b1d02bcac5b6e48f9b2312bc8bed4f3bb3f96b61fb2bf70fcfd1a1f19b98032",
            "Volumes": null,
            "WorkingDir": "/go",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 838873792,
        "VirtualSize": 838873792,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d131d3a907fd243f1930b59643d8a8063185972576e5d79edbf308e91e15a353/diff:/var/lib/docker/overlay2/e7a3845fa041337b03c7d45fed7a42b4e6906f73aac17504c41fa33baf8494f3/diff:/var/lib/docker/overlay2/0522b267b619c032b9959fd9ac957c6c45affa3375ee790320ca7d9521e9a4f6/diff:/var/lib/docker/overlay2/91468ffbb5607e8fcbab36d1315e257edceced8d959271b3f527f588f1b41203/diff:/var/lib/docker/overlay2/bfbbc63ca1366753931d7ba67a9e2e793abf216a54cdfbbae9c70959b5688716/diff:/var/lib/docker/overlay2/bb3852e88617e42f5cec2f2620bf5116eba6b846ce24e016193a8fd6a9eef963/diff",
                "MergedDir": "/var/lib/docker/overlay2/6a27891c4193c1c910515bf07d3138d5e377f986144545dde9e26bc639f5b071/merged",
                "UpperDir": "/var/lib/docker/overlay2/6a27891c4193c1c910515bf07d3138d5e377f986144545dde9e26bc639f5b071/diff",
                "WorkDir": "/var/lib/docker/overlay2/6a27891c4193c1c910515bf07d3138d5e377f986144545dde9e26bc639f5b071/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:0ced13fcf9441aea6c4ee1defc1549772aa2df72017588a1e05bc11dd30b97b6",
                "sha256:b2765ac0333ae89829bb991a50d961bbb20069bac6eefce6fab8ef4d253ba24c",
                "sha256:7a9460d5321859e34344b2817f9e87b4c18bc9eb42dca91e0822d3511ea42a79",
                "sha256:e5df62d9b33ae0f2e75d7a92270f20fcac04986ac22dd0674c0420c171cc0d56",
                "sha256:7279468fdfadf1018dd7787eafb864fedcbeb4f2877d7a541295948467c42ac9",
                "sha256:e63d5e7bcdc59f31b30c1074357ff73a75dd10c03494888fd47e6dc48950b87a",
                "sha256:2936bd2191b23bb4a430d31e0b62ddf95eaf8e46452ac11b9f2bbcfc882499b5"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

Docker 컨테이너 시작


용기가 docker run에서 시작됩니다.
내부에서run은 이미지에서 용기를 구축하고 시작합니다.
용기의 구조일 뿐이라면dockercreate로 하는 것 같습니다.
$ docker run golang
이렇게 되면 컨테이너가 만들어질 거예요.
내부는dockercreate를 통해 용기 구조를 하고 순식간에 용기가 시작되며やること바로 끝납니다.
Docker run으로 하는 일.
이곳やることDockerfile 등에 기재된 것을 가리킨다.
다음 내용을 참조하십시오.
https://github.com/docker-library/golang/blob/master/1.15/alpine3.12/Dockerfile
여기에 적힌 처리는 이동해서 곧 끝납니다.
$ docker ps -a | grep golang
86f4bdeb8a98        golang                         "bash"                   5 seconds ago       Exited (0) 4 seconds ago                        festive_dhawan
festive_dhawan, 용기를 마음대로 명명합니다.
이 밖에 운행docker run golang할 때마다 용기가 증가한다.
$ docker run golang
$ docker ps -a | grep golang
d53900629ae3        golang                         "bash"                   5 minutes ago       Exited (0) 5 minutes ago                        quizzical_aryabhata
86f4bdeb8a98        golang                         "bash"                   13 minutes ago      Exited (0) 13 minutes ago                       festive_dhawan
다음 이름은 quizzical_aryabhata 입니다.
이렇게 되면dockerrun 때마다 용기가 증가합니다.

Docker run으로 만들면 컨테이너를 자동으로 끄려고 해요.

$ docker run --rm golang 
--rm 사용 후 용기를 삭제합니다.

Docker run에서 만든 컨테이너의 이름을 지정하고 싶습니다.

$ docker run --name golang_test golang
$ docker ps -a | grep golang
2b871a22d588        golang                         "bash"                   About a minute ago   Exited (0) About a minute ago                       golang_test
golang_테스트라는 이름을 지정할 수 있습니다.
용기의 이름은 중복된 이름을 설정할 수 없기 때문에 같은 이름을 다시 사용하여 용기를 만들면
잘잘못을 저지르다.

컨테이너 삭제

$ docker rm golang_test
# または   docker rm 2b871a22d588
이름이나 id를 지정합니다.

저는 Docker에서 더 자세한 설정을 하고 싶어요.


그때는 Docker run이 아니었어요.
Dockerfile을 만들거나 docker-compose를 사용하십시오.
여기서 설명을 생략합니다.
docker run관리 대상이 복잡해질 때 옮긴 것 같은데.
아마 처음부터 docker-compose를 하는 것도 괜찮을 거예요.
참고 자료
  • Qiita-Dockerfile을 써보도록 하겠습니다.
  • Qiita-Docker compose를 필두로
  • Docker 이미지, 컨테이너 용량 확인

    $ docker system df -v | grep golang
    golang                           latest              75605a415539        2 weeks ago         838.9MB             0B                  838.9MB             2
    d53900629ae3        golang                         "bash"                   0                   0B                  11 minutes ago      Exited (0) 11 minutes ago   quizzical_aryabhata
    86f4bdeb8a98        golang                         "bash"                   0                   0B                  19 minutes ago      Exited (0) 19 minutes ago   festive_dhawan
    
    첫 번째 줄에 이미지 용량 838.9MB 표시
    두 번째 줄, 세 번째 줄은 용기 용량 0B를 표시합니다.
    Go 언어 자체, Docker가 준비한 OS 영역 등 이미지에 용량이 있습니다.
    용기에 용량이 없는 것을 볼 수 있습니다.
    용기에 그림의 데이터를 사용한 것 같습니다.
    그래서 컨테이너를 많이 만들어도 그 정도로 용량이 늘어나지 않는다.

    Docker 컨테이너 용량 사용 위치

    $ docker run -it golang
    root@a8c84548d1d5:/go#
    
    -it 옵션을 사용하면 컨테이너를 만든 후 콘솔에 들어갈 수 있습니다.
    용량을 늘리기 위해 시도apt update.
    root@a8c84548d1d5:/go# apt update
    Get:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
    Get:2 http://deb.debian.org/debian buster InRelease [122 kB]
    Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
    Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [224 kB]
    Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7906 kB]
    Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [7868 B]
    Fetched 8378 kB in 2s (4638 kB/s)
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    All packages are up to date.
    
    용량을 확인하다.
    $ docker system df -v | grep golang
    golang                           latest              75605a415539        2 weeks ago         838.9MB             0B                  838.9MB             3
    a8c84548d1d5        golang                         "bash"                   0                   17.5MB              3 minutes ago       Exited (0) 24 seconds ago   objective_curran
    d53900629ae3        golang                         "bash"                   0                   0B                  43 minutes ago      Exited (0) 43 minutes ago   quizzical_aryabhata
    86f4bdeb8a98        golang                         "bash"                   0                   0B                  51 minutes ago      Exited (0) 51 minutes ago   festive_dhawan
    
    두 번째 줄objective_curran의 용량을 주의하십시오.17.5MB 및 기타 용기0B에 비해 용량이 더 크다.
    용기에 다운로드와 업데이트 용량이 있는 것을 발견했습니다.
    이미지는 언제든지 삭제되며 대원이 사라지지 않으면 다시 다운로드할 수 있습니다.

    총결산



    이름
    개요
    포함된 데이터
    삭제할 수 있습니까?
    형상
    공유 사용 기반
    운영 체제 정보 및 테마 패키지
    삭제하고 다운로드하면 됩니다.캐시 의미
    컨테이너
    용도에 따라 준비하다
    이미지에서 생성된 개별 변경 사항
    확인이 필요하지만 삭제해도 문제가 없도록 설계하는 것이 가장 좋다
  • 용기는 서버 외부에서 최초로 데이터를 가지거나volumes 등을 사용하며 필요한 데이터는 호스트 OS 측에서 가지는 것이 좋다
  • 도 컨테이너를 형상화할 수 있을 것 같다.스스로 Docker hub를 줄 수 있을 것 같습니다.
  • Qiita-Docker 이미지 제작 방법
  • 좋은 웹페이지 즐겨찾기