Reference
도커 이미지와 도커 컨테이너의 관계
도커의 특징
Dockerfile에 컨테이너 정보 관리
Dockerfile의 코드를 기반으로 복제 및 배포
도커 사용의 예
도커 사용의 의의
1) 환경 차이로 인한 문제 방지
Dockerfile)2) 애플리케이션 구성 관리의 용이성
예시
version: "3"
services:
web:
image: gibyodocker/web
ports:
- "3000:3000"
environment:
REDIS_TARGET: redis
depends_on:
- redis
redis:
image: "redis:apline"
DockerfileDockerfile에 도커가 어떻게 이미지를 만들고 실행할지 정의예시
[ helloworld ] 쉘 스크립트
#!/bin/sh
echo "Hello, World!"
[ Dockerfile ]
FROM ubuntu:16.04
COPY helloworld /usr/local/bin
RUN chmod +x /usr/local/bin/helloworld
CMD ["helloworld"]
FROM 인스트럭션
FROM에서 지정한 이미지를 기본적으로 도커 허브 레지스트리에서 참조COPY 인스트럭션
RUN 인스트럭션
CMD 인스트럭션
RUN 인스트럭션은 이미지를 빌드할 때 실행되고 CMD 인스트럭션은 컨테이너를 시작할 때 한번 실행됨
RUN은 애플리케이션 업데이트 및 배치에, CMD는 애플리케이션 자체를 실행하는 명령
1) 애플리케이션 만들기
[ 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.ListenAndServer(); err != nil {
log.Println(err)
}
}
2) Dokerfile 만들기
[ Dokerfile ]
FROM golang:1.9
RUN mkdir /echo
COPY main.go /echo
CMD ["go", "run", "/echo/main.go"]
3) 도커 이미지 빌드
$ docker image build -t example/echo:latest .
4) 도커 컨테이너 실행
$ docker container run example/echo:latest