mkdir -p ~/golang/hello
cd ~/golang/hello
sudo apt install golang
go mod init hello
hello.go
package main
import "fmt"
func main() {
fmt.Println("hello go world")
}
go run .
-OR-
go run hello.go
go build .
-OR-
go build -o hello hello.go
Dockerfile
FROM golang:1.18-buster AS gobuilder
COPY . /app
WORKDIR /app
RUN go build .
FROM scratch
COPY --from=gobuilder /app/hello /
CMD ["/hello"]
docker build -t gohello .
docker run gohello
mkdir ~/golang/goweb
cd ~/golang/goweb
go mod init goweb
goweb.go
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
go run .
curl 192.168.100.100:8080
curl 192.168.100.100:8080/encore
go build .
.dockerignore
goweb
Dockerfile
.dockerignore
Dockerfile
FROM golang:1.18-buster AS gobuilder
ENV CGO_ENABLED 0
COPY . /app
WORKDIR /app
RUN go build -o goweb .
FROM scratch
COPY --from=gobuilder /app/goweb /
CMD ["/goweb"]
EXPOSE 8080
docker build -t goweb .
docker run -d -p 80:8080 goweb
mkdir ~/golang/gogin
cd ~/golang/gogin
go mod init gogin
gogin.go
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
go mod tidy
cat go.sum
Dockerfile
FROM golang:1.18-buster AS gobuilder
ENV CGO_ENABLED 0
COPY . /app
WORKDIR /app
RUN go build -o gogin .
FROM scratch
COPY --from=gobuilder /app/gogin /
CMD ["/gogin"]
EXPOSE 8080
docker build -t gogin .
docker run -d -p 80:8080 gogin
curl 192.168.100.100/ping
Docker IaC
docker-compose
-> docker compose
docker-compose.yaml
또는 docker-compose.yml
docker-compose.yaml
version: '3'
services:
web:
image: httpd
실행
docker compose up -d
프로젝트 목록 확인
docker compose ls
서비스 목록(컨테이너)
docker compose ps
삭제
docker compose down
version: '3'
services:
web:
image: httpd
restart: always
ports:
- 80:80
environment:
MSG: hello world
volumes:
- web-contents:/var/www/html
networks:
- web-net
web2:
image: nginx
networks:
- web-net
volumes:
web-contents:
networks:
web-net:
docker compose up -d
docker compose exec web bash
> apt update; apt install curl
> curl web2
도커 컴포즈로 배포한 컨테이너는 서로 이름으로 통신가능
version: '3'
services:
myflask:
build: ./hello-flask
mydjango:
build: ./hello-django
cp -r ~/python/hello-django .
cp -r ~/python/hello-flask .
a.sh
#!/bin/sh
echo "\$MSG = $MSG"
echo "\$@ = $@"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
MSG="Hello World" ./a.sh 1 2 3 4 5 6
Busybox + APK(패키지 관리자)
패키지 인덱스
apk update
패키지 검색
apk search <PKG>
패키지 추가
apk add <PKG>
패키지 제거
apk del <PKG>
command1 && command2
command1 || command2