/bin/bash -c "$(curl -fsSL https://gist.githubusercontent.com/thomet/d74cc9c60a75c1ef747d63893463694e/raw/multipass-mac-docker-setup.sh)"
Make sure you give multipass.app full disk access
| #cloud-config | |
| package_update: true | |
| package_upgrade: true | |
| package_reboot_if_required: true | |
| bootcmd: | |
| - rm -rf /etc/resolv.conf | |
| - echo 'nameserver 1.1.1.1' > /etc/resolv.conf | |
| apt: | |
| sources: | |
| docker.list: | |
| source: deb https://download.docker.com/linux/ubuntu $RELEASE stable | |
| keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 | |
| golang-ppa.list: | |
| source: deb http://ppa.launchpad.net/longsleep/golang-backports/ubuntu $RELEASE main | |
| keyid: F6BC817356A3D45E | |
| packages: | |
| - apt-transport-https | |
| - ca-certificates | |
| - curl | |
| - gnupg-agent | |
| - software-properties-common | |
| - docker-ce | |
| - docker-ce-cli | |
| - containerd.io | |
| - docker-compose | |
| - golang | |
| - unzip | |
| write_files: | |
| - path: /etc/systemd/system/docker.service.d/override.conf | |
| content: | | |
| # Disable flags to dockerd, all settings are done in /etc/docker/daemon.json | |
| [Service] | |
| ExecStart= | |
| ExecStart=/usr/bin/dockerd | |
| - path: /etc/sysctl.d/enabled_ipv4_forwarding.conf | |
| content: | | |
| net.ipv4.conf.all.forwarding=1 | |
| - path: /etc/sysctl.d/elasticsearch.conf | |
| content: | | |
| vm.max_map_count=262144 | |
| - path: /etc/docker/daemon.json | |
| content: | | |
| { | |
| "dns": [ | |
| "1.1.1.1" | |
| ], | |
| "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"] | |
| } | |
| - content: '{"credsStore": "ecr-login"}' | |
| owner: ubuntu:ubuntu | |
| path: /home/ubuntu/.docker/config.json | |
| defer: true | |
| - content: 'export PATH="$PATH:/home/ubuntu/go/bin"' | |
| owner: ubuntu:ubuntu | |
| path: /home/ubuntu/.bashrc | |
| defer: true | |
| append: true | |
| runcmd: | |
| - su ubuntu -c "go install github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login@latest" | |
| - curl https://awscli.amazonaws.com/awscli-exe-linux-`arch`.zip -o awscliv2.zip | |
| - unzip awscliv2.zip | |
| - ./aws/install | |
| - rm awscliv2.zip | |
| - chown ubuntu:ubuntu /home/ubuntu/.docker | |
| - systemctl start docker | |
| - systemctl enable docker | |
| groups: | |
| - docker | |
| system_info: | |
| default_user: | |
| groups: [docker] | |
| swap: | |
| filename: /swap.img | |
| size: "auto" | |
| maxsize: 1572864 |
| #!/usr/bin/env bash | |
| set -e | |
| # Install Homebrew if not installed | |
| if ! command -v brew >/dev/null; then | |
| /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" | |
| fi | |
| # Install multipass if not installed | |
| if ! brew list -1 | grep -Fx "multipass" >/dev/null; then | |
| brew install multipass | |
| fi | |
| # Install docker if not installed | |
| if ! brew list -1 | grep -Fx "docker" >/dev/null; then | |
| brew install docker | |
| fi | |
| HOST_CPU_COUNT=`sysctl -n hw.ncpu` | |
| HOST_MEM=`sysctl -n hw.memsize` | |
| VM_CORE_DEFAULT=`echo $HOST_CPU_COUNT/2 | bc` | |
| VM_MEM_DEFAULT=`echo $HOST_MEM/ 1024 / 1024 / 1024 / 2 | bc` | |
| VM_DISK_SIZE_DEFAULT=100 | |
| read -p "How many cpus should be assigned to the vm [${VM_CORE_DEFAULT}]: " vm_cpu_core | |
| vm_cpu_core=${vm_cpu_core:-$VM_CORE_DEFAULT} | |
| read -p "How many gigabyte MEM should be assigned to the vm [${VM_MEM_DEFAULT}]: " vm_mem_size | |
| vm_mem_size=${vm_mem_size:-$VM_MEM_DEFAULT} | |
| read -p "How many gigabyte diskspace should be assigned to the vm [${VM_DISK_SIZE_DEFAULT}]: " vm_disk_size | |
| vm_disk_size=${vm_disk_size:-$VM_DISK_SIZE_DEFAULT} | |
| # Create vm with docker (use 50% CPU and RAM by default) | |
| multipass launch \ | |
| -c ${vm_cpu_core} \ | |
| -m ${vm_mem_size}G \ | |
| -d ${vm_disk_size}G \ | |
| -n docker-vm \ | |
| --mount /tmp:/tmp \ | |
| --mount /Users:/Users \ | |
| --mount /Volumes:/Volumes \ | |
| --mount /private:/private \ | |
| --mount /var/folders:/var/folders \ | |
| --cloud-init https://gist.githubusercontent.com/thomet/d74cc9c60a75c1ef747d63893463694e/raw/cloud-config.yml | |
| PRIMARY_INSTANCE=$(multipass info docker-vm | grep IPv4 | awk '{split($0,a," "); print a[2]}') | |
| echo "Success! in your bash profile add this:" | |
| echo "export DOCKER_HOST=tcp://$PRIMARY_INSTANCE:2375" |