DOCKERIZE እንታይ እዩ ኢልኩም ትሓስቡ ትኾኑ። ንፕሮጀክት dApp ንኮንተይነር ንምግባር Docker ምጥቃም ማለት እዩ።
ዶከር ንኣፕሊኬሽናት ንምምዕባል፣ ንምልኣኽን ንምስራሕን ዝሕግዝ ክፉት መድረኽ እዩ። Docker ንኣፕሊኬሽናትካ ካብ ትሕተ ቅርጽኻ ክትፈልዮም የኽእለካ ምእንቲ ሶፍትዌር ብቕልጡፍ ከተብጽሕ ትኽእል።
Docker ንኣፕሊኬሽንካ ከም ሓደ ኣካል ኣብ CONTAINER ዝበሃል ልሕሉሕ ዝተነጸለ ሃዋህው ክትዕሽጎን ከተካይዶን የኽእለካ።
ኮንተይነራት ቀለልቲ ኮይኖም ነቲ ኣፕሊኬሽን ንምስራሕ ዘድሊ ኩሉ ዝሓዙ እዮም፣ ስለዚ ኣብቲ ኣብቲ ሆስት ዝተተኽለ ምጽጋዕ ኣየድልየካን እዩ። ኣብ እትሰርሓሉ እዋን ኮንተይነራት ክትካፈል ትኽእል ኢኻ፣ ኩሎም እትካፈሎም ሰባት ድማ ሓደ ዓይነት ብተመሳሳሊ መንገዲ ዝሰርሕ ኮንተይነር ከም ዝረክብ ኣረጋግጽ።
ንኣብነት ንስኻን መሳርሕትኻን Node.jsን Hardhatን ዝጥቀም ናይ dApp ፕሮጀክት ትሰርሕ ኣለኻ። ኣብ መጀመርታ፡ መሳርሕትኻ ነቲ ኣፕሊኬሽን ኣብ ውሽጢ ዓዲ ቅድሚ ምክያዶም፡ ኣብ ስርዓታቶም Node.jsን Hardhatን ክተኽሉ ከም ዘድልዮም ፈሊጥካ፡ ነቲ ፕሮጀክት ኣብ ከባቢኻ ማሽን ትሰርዖ። ሕጂ፡ ሓደ ካብ መሳርሕትኻ ምስ Node.jsን Hardhatን ዘይቃዶ ማሽን ይጥቀም ኣሎ ንበል። ነዚ ጸገም ብኸመይ ምፈታሕካዮ?
ብዶከር፡ መተግበሪኻ፡ ምስ ኩሎም ጽግዕተኛታቱ፡ ኣብ ሓደ ኣብ ዝኾነ ስርዓተ-ምሕደራ ክሰርሕ ዝኽእል መትሓዚ ክትዕሽጎ ትኽእል። እዚ ድማ ኣብ ዝተፈላለያ ማሽናት በበይኑ ሶፍትዌር ወይ ጽግዕተኛታት ናይ ምትካል ጉዳይ ይፈትሕ።
መተግበሪኻ ኣብ ኮንተይነር ምስ ኣእተኻዮ፡ ከመይ ጌርካ ከም ዝሰርሕ ትገብሮ?
ከም ፍሮንትኤንድ ዲቨሎፐር መጠን፡ ሓድሽ ሪኣክት ኣፕ ክትጅምር ከለኻ፡ መብዛሕትኡ ግዜ npx create-react-app
ወይ npm init vite@latest
ትሰርሕ። ንዝጸንሐ ፕሮጀክት፡ ብተለምዶ ኣብ ውሽጢ ዓዲ ንኽሰርሕ git pull
ስዒቡ npm install
ምተኻየድካ። ብተመሳሳሊ ንሓደ ኮንተይነር ንምስራሕ ፡ ኮንተይነር ምስሊ ዝበሃል ነገር የድልየካ።
ምስሊ ኮንተይነር ንኹሎም መተግበሪኻ ኣብ ውሽጢ ኮንተይነር ንምስራሕ ዘድልዩ ኩሎም ፋይላት፣ ባይነሪታት፣ ላይብረሪታትን ውቅርታትን ዘጠቓልል ደረጃ ዝሓለወ ፓኬጅ እዩ። ኩሉ ነገር ብሓባር ተጠርኒፉ ኣብ ዝኾነ ከባቢ ብቐጻሊ ክጎዪ ከም ዝኽእል እዩ።
ንናይ ኮንተይነር ምስሊ ኣብ ታሕቲ ርአ፤
ኣብዚ ክፋል እዚ፡ ከመይ ጌርካ ኣፕካ ኮንተይነሪዝ ከም እንገብሮን ሼር ከም እንገብርን ክትመሃር ኢኻ።
ኣብ ሱር ማህደርካ፡ ነዚ ናይ ትእዛዝ ምልክት ተጠቒምካ docker ጀምር፤
docker init
ንዝወሃብ ምልዕዓላት መልሲ ሃቡ።
? What application platform does your project use? Node ? What version of Node do you want to use? 20.16.0 ? Which package manager do you want to use? npm ? Do you want to run "npm run build" before starting your server? No ? What command do you want to use to start the app? ["npm", "run", "dev"] ? What port does your server listen on? 5173
ኣብ ማህደርካ ሰለስተ ተወሳኺ ፋይላት ክትሪኢ ኢኻ፡ ንሳቶም ድማ .dockerignore
, compose.yaml
ከምኡ’ውን DockerFile
Dockerfil
: Dockerfile ሓደ ተጠቃሚ ኣብ መስመር ትእዛዝ ምስሊ ንምእካብ ክጽውዖም ዝኽእል ኩሎም ትእዛዛት ዝሓዘ ናይ ጽሑፍ ሰነድ እዩ።compose.yaml
: እቲ Compose ፋይል ወይ compose.yaml
ፋይል ነቲ ብ Compose Specification ዝቐረበ ሕግታት ይኽተል ኣብ ከመይ ጌርካ multi-container applications ትገልጽ ።.dockerignore
: እዚ ፋይል እዚ ንፋይላትን ማህደርን ካብቲ ናይ ህንጸት ዓውዲ የግልል። ኣብ ውሽጢ Dockerfile
፡ ነቲ ፋይል ኣጽርዮ እሞ እዞም ዝስዕቡ ንውስኸሉ፤
# syntax=docker/dockerfile:1 ARG NODE_VERSION=20.16.0 FROM node:${NODE_VERSION}-alpine # Use development node environment by default. ENV NODE_ENV development WORKDIR /app # Copy package.json and package-lock.json to the working directory COPY package.json package-lock.json ./ # Install dependencies RUN npm install # Copy the rest of the source files into the image COPY . . # Change ownership of the /app directory to the node user RUN chown -R node:node /app # Switch to the node user USER node # Ensure node_modules/.bin is in the PATH ENV PATH /app/node_modules/.bin:$PATH # Expose the port that the application listens on EXPOSE 5173 # Run the application CMD ["npm", "run", "dev"]
ነዚ ተጠቒምካ ናይ ኮንተይነር ምስሊካ ሃንጽ፤
docker build -t <your-image-name> .
ምስሊ ኮንተይነርካ ንምርኣይ፡ ናብ docker desktop ናትካ ብምኻድ፡ ኣብ Images
ጠውቕ፡ ከምቲ ኣብ ታሕቲ ዘሎ
ወይ ድማ ነዚ ናይ ትእዛዝ ምልክት ክትጥቀመሉ ትኽእል ኢኻ፣
docker images
ኣብ ተርሚናልካ ምስል ኮንተይነርካ ንምርኣይ
ነቲ ምስሊ ኣካይድዎ፤
docker run -p 5173:5173 <your-image-name>
ከምዚ ዝበለ ውጽኢት ክትሪኢ ይግባእ፤
> [email protected] dev > vite VITE v5.4.2 ready in 222 ms ➜ Local: http://localhost:5173/ ➜ Network: http://172.17.0.2:5173/
ናብ Docker Hub ተመዝገብ ወይ እቶ።
ነቲ Create Repository ዝብል ቁልፊ ምረጽ።
ንመኽዘንካ ብተመሳሳሊ ስም ምስሊ መትሓዚ ስመዮ። እቲ ርኡይነት ህዝባዊ ምዃኑ ኣረጋግጽ ።
ምፍጣር ምረጽ ።
መስመር ትእዛዝ ተጠቒምካ ናብ Docker Hub እቶ
docker login -u <YOUR USERNAME>
Password ናትካ ኣእቱ
ፓስዎርድካ ኣብ እትጽሕፈሉ እዋን ኣይክርአን እዩ።
ነቲ getting-started
ምስሊ ሓድሽ ስም ንምሃብ docker tag
ትእዛዝ ተጠቐም። YOUR-USER-NAME
ብ Docker ID ናትካ ተክኦ፤
እዚ
denied: requested access to the resource is denied
።ነዚ ንምእራም ድማ፡
docker login
ብምጥቃም ዳግማይ ምእታው ፣ enter ንጽቀጥ።- ብድሕሪኡ ናብ መርበብ ሓበሬታኻ ክትከይድ ኢኻ፣
- OTP ናትካ ነቲ ተርሚናል ቅዳሕ እሞ ኣእትዎ፣
- CONFIRM ዝብል ንጽቀጥ
- ነቲ ምስሊ ዳግማይ ምድፋእ እዩ።
ከምዚ ዝኣመሰለ ውጽኢት ክትሪኢ ኢኻ፤
እዚ ምስልኻ ተሃኒጹ ናብ መዝገብ ከም ዝተደፍአ ዘርኢ እዩ። ሕጂ ጋንታኻ ነዚ ምስሊ ስሒባ ነቲ ኣፕሊኬሽን ኣብ ናይ ከባቢኦም ማሽን ከካይዶ ትኽእል እያ።
ኣብ ዶከር ዴስክቶፕካ ወይ ዶከር ሃብካ ኣብ ዝርከብ ናይ ምድላይ ባር ምስሊ ኮንተይነርካ ብምድላይ ክትምርምር ትኽእል ።
ግጭት ወደብ :
ጌጋ : እቲ ወደብ ድሮ ኣብ ጥቕሚ እንተነይሩ።
መፍትሒ : ነቲ መስርሕ ነቲ ፖርት ተጠቒሙ ኣለልዩ ነዞም ዝስዕቡ ትእዛዛት ተጠቒሙ ኣቋሪጽዎ፤
# Find the process using port 8000 lsof -i :8000 # Kill the process (replace <PID> with the actual process ID found from the previous command) kill -9 <PID>
ከም ኣማራጺ፡ ነቲ ዶከር ኮንተይነር ኣብ ዝተፈላለየ ወደብ ከተካይዶ ትኽእል ኢኻ፤
docker run -p 8001:8000 <your-image-name>
ሓደ ኣፕሊኬሽን ኣዘምንዎ።
ዝኾነ ኣፕካ እተመሓይሾ ነገር ንኣብነት ስነ-ቓል ወይ ፋንክሽን ትቕይሮ፣
ዶከር ዴስክቶፕካ ደው ኣቢልካ፡ ኣብ Containers
ጠውቕ
ነቲ ፖርት ደው ኣቢልና ኣብ delete ዝብል ጠውቕ
ነቲ Application docker build
ትእዛዝ ተጠቒምካ ዳግማይ ምህናጽ
docker build -t <your-image-name> .
ነቲ ኣፕ ዳግማይ ኣካይድዎ።
docker run -p 5173:5173 <your-image-name>
ነዚ መምርሒ ብምኽታል፡ መተግበሪኻን ጽግዕተኛታቱን ብቐሊሉ ኣብ ሓደ ኮንተይነር ክትዕሽጎን፡ ምስ ጋንታኻ ከተካፍሎን፡ ኣብ ዝኾነ ማሽን ብቐሊሉ ከተካይዶን ትኽእል። እዚ ድማ ምትሕብባር ዘዕቢ ጥራይ ዘይኮነስ ምስ ኣወዳድባ ከባቢን ምትእስሳርን ዝተኣሳሰሩ ጉዳያት እውን የቃልል።