sudo apt install golang
고랭을 설치한다.
mkdir go-hello && cd go-hello
디렉토리를 만들어서 go 파일을 생성하고 vi로 Hello Go가 나오도록 코드를 작성한다.
hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello Go!")
}
go run hello.go
코딩한 파일을 실행하여 본다.
go build -o hello hello.go
코딩한 파일을 빌드한다.
Dockerfile
FROM scratch
COPY hello /hello
CMD ["/hello"]
docker build -t gohello .
docker run gohello
도커파일을 작성하여 고랭으로 코딩한 파일을 실행하는 이미지를 만든다.
FROM golang
ADD main.go /root
WORKDIR /root
RUN go build -o /root/mainAPP /root/main.go
#FROM alpine:latest
FROM scratch
WORKDIR /root
COPY --from=0 /root/mainApp .
CMD ["./mainApp"]
FROM gcc
WORKDIR /usr/local/src
ADD hello.c .
RUN gcc hello.c --static -o hello
FROM scratch
COPY --from=0 /usr/local/src/hello /hello
CMD ["./hello"]
FROM golang as gobuilder
WORKDIR /go/src
ADD hello.go .
RUN go build -o hello hello.go
FROM scratch
COPY --from=gobuilder /go/src/hello /hello
CMD ["./hello"]
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", HelloServer)
http.ListenAndServe(":3000", nil)
}
func HelloServer(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello world\n")
}
FROM golang as gobuilder
ENV CGO_ENABLED 0
WORKDIR /go/src
ADD web.go .
RUN go build -o web web.go
FROM scratch
COPY --from=gobuilder /go/src/web /web
CMD ["./web"]
EXPOSE 3000
https://docs.docker.com/engine/reference/builder/#dockerignore-file
ADD 또는 COPY 할 때 제외할 파일을 지정
mkdir logs
touch logs/web.log
touch logs/err.log
mkdir temp
touch temp/abc.txt temp/xyz.txt
touch hello.go
touch a b c
Dockerfile
FROM ubuntu:focal
RUN mkdir /source
WORKDIR /source
ADD . .
.dockerignore
Dockerfile
logs/
temp/
*.go
docker build --no-cache -t ignore .
docker run -it ignore bash
> ls -a
wget https://download.docker.com/mac/static/stable/x86_64/docker-20.10.6.tgz
tar xf docker-20.10.6.tgz
sudo cp docker/docker /usr/local/bin
choco install docker-cli
systemctl status docker
cat /etc/systemd/system/multi-user.target.wants/docker.service
Docker Client --> Socket File --> Docker Daemon
/run/containerd/containerd.sock
/var/run/docker.sock
sudo vi /etc/systemd/system/multi-user.target.wants/docker.service
13: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
>>
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl status docker -l
Windows 에서...
docker -H tcp://192.168.100.10:2375 ps
setx DOCKER_HOST "tcp://192.168.100.10:2375"
docker ps
https://docs.docker.com/compose/install/#install-compose-on-linux-systems
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
mkdir wp-compose && cd wp-compose
vi docker-compose.yml
version: '3.1'
services: # docker run
wordpress:
image: wordpress
restart: always
ports: # -p
- 80:80
environment: # -e
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpadmin
WORDPRESS_DB_PASSWORD: qwer1234
WORDPRESS_DB_NAME: wp
volumes: # -v
- wordpress:/var/www/html
networks: # --network
- wp-net
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: wp
MYSQL_USER: wpadmin
MYSQL_PASSWORD: qwer1234
MYSQL_ROOT_PASSWORD: qwer1234
volumes:
- db:/var/lib/mysql
networks:
- wp-net
volumes: # docker volume create
wordpress: # docker volume create wordpress
db: # docker volume create db
networks: # docker network create
wp-net: # docker network create wp-net
docker-compose up -d
docker-compose ps
docker ps
docker volume ls
docker network ls
docker-compose down
mkdir ~/go-web-compose
web.go
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", HelloServer)
http.ListenAndServe(":3000", nil)
}
func HelloServer(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello world\n")
}
Dockerfile
FROM golang as gobuilder
ENV CGO_ENABLED 0
WORKDIR /go/src
ADD web.go .
RUN go build -o web web.go
FROM scratch
COPY --from=gobuilder /go/src/web /web
CMD ["./web"]
EXPOSE 3000
docker-compose.yml
version: '3.1'
services:
goweb:
build: .
ports:
- 80:3000
docker-compose up -d
docker-compose ps
docker ps
docker-compose down
mkdir compose-scaling
cd compose-scaling
docker-compose.yml
version: '3.1'
services:
web:
image: httpd
docker-compose up -d
docker-compose ps
docker-compose scale web=10
docker-compose ps
docker ps
docker-compose down