macOS Colima 기반 컨테이너 런타임 구축: Docker 대체 실무

💡 핵심 요약 (Executive Summary)

본 가이드는 colima 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Exec
bash
#템플릿 지정
colima template

#기존 vm 삭제 (템플릿내 insecure변경 적용)
colima delete

#정지
colima stop

#시작
colima start

#vm 접근
colima ssh
Features
TLS 신뢰

required:


DockerDaemon 수정-archived

bash
#mac에서 수행
sudo mkdir -p /etc/docker/ssl
sudo mkdir -p /etc/docker/certs.d/$mydomain

ca=$(k get secret -n $ns $secret -o=jsonpath='{.data.ca\.crt}')
cert=$(k get secret -n $ns $secret -o=jsonpath='{.data.tls\.crt}')
key=$(k get secret -n $ns $secret -o=jsonpath='{.data.tls\.key}')

echo $ca | base64 -d | sudo tee /etc/docker/ssl/ca.pem
echo $cert | base64 -d | sudo tee /etc/docker/ssl/cert.pem
echo $key | base64 -d | sudo tee /etc/docker/ssl/key.pem

# 사설 CA인증서 신뢰위치
sudo cp /etc/docker/ssl/ca.pem /etc/docker/certs.d/$mydomain/ca.crt

colima delete
colima template
>>>
# SSL Mountpoint
mounts:
  - location: /etc/docker/ssl
    writable: false
  # 사설 CA인증서 신뢰위치
  - location: /etc/docker/certs.d/$mydomain
    writable: false
# Docker Daemon Setting
docker:
  insecure-registries:
    - cmp.registry.io:8080
  tlsverify: true
  tlscacert: /etc/docker/ssl/ca.pem
  tlscert: /etc/docker/ssl/cert.pem
  tlskey: /etc/docker/ssl/key.pem
<<<
colima start


# 등록 확인
colima ssh

cat /etc/docker/daemon.json
>>>
{
  "exec-opts": [
    "native.cgroupdriver=cgroupfs"
  ],
  "features": {
    "buildkit": true
  },
  "insecure-registries": [
    "cmp.registry.io:8080"
  ],
  "tlscacert": "/etc/docker/ssl/ca.pem",
  "tlscert": "/etc/docker/ssl/cert.pem",
  "tlskey": "/etc/docker/ssl/key.pem",
  "tlsverify": true
}
<<<
bash
export ca_crt="./ca.crt"
export secured_registry=harbor.Enterprise Cloud.myregistry.internal.com
export registry_ip=10.255.57.88 
export colima_template="~/.colima/_templates/default.yaml"

sudo mkdir -p /etc/docker/certs.d/$secured_registry
sudo cp $ca_crt /etc/docker/certs.d/$secured_registry/ca.crt

colima delete

export mount_item=$(cat << EOF | yq -pyaml -ojson | jq '.mounts'
mounts:
  - location: /etc/docker/certs.d/$secured_registry
    writable: false
EOF
)
yq -i ".mounts += $mount_item" \
  ~/.colima/_templates/default.yaml

# 둘중 하나만 동작함
yq -i ".network.dns += \"8.8.8.8\"" \
  ~/.colima/_templates/default.yaml
# yq -i ".network.dnsHosts.\"$secured_registry\" = \"$registry_ip\"" \
#   ~/.colima/_templates/default.yaml

export provision_script=$(cat <<EOF
echo '$registry_ip $secured_registry' | sudo tee -a /etc/hosts

mkdir -p /usr/local/share/ca-certificates
ln -sf /etc/docker/certs.d/$secured_registry/ca.crt /usr/local/share/ca-certificates/ 2>/dev/null || true
update-ca-certificates
EOF
)
yq -i ".provision += [{\"mode\": \"system\", \"script\": \"$provision_script\"}] | .provision[].script style=\"literal\"" \
  ~/.colima/_templates/default.yaml

colima start
colima ssh ls /etc/docker/certs.d/
colima ssh ls /usr/local/share/ca-certificates/
colima ssh cat /etc/hosts
colima ssh sudo update-ca-certificates
colima ssh sudo systemctl restart docker
docker login $secured_registry
Container 실행전 Colima-Checking
bash
port=3306
image="mysql:8.0"
container_name="spring-mysql"
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=spring_db

brew install colima docker
colima start
containerID=$(docker ps -a | grep $image | awk '{print $1}')
if [ -n "$containerID" ]; then
  docker start $containerID
else
  docker run --name $container_name \
  -p $port:$port \
  -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \
  -e MYSQL_DATABASE=$MYSQL_DATABASE \
  -d $image
fi

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *