MacOS での開発のための Docker


開発環境は鋭利なツールであるべきです.

開発環境の構成に Homebrew を使用するのは退屈です.開発環境は一時的なもので、数分以内に再現できる必要があります.はい、ドットファイルをホストし、バイナリのインストールをサポートするスクリプトを作成することについてです.さまざまなバージョン用.したがって、最新のソリューションはコンテナの使用に関するものです.開発とそのオーケストレーションにコンテナーを使用する方法は多数あります.怠惰な開発者のための迅速な解決策は何ですか? Docker Desktop .簡単、インストールして実行します.

ただし、MacOS の Docker デスクトップはひどいものです.遅いです.ホストマシンのパワーにはまだ遅くて貪欲です.

それの使い方?

何度も試した結果、最適な解決策は、Linux 仮想マシンで Docker エンジンを実行することです.

Linuxを直接使用しないのはなぜですか?

まあ、それはさまざまなバージョンの問題を解決しません.最後に、最も説得力のある解決策としてコンテナーを使用することをあきらめます.

インストール



Docker Desktop をインストールします.実行してから無効にします.エンジンを始動しないでください.

virtualbox binaries をインストールするか、 Homebrew を使用します.はい、すでに macOS Monterey をサポートしています.

brew install --cask virtualbox
brew install --cask virtualbox-extension-pack


Vagrant binaries をインストールするか、Homebrew を使用します

brew install vagrant
vagrant plugin install vagrant-vbguest


終わり.

設定



インフラストラクチャをコードとして保持します.

2 つのファイルを作成し、VCS で追跡します.これは、vagrant 作業ディレクトリです.

.
├── Vagrantfile
└── install.sh

Vagrantfile は次のようになります

Vagrant.configure("2") do |config|
  config.ssh.forward_agent = true

  config.vm.provider :virtualbox do |v|
    v.memory = 12288 # don't be greedy, it should be 40-70% of your host memory
    v.cpus = 4       # and this should be 60-80% of your real CPU cores
    v.gui = false
  end

  config.vm.define "docker" do |c|
    c.vm.box = "ubuntu/hirsute64"

    # Docker ports
    c.vm.network "forwarded_port", guest: 2375, host: 2375, id: "dockerd"

    # Application ports
    c.vm.network "forwarded_port", guest: 1313, host: 1313, id: "hugo"
    c.vm.network "forwarded_port", guest: 3000, host: 3000
    c.vm.network "forwarded_port", guest: 3001, host: 3001
    c.vm.network "forwarded_port", guest: 3002, host: 3002
    c.vm.network "forwarded_port", guest: 3306, host: 3306, id: "mysql"
    c.vm.network "forwarded_port", guest: 5432, host: 5432, id: "psql"
    c.vm.network "forwarded_port", guest: 6379, host: 6379, id: "redis"

    c.vm.provision :shell, privileged: false, binary: true, path: "install.sh"
  end
end


リソース割り当てとアプリケーション ポートを変更して、ホストで使用できるようにします.
install.sh スクリプトは Docker エンジンのプロビジョニングを自動化します

#!/usr/bin/env bash

echo '--- SYSTEM UPDATE ---'
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release net-tools

echo '--- INSTALL DOCKER ---'
curl -fsSL https://get.docker.com | sudo sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

echo '--- SETUP DOCKER SYSTEMD ---'
sudo mkdir /etc/systemd/system/docker.service.d/

cat <<EOF >>/tmp/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
EOF
sudo mv /tmp/docker.conf /etc/systemd/system/docker.service.d/docker.conf

echo '--- SETUP DOCKERD ---'
cat <<EOF >>/tmp/daemon.json
{
  "hosts": [
    "tcp://0.0.0.0:2375",
    "unix:///var/run/docker.sock"
  ]
}
EOF
sudo mv /tmp/daemon.json /etc/docker/daemon.json

echo '--- RELOAD DOCKERD ---'
sudo systemctl daemon-reload
sudo systemctl restart docker

echo '--- SETUP DOCKER PERMISSIONS---'
sudo usermod -aG docker $USER


終わり.

走る


vagrant を実行すると、すべてがセットアップされます

vagrant up


Docker コンテキストを作成します.

docker context create vagrant --docker host=tcp://localhost:2375


正しいコンテキストを使用すると、dockerdocker-compose の両方がそれに続きます.

docker context use vagrant


どうぞ.ドッカーは準備ができています.開発スタックで作業している間、docker エンジンのことを忘れているかもしれません.

さまざまなツールがサポートするリモート開発. VSCode DevcontainersJetBrains Remove Development など.シェル ツールを使用してコンテナーをリモートで接続できます.

止まる



復元する必要がある場合は一時停止します.永続的なボリュームがある場合、それらは変更されずに同じままです.定期的なルーチン.ホストを再起動して、その状態を取得できます.

vagrant halt


危険!必要がなくなったら、破棄してください.それは通常起こりません.激怒事件.しかし、これが Docker エンジンをリセットする最も便利で迅速な方法です.

vagrant destroy --force


詳細



これで、いくつかの docker コンテキストができました.現在は vagrant に設定されています.

NAME TYPE DESCRIPTION DOCKER ENDPOINT ...
default moby ... unix:///var/run/docker.sock ...
vagrant * moby tcp://localhost:2375 ...


コンテキストを切り替えることができます.必要な場合は raw Docker Desktop を使用してください.より多くの Docker エンジンを実行できます.

Docker はコンテキストに従い、外部エンジン リソースを表示します.

docker info

Client:
 Context:    vagrant
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.7.1)
  compose: Docker Compose (Docker Inc., v2.2.1)
  scan: Docker Scan (Docker Inc., v0.14.0)

Server:
...
 Kernel Version: 5.11.0-41-generic
 Operating System: Ubuntu 21.04
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 11.69GiB
 Name: ubuntu-hirsute
...


十分です.乾杯!