category: docker

docker 建立不同平台的 image

on 2022-06-29

前言

現在在開發與線上環境常常會遇到不同 CPU 架構的問題

不同 CPU 架構底層的指令集也不一樣

最常見的影響就是在其中一個平台編譯出來的程式會無法在另一個平台執行

這情況尤其是會在接近底層的程式上見到

現在普遍來說會發現在 ARM 架構底下有些程式執行起來效率更高

所以有部分公司的服務也會在線上環境的機器選用 ARM 架構的機器

情境

雖然以前公司的情況是開發在 x86-64 上

線上是 ARM 的情況

但現在自己在試驗的情況是反過來的 XD

現在 Macbook 是 M1 晶片了, M 系列是 ARM 架構

我在 GCP 開的機器是 x86-64 架構

所以在 Mac 上面 build 的 docker image 是沒法在 GCP 開的機器運行

只要執行 docker run 就會出現錯誤提示說架構不同無法執行

解決方案

docker 有提供可以建構不同平台的 image 的指令

只要多一個 buildx--platform 的指令與參數

docker buildx build --platform=linux/amd64,linux/arm64 .

Faster Multi-Platform Builds: Dockerfile Cross-Compilation Guide

Read more

Mac M1 run MySQL in local docker

on 2022-05-03

Usage

docker hub

In Apple M1

no-official image

amd64/mysql

MySQL 5.7

docker pull amd64/mysql:5.7

Run docker in local

Sample for M1(different of image name)

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d amd64/mysql:latest

Container run in 0.0.0.0

mysql --default-character-set=utf8mb4 -u root -h 0.0.0.0 -P 3306 -p -A