본문 바로가기
컨테이너/도커

08 docker image 생성

by ^..^v 2019. 5. 20.
728x90
반응형

도커 컨테이너는 도커 이미지를 바탕으로 작성하지만 반대로 도커 컨테이너를 바탕으로 도커 이미지를 작성할 수도 있습니다.

 

컨테이너로부터 이미지 작성

컨테이너로부터 이미지를 작성하려면 docker container commit 명령을 사용합니다.

root@server:~/docker# docker container commit --help

Usage:	docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

 

echo 이미지를 이용하여 컨테이너를 실행합니다.

root@server:~/docker# docker container run -d -p 9090:8080 echo 
04b4015205a1ac4fa57c51fabaac12022d8ce6ccc86e4607dccf706ee0ff0459

 

호스트 머신에 main.go 파일의 내용을 수정합니다.

package main

import (
	"fmt"
	"log"
	"net/http"
)
func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		log.Println("received request")
		fmt.Fprintf(w, "Hello Docker ^..^ !!")
	})

	log.Println("start server")
	server := &http.Server{Addr: ":8080"}
	if err := server.ListenAndServe(); err != nil {
		log.Println(err)
	}
}

 

수정한 main.go 파일을 컨테이너로 복사하고, 컨테이너를 중지 후 재기동합니다.

root@server:~/docker# docker container cp ./main.go 04b401:/echo/main.go

root@server:~/docker# docker container stop 04b4
04b4

root@server:~/docker# docker container restart 04b4
04b4

 

호스트 머신에서 브라우저를 통해서 접근했을 때 변경된 내용이 출력되는 것을 확인합니다. docker container commit 명령을 이용해서 이미지를 생성합니다.

root@server:~/docker# docker container commit --author "myanjini" --message "my echo web" 04b401 myanjini/hellodocker:1.0
sha256:b45a629762f8d40ae21648d08af19860a22f6121805d21c26fcf8d5d82643e59

root@server:~/docker# docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
myanjini/hellodocker   1.0                 b45a629762f8        8 seconds ago       758MB
echo                   latest              37d841743bbb        15 minutes ago      750MB
golang                 1.9                 ef89ef5c42a9        10 months ago       750MB

 

docker image inspect 명령을 이용해서 이미지 정보를 확인할 수 있습니다.

root@server:~/docker# docker image inspect myanjini/hellodocker:1.0
[
    {
        "Id": "sha256:b45a629762f8d40ae21648d08af19860a22f6121805d21c26fcf8d5d82643e59",
        "RepoTags": [
            "myanjini/hellodocker:1.0"
        ],
        "RepoDigests": [],
        "Parent": "sha256:37d841743bbbd12ca7a1aa130019de54c6e0cea72137456ad8730b71cab02f18",
        "Comment": "my echo web",
        "Created": "2019-05-20T09:01:39.827496355Z",
        "Container": "04b4015205a1ac4fa57c51fabaac12022d8ce6ccc86e4607dccf706ee0ff0459",
        "ContainerConfig": {
            "Hostname": "04b4015205a1",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8080/tcp": {}
            },
            "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.9.7",
                "GOPATH=/go"
            ],
            "Cmd": [
                "go",
                "run",
                "/echo/main.go"
            ],
            "ArgsEscaped": true,
            "Image": "echo",
            "Volumes": null,
            "WorkingDir": "/go",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "17.05.0-ce",
        "Author": "myanjini",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8080/tcp": {}
            },
            "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.9.7",
                "GOPATH=/go"
            ],
            "Cmd": [
                "go",
                "run",
                "/echo/main.go"
            ],
            "ArgsEscaped": true,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "/go",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 757990814,
        "VirtualSize": 757990814,
        "GraphDriver": {
            "Data": null,
            "Name": "aufs"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:3b10514a95bec77489a57d6e2fbfddb7ddfdb643907470ce5de0f1b05c603706",
                "sha256:719d45669b35360e3ca0d53d159c42ca9985eb925a6b28ac38d0ded39a1314e8",
                "sha256:ce6466f43b110e66d7d3a72600262a1f1b015d9a64aad5f133f081868d4825fc",
                "sha256:fa0c3f992cbd10a0569ed212414b50f1c35d97521f7e4a9e55a9abcf47ca77e2",
                "sha256:920961b94eb367eb39736364ebd3197098b46ca7a10476b1df052ee01a6c10b3",
                "sha256:e7dc337030bab6f268888f7b7f6b4e9031232255313eca3ec21c2625b02faeda",
                "sha256:24a9d20e5beebbd886c69737cf9bed33576ba2f2f940f6055fc45424a5899cf7",
                "sha256:186d94bd2c6242e334cab1076bee2ca1dcdbb0ccc34921ed0474574b29c39d63",
                "sha256:cddaaa0bee154a77e09b43e70b59fb0ed5a6f49105958fd2d6e38c7699c29ad4",
                "sha256:77b2d155b95e2558e5745dc1a30fff6837ae1d99f57c64a746df1d9e9cab3745",
                "sha256:f7ac8c75eede3a688a20ee4d757a33a42d80615db50ff0deb0daadcf63e49155"
            ]
        }
    }
]
728x90
반응형

댓글