# setup qemu socket_vvmnet (for service tunnel)
brew install socket_vmnet
brew tap homebrew/services
HOMEBREW=$(which brew) && sudo ${HOMEBREW} services start socket_vmnet
# install on mac
brew install docker docker-compose docker-credential-helper minikube
# minikube configurations
minikube config set cpus 2
minikube config set memory 2048
minikube config set disk-size 20gb
minikube start --driver qemu --network socket_vmnet
# set docker daemon
eval $(minikube docker-env)
# install vscode plugins : docker, kubernetes, bridge to kubernetes
- Project spring initializr
- Docker
FROM openjdk:8 VOLUME /tmp COPY build/libs/*-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
# build image ./gradlew build docker build -t positoy/boot . # create container with default "bridge" network with private IPAddress docker run --name boot -d --rm positoy/boot # only containers in the same host can access. docker run --rm curlimages/curl -L -v http://`docker inspect -f "{{ .NetworkSettings.IPAddress }}" boot`:8080
- Kubernetes
# push the docker image to registry docker push positoy/boot # create deployment, port is just meta info kubectl create deployment boot --image=positoy/boot --port=8080 # create service, deployment port info is helpful here. # kubectl create service nodeport boot --tcp=8080:8080 kubectl expose deployment boot --type=NodePort --port=8080 # open browser for the service minikube service boot # service update if needed kubectl rollout restart deployment/boot
- Project
npx create-next-app@latest --template typescript next
- Docker
FROM node:18.17.1-alpine VOLUME /tmp COPY next /tmp/next WORKDIR /tmp/next ENTRYPOINT ["npm","run","start"]
cd next npm run build cd .. docker build -t positoy/nextjs . docker run --name nextjs -d --rm positoy/nextjs
- Kubernetes
docker push positoy/nextjs kubectl create deployment nextjs --image=positoy/nextjs --port=3000 kubectl expose deployment nextjs --type=NodePort --port=3000 minikube service nextjs
-
Project
mkdir express cd express npm init -y npm add express typescript @types/express @types/node npx tsc --init
# tsconfig.js { ... "compilerOptions": { "outDir": "dist" } ... } # package.json { ... "scripts": { "build": "npx tsc", "start": "node dist/server.js" } ... }
-
Docker
FROM node:18.17.1-alpine VOLUME /tmp COPY express /tmp/express WORKDIR /tmp/express ENTRYPOINT ["npm","run","start"]
cd express npm run build cd .. docker build -t positoy/express . docker run --name express -d --rm positoy/express
-
Kubernetes
docker push positoy/exprss kubectl create deployment express --image=positoy/express --port=3000 kubectl expose deployment express --type=NodePort --port=3000 minikube service express
# mysql-server
docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
docker exec -it mysql bash
mysql -uroot -p
-- create 'user' user
create user 'user' identified by 'password';
# mysql-client
docker run -it --rm --name mysql-client mysql:5.7 mysql -h`docker inspect -f "{{ .NetworkSettings.IPAddress }}" mysql` -uuser -p
- Docker
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
docker run -it --rm postgres psql -h `docker inspect -f "{{ .NetworkSettings.IPAddress }}" some-postgres` -U postgres
- Docker
docker run --name some-redis -d redis
docker run -it --rm redis redis-cli -h `docker inspect -f "{{ .NetworkSettings.IPAddress }}" some-redis`