Hands On Docker Untuk Pemula Golang Dev
Jadual Kandungan
- Ikhtisar
- Prasyarat
- Fail Docker
-
Karang Docker
- Nginx
- Mysql
- Berhijrah
- API
- Tersuai
- Rujukan
Gambaran keseluruhan
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.
Prasyarat
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.
Dockerfile
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
tahniah
Anda kini boleh menguji Menggunakan API dengan Posmen atau apl lain.
Karang Docker
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.
Proksi Nginx
# 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
- nginx: ini ialah nama perkhidmatan
- imej: nginxproxy/nginx-proxy:1.6 ini ialah Imej yang akan kami gunakan, serupa dengan FROM di Dockerfile.
- rangkaian: ini ialah rangkaian di dalam Docker yang akan digunakan oleh perkhidmatan.
-
port: ini adalah untuk menetapkan port untuk perkhidmatan untuk menggunakan
: , 80 ialah port lalai untuk HTTP -
jilid: ini adalah Jilid berterusan untuk menyimpan data untuk perkhidmatan ini,
: :ro (baca sahaja). - persekitaran: ini adalah untuk menggunakan pembolehubah persekitaran.(8)
Mysql
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
- db: ini ialah nama perkhidmatan
- imej: mysql:8.0 perkhidmatan ini menggunakan Imej mysql versi 8.0
- rangkaian: perkhidmatan ini menggunakan rangkaian tersuai dinamakan baharu kemudian rangkaian baharu menggunakan pangkalan data nama alias
- healthcheck: ini adalah untuk menyemak operasi perkhidmatan dengan menjalankan ujian, ujian: mysqladmin ping -h pangkalan data -u ${DB_USER} --password=${DB_PASSWORD} ujian ini ping pangkalan data mysql.
- jilid: ini adalah untuk menyimpan data berterusan di dalam volum.
- port: ini adalah port yang akan digunakan oleh perkhidmatan, dalam perkhidmatan ini kami menggunakan 3308 sebagai port mesin tempatan kerana port 3306 sudah digunakan untuk mysql pada mesin tempatan kami.
- persekitaran: ini adalah untuk menggunakan pembolehubah persekitaran, dalam perkhidmatan mysql ini kita memerlukan kata laluan akar dan nama pangkalan data.(7)
Berhijrah
sudo docker build .
- migrate-up: ini ialah nama perkhidmatan
- imej: pindahkan/pindah perkhidmatan ini gunakan pindahkan Imej
- rangkaian: perkhidmatan ini menggunakan rangkaian baru sama seperti perkhidmatan db
- jilid: data migrasi daripada ./cmd/migrate/migration setempat telah disalin ke direktori perkhidmatan /migrasi
- arahan: ini adalah untuk menjalankan arahan pada perkhidmatan ini, ["-path", "/migrations", "-database", "${CONNECT_DB}", "-verbose", "up"] arahan ini serupa dengan migrate -path /migrations -database mysql://root:some-secret-password@tcp(database:3306)/ecom -verbose up. (9)
- pautan: ini untuk memautkan perkhidmatan kepada perkhidmatan lain, perkhidmatan pindah ini dipautkan kepada perkhidmatan db
- depends_on: ini untuk membuat perkhidmatan ini dilaksanakan selepas syarat tertentu, db: condition: service_healthy min perkhidmatan pindah ini akan dilaksanakan apabila ujian perkhidmatan db mendapat keputusan service_healthy.
API
# 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
- api: ini ialah nama perkhidmatan
- rangkaian: ini adalah rangkaian untuk perkhidmatan ini, perkhidmatan ini menggunakan rangkaian baharu supaya ia boleh menyambung ke perkhidmatan db, juga menyambung ke lalai rangkaian yang digunakan oleh perkhidmatan nginx.
- bina: ini adalah untuk membina perkhidmatan, perkhidmatan ini menggunakan Dockerfile.
- mulakan semula: perkhidmatan ini akan dimulakan semula apabila perkhidmatan gagal
- jilid: ini ialah data berterusan yang disimpan pada volum /go/src/api.
- ports: port untuk perkhidmatan ini.
- persekitaran: nilai persekitaran perkhidmatan ini diperlukan.
- pautan: perkhidmatan ini dipautkan kepada perkhidmatan db kerana ia perlu menggunakan pangkalan data mysql.
- depende_on: perkhidmatan ini akan dilaksanakan pada beberapa syarat, apabila berpindah: sudah service_completed_successfully, apabila keputusan ujian db adalah service_healthy, dan apabila nginx service_started
Adat
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
- jilid: volum tersuai yang dibuat ini dinamakan db_data:
- rangkaian: ini mencipta rangkaian tersuai yang dinamakan baharu
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.
tahniah
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
Rujukan
(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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

Golang dan C masing-masing mempunyai kelebihan sendiri dalam pertandingan prestasi: 1) Golang sesuai untuk kesesuaian tinggi dan perkembangan pesat, dan 2) C menyediakan prestasi yang lebih tinggi dan kawalan halus. Pemilihan harus berdasarkan keperluan projek dan tumpukan teknologi pasukan.

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,
