跳转至

搭建容器化开发环境

本文关注如何在采用 Apple 芯片的 Mac 电脑上,基于 Multipass 搭建容器化开发环境,包括:

  • Docker
  • K8S 集群
  • 镜像仓库

等基础组件。

Multipass

安装

brew install --cask multipass

multipass version

共享数据

安装依赖(可选)

multipass shell $VM

sudo snap install multipass-sshfs

挂载目录

multipass mount $HOME $VM:/tmp/

multipass info $VM

Docker

快速启动

# 启动 Docker 虚拟机实例
multipass launch docker

# 主机使用 docke 命令
multipass alias docker:docker

export PATH="$PATH:$HOME/Library/Application Support/multipass/bin"

type docker # docker is '~/Library/Application Support/multipass/bin/docker'

启动配置

sudo update-alternatives --config editor

sudo systemctl edit docker.service
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

服务配置

sudo vim /etc/docker/daemon.json

配置项参见 https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com"
    ],
    "insecure-registries" : ["192.168.205.59:32000"]
}

命令行工具

基础命令

docker run -d -p 3306:3306 --name nacos -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server:8.0.30-aarch64

docker exec -it nacos bash

# mysql -u root -p

docker run --name pg  -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres:9.6.24

Compose

Docker 虚拟机添加了 Docker 镜像源,可以通过 apt 命令直接安装。

multipass shell docker

sudo apt update

sudo apt install docker-compose-plugin

docker compose  --help

Build

使用 build 命令,需要理解 Docker 构建上下文,最佳实践是创建一个空目录,将 Dockerfile 和用到的所有文件置于该目录下,使用该目录作为 Docker 构建上下文路径。

IMAGE_NAME=$(uuidgen)
docker build -t ttl.sh/${IMAGE_NAME}:1h .
docker push ttl.sh/${IMAGE_NAME}:1h

镜像仓库

临时匿名镜像仓库

ttl.sh 是一个匿名的临时镜像仓库,免费使用,无需登录,并且已经开源。

MicroK8s 内置镜像仓库

microk8s enable registry

# 检查,响应状态码 200
http $(MICROK8S_VM_IP):32000/v2/

镜像加速器

{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com"
    ]
}

K8S

快速安装

brew install ubuntu/microk8s/microk8s
microk8s install

microk8s status

访问配置

microk8s config view > $HOME/.kube/config

启用插件

microk8s enable dashboard dns ha-cluster helm3 ingress metallb metrics-server rbac registry storage

FAQ

Docker 拉取镜像失败

问题描述:

Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: TLS handshake timeout

解决方案:

配置镜像加速器。

推送镜像到 MicroK8s 内置镜像仓库报错

问题描述:

Get "https://192.168.205.59:32000/v2/": http: server gave HTTP response to HTTPS client

解决方案:

{
    "insecure-registries" : ["192.168.205.59:32000"]
}

HELM 拉取镜像失败

问题描述:

register server gave HTTP response to HTTPS client

解决方案:

# /var/snap/microk8s/current/args/containerd-template.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.205.59:32000"]
endpoint = ["http://192.168.205.59:32000"]

Docker 访问失败

问题描述:

docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded.

解决方案:

docker pull hub-mirror.c.163.com/multiarch/qemu-user-static

参考


最后更新: September 10, 2023

评论