Artikel ini tidak akan menerangkan cara Docker berfungsi pada hud, sebaliknya Artikel ini akan menerangkan tujuan pada setiap kod yang ditulis pada fail Dockerfile dan docker-compose.yml supaya kami boleh menulis konfigurasi Docker kami untuk projek lain.
Kami memerlukan beberapa projek dengan Dockerfile dan docker-compose sebagai contoh, di sini kami akan menggunakan Projek Golang bernama Ecom sebagai contoh. Untuk menggunakan Dockerfile anda perlu menyediakan Pangkalan Data Tempatan seperti yang dinyatakan pada README.
Fail Docker digunakan untuk mencipta imej bekas.(6)
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
DARI golang:1.23.0 SEBAGAI peringkat binaan ini ialah Imej untuk Apl kami, ia sama seperti kami memuat turun enjin Go ke Mesin kami, Docker memerlukan Imej khusus untuk menjalankan Kod kami.(1)(2)
WORKDIR /app ini ialah direktori kerja yang kami mahu Kod kami dilaksanakan di /app.
SALIN go.mod go.sum ./ kod ini akan menyalin fail go.mod dan go.sum daripada mesin tempatan ke direktori ./ pada Docker.
RUN go mod muat turun ini akan melaksanakan arahan go mod muat turun pada Docker
SALINAN . . kod ini akan menyalin semua projek fail dan folder daripada mesin tempatan ke Docker.
RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go kod ini akan melaksanakan arahan untuk membina aplikasi Golang pada OS linux ke folder /api pada Docker.
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
DARI awal SEBAGAI gores peringkat binaan realease digunakan untuk mencipta imej minimum yang mengandungi hanya perkara yang diperlukan oleh aplikasi.
WORKDIR / kami akan menggunakan root / sebagai direktori kerja.
SALINAN --from=build-stage /api /api ini akan menyalin direktori /api daripada imej build-stage ke /api pada build-realease-stage.
DEDAHKAN 8080 ini akan mendedahkan port 8080 supaya kami boleh mengakses API dengan port 8080 di luar Docker.
ENTRYPOINT [ "/api" ] ini akan menetapkan lalai boleh laku pada /api
Mari cuba fail Docker kami.
sudo docker build .
bina buruh pelabuhan untuk membina projek kami menjadi Imej. Anda boleh menambah tag -t project-ecom untuk mengenal pasti Imej yang anda bina dengan lebih mudah.(3)
Anda boleh menyemak senarai Imej dengan arahan sudo docker image ls
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
Kemudian Jalankan Imej Docker kami
--rm untuk mengeluarkan bekas apabila dihentikan
--hos rangkaian untuk menyambungkan aplikasi docker ke mesin localhost (4),(5)
--env-file .env untuk mengakses nilai persekitaran melalui fail .env
ID imej docker 98bc0128576e
Anda kini boleh menguji Menggunakan API dengan Posmen atau apl lain.
Docker Compose digunakan untuk membuat berbilang perkhidmatan kontena dan menjalankannya di dalam Docker. Dalam projek docker-compose.yml ini terdapat 4 perkhidmatan yang akan kami terangkan.
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
sudo docker build .
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
Jom cuba Docker Compose kami
sudo docker build .
Arahan ini akan mencipta imej untuk setiap perkhidmatan dan menjalankan setiap bekas.
sudo docker run --rm --network host --env-file .env 98bc0128576e
Anda boleh menyemak bekas docker-compose.yml kami yang dibuat.
nginx: image: nginxproxy/nginx-proxy:1.6 networks: - default ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro environment: HTTPS_METHOD: nohttps
Anda boleh menyemak kelantangan docker-compose.yml kami yang dibuat.
db: image: mysql:8.0 networks: new: aliases: - database healthcheck: test: mysqladmin ping -h database -u ${DB_USER} --password=${DB_PASSWORD} volumes: - db_data:/var/lib/mysql - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3308:3306" environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_DATABASE: ${DB_NAME}
Anda boleh menyemak imej docker-compose.yml kami yang dibuat.
Anda boleh menguji Consume API daripada projek kami berdasarkan dokumentasi pada README dengan Posman atau apl lain.
jika anda telah melakukannya, anda boleh menghentikan bekas dengan,
migrate-up: image: migrate/migrate networks: - new volumes: - ./cmd/migrate/migrations:/migrations - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro command: ["-path", "/migrations", "-database", "${CONNECT_DB}", "-verbose", "up"] links: - db depends_on: db: condition: service_healthy
Atau jika anda mahu memadamkan semua perkhidmatan kontena di dalam karang buruh pelabuhan, anda boleh jalankan,
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
(1)Rujukan Fail Docker
(2)Imej Pangkalan Docker
(3) Binaan Docker
(4)Tutorial Rangkaian Docker
(5)Pemacu Rangkaian Docker
(6)Menulis Fail Docker
(7)Docker Hub Mysql
(8)Dokumen Proksi Nginx
(9)Golang Berhijrah
Atas ialah kandungan terperinci Hands On Docker Untuk Pemula Golang Dev. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!