Docker-ის გაფართოებები

ისწავლეთ Docker-ის გაფართოებების ეკოსისტემის შესახებ და როგორ გამოიყენოთ ის თქვენი Docker-ის სამუშაო პროცესის გასაუმჯობესებლად

Docker-ის გაფართოებები

Docker-ის გაფართოებები არის დანამატები, რომლებიც აფართოებენ Docker Desktop-ის შესაძლებლობებს, რაც საშუალებას გაძლევთ დამატებითი ხელსაწყოების, სერვისებისა და ფუნქციების ინტეგრირება პირდაპირ თქვენს Docker-ის სამუშაო პროცესში. ეს გაფართოებები Docker Desktop-ს მარტივი კონტეინერების მართვის ხელსაწყოდან სრულყოფილ დეველოპმენტის პლატფორმად აქცევენ, სპეციალიზებული ფუნქციონალის, სხვა დეველოპერული ხელსაწყოებთან ინტეგრაციისა და გაუმჯობესებული ვიზუალიზაციისა და მართვის შესაძლებლობების მიწოდებით.

გაფართოებების ეკოსისტემა

გაფართოებების ტიპები

  • დეველოპმენტის ხელსაწყოები: IDE ინტეგრაციები, კოდის ფორმატორები და ენის-სპეციფიკური ასისტენტები, რომლებიც ეხმარებიან კონტეინერებზე დაფუძნებულ დეველოპმენტში
  • გამართვის უტილიტები: ხელსაწყოები კონტეინერის პრობლემების მოსაგვარებლად, მუშაობის მდგომარეობის შესამოწმებლად და წარმადობის პრობლემების ანალიზისთვის
  • უსაფრთხოების სკანერები: მოწყვლადობის სკანერები, შესაბამისობის შემმოწმებლები და საიდუმლოებების აღმომჩენი ხელსაწყოები კონტეინერის უსაფრთხოების უზრუნველსაყოფად
  • მონაცემთა ბაზის მენეჯერები: GUI ინტერფეისები მონაცემთა ბაზის კონტეინერების სამართავად, მონაცემების სანახავად და მოთხოვნების შესასრულებლად
  • Kubernetes-ის ხელსაწყოები: გაფართოებები Kubernetes კლასტერების ვიზუალიზაციის, მართვისა და მათზე გაშვებისთვის
  • მონიტორინგის გადაწყვეტილებები: წარმადობის მონიტორინგი, რესურსების თვალყურის დევნება და ვიზუალიზაციის დაფები კონტეინერებისთვის

უპირატესობები

  • გამარტივებული სამუშაო პროცესები: გააერთიანეთ მრავალი ხელსაწყო ერთ ინტერფეისში უფრო გლუვი დეველოპმენტის პროცესებისთვის
  • ინტეგრირებული ხელსაწყოები: მიიღეთ წვდომა სპეციალიზებულ ხელსაწყოებზე Docker Desktop-იდან გაუსვლელად ან ცალკე აპლიკაციების დაყენების გარეშე
  • კონტექსტის გადართვის შემცირება: შეასრულეთ მეტი ამოცანა Docker Desktop-ში, რაც ამცირებს აპლიკაციებს შორის გადართვის საჭიროებას
  • გაუმჯობესებული პროდუქტიულობა: დაზოგეთ დრო სპეციალურად კონტეინერების სამუშაო პროცესებისთვის შექმნილი ხელსაწყოებით
  • მორგებული Docker-ის გამოცდილება: მოარგეთ Docker Desktop-ი თქვენს კონკრეტულ დეველოპმენტის საჭიროებებსა და უპირატესობებს
  • გამარტივებული დანერგვა: Docker-ის საუკეთესო პრაქტიკების უფრო მარტივი ათვისება მართვადი გამოცდილებისა და შაბლონების საშუალებით
  • სტანდარტიზებული გარემო: შექმენით თანმიმდევრული ხელსაწყოები დეველოპმენტის გუნდებში

გაფართოებების გამოყენების დაწყება

პოპულარული გაფართოებები

# გაფართოებების დაყენება Docker CLI-ის საშუალებით
docker extension install name-of-extension
# მაგალითი: დისკის გამოყენების ანალიზატორის დაყენება
docker extension install docker/disk-usage-extension

# დაყენებული გაფართოებების ნახვა
docker extension ls
# გამოტანილი შედეგი აჩვენებს სახელს, ვერსიას, სტატუსს და გამომცემლის ინფორმაციას
# EXTENSION              VERSION    ENABLED    DESCRIPTION
# docker/disk-usage      0.2.1      true       Disk usage visualization

# გაფართოების განახლება
docker extension update name-of-extension
# კონკრეტულ ვერსიაზე განახლება ტეგების გამოყენებით
docker extension update name-of-extension:1.2.3

# გაფართოების წაშლა
docker extension rm name-of-extension
# იძულებითი წაშლა, თუ გაფართოება გამოყენებაშია
docker extension rm --force name-of-extension

# გაფართოების გამორთვა წაშლის გარეშე
docker extension disable name-of-extension

# გამორთული გაფართოების ხელახლა ჩართვა
docker extension enable name-of-extension

გაფართოებების მიმოხილვა

დეველოპმენტის გაფართოებები

  • Dev Environments: შექმენით, გააზიარეთ და მართეთ განმეორებადი დეველოპმენტის გარემო
    # dev გარემოს შექმნა Git რეპოზიტორიიდან
    docker dev-environments create --repo https://github.com/username/project
    
  • ენის-სპეციფიკური ხელსაწყოები: მორგებული დახმარება Node.js-ისთვის, Python-ისთვის, Java-სთვის, Go-სთვის და სხვა ენებისთვის
    # Node.js დეველოპმენტის კონტეინერის მაგალითი
    services:
      node-dev:
        image: node:16
        volumes:
          - ./:/app
        working_dir: /app
        command: npm run dev
    
  • API კლიენტები: შეამოწმეთ და დაადოკუმენტირეთ API-ები პირდაპირ Docker Desktop-იდან
    # Postman-ის გაფართოების დაყენება API ტესტირებისთვის
    docker extension install postman/docker-extension
    
  • მონაცემთა ბაზის მენეჯერები: GUI ხელსაწყოები MongoDB-სთვის, PostgreSQL-ისთვის, MySQL-ისთვის, Redis-ისთვის და სხვა მონაცემთა ბაზის სისტემებისთვის
    # მაგალითი: MongoDB მონაცემთა ბაზის მენეჯერი
    docker extension install mongodb/mongodb-atlas
    
  • საწყისი კოდის კონტროლის ინტეგრაციები: GitHub, GitLab და Bitbucket ინტეგრაცია კონტეინერებზე დაფუძნებული სამუშაო პროცესებისთვის
    # კონტეინერის იმიჯის ატვირთვა GitHub Container Registry-ში
    docker extension install github/docker-extension
    

მონიტორინგის გაფართოებები

  • რესურსების მონიტორინგი: CPU-ს, მეხსიერების, ქსელისა და დისკის გამოყენების რეალურ დროში ვიზუალიზაცია
    # რესურსების მონიტორინგის გაფართოების დაყენება
    docker extension install docker/resource-usage-extension
    
  • კონტეინერის ჯანმრთელობის შემოწმება: ავტომატური ჯანმრთელობის შემოწმებები შეტყობინებებით კონტეინერის პრობლემებზე
    # კონტეინერის ჯანმრთელობის შემოწმების კონფიგურაცია
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    
  • ლოგების ვიზუალიზაცია: ლოგების გაფართოებული ძიების, ფილტრაციისა და ანალიზის ხელსაწყოები
    # მრავალი კონტეინერიდან ლოგების აგრეგაცია და ვიზუალიზაცია
    docker extension install logdna/logdna-extension
    
  • წარმადობის თვალყურის დევნება: კონტეინერიზებულ აპლიკაციებში პრობლემებისა და წარმადობის საკითხების იდენტიფიცირება
    # ქსელის წარმადობის თვალყურის დევნება კონტეინერებს შორის
    docker extension install network-analyzer
    
  • მეტრიკების დაფები: მორგებადი დაფები კონტეინერის მეტრიკების მონიტორინგისთვის
    # Prometheus/Grafana დაფების შექმნა კონტეინერის მეტრიკებისთვის
    docker extension install grafana/grafana-dashboard
    

უსაფრთხოების გაფართოებები

  • მოწყვლადობის სკანირება: კონტეინერის იმიჯებში უსაფრთხოების მოწყვლადობების იდენტიფიცირება
    # იმიჯების სკანირება მოწყვლადობებზე
    docker extension install snyk/snyk-container
    # მაგალითი: ნაპოვნია 24 მოწყვლადობა (7 კრიტიკული, 10 მაღალი, 7 საშუალო)
    
  • იმიჯის უსაფრთხოების ანალიზი: იმიჯის ფენებისა და კონფიგურაციის ღრმა შემოწმება უსაფრთხოების საკითხებზე
    # იმიჯის უსაფრთხოების მდგომარეობის ანალიზი
    docker extension install docker/scout-extension
    
  • საიდუმლოებების აღმოჩენა: კონტეინერის იმიჯებში ჩაწერილ საიდუმლოებებზე პოვნა და შეტყობინება
    # იმიჯებში საიდუმლოებების აღმოჩენა
    docker extension install secretscanner/docker-extension
    
  • შესაბამისობის შემოწმება: კონტეინერების შემოწმება CIS ბენჩმარკებისა და უსაფრთხოების სტანდარტების მიხედვით
    # უსაფრთხოების სტანდარტებთან შესაბამისობის შემოწმება
    docker extension install aquasec/trivy-extension
    
  • პოლიტიკის აღსრულება: უსაფრთხოების პოლიტიკების დანერგვა და აღსრულება კონტეინერების გაშვებისას
    # პოლიტიკების აღსრულება, როგორიცაა "პრივილეგირებული კონტეინერების გარეშე"
    docker extension install policy-manager
    

საკუთარი გაფართოებების შექმნა

# ახალი გაფართოების პროექტის ინიციალიზაცია
docker extension init my-extension
# ეს ქმნის შაბლონს:
# - ფრონტენდის React აპლიკაციით
# - ბექენდის სერვისით (არასავალდებულო)
# - metadata.json კონფიგურაციით
# - Dockerfile-ით და docker-compose.yml-ით

# გაფართოების აგება
docker build -t my-extension:latest .
# ეს აგებს გაფართოების იმიჯს ფრონტენდის რესურსების ჩათვლით
# მრავალ-კონტეინერიანი გაფართოებებისთვის გამოიყენეთ docker-compose build

# დეველოპმენტის ვერსიის დაყენება
docker extension install my-extension:latest
# ლოკალური იმიჯიდან დაყენება დეველოპმენტის დროს ტესტირებისთვის
# დაამატეთ --force ხელახლა დასაყენებლად, თუ უკვე დაყენებულია

# გაფართოების ვალიდაცია
docker extension validate my-extension:latest
# ამოწმებს:
# - metadata.json-ის სწორ სტრუქტურას
# - სავალდებულო ველებსა და ფორმატს
# - UI შესვლის წერტილებს
# - Docker-ის იმიჯის ფორმატის შესაბამისობას
# - ხატულისა და დოკუმენტაციის არსებობას

# გაფართოების ტესტირება
docker extension dev debug my-extension
# იწყებს დეველოპერის ხელსაწყოებითა და გამართვის რეჟიმით

# გამოქვეყნებისთვის მომზადება
docker extension version my-extension 1.0.0
# ანახლებს ვერსიას metadata.json-ში

გაფართოების არქიტექტურა

# docker-compose.yaml გაფართოებისთვის
version: '3.9'
services:
  desktop-extension:
    image: ${DESKTOP_PLUGIN_IMAGE}  # გარემოს ცვლადი, რომელიც დაყენებულია Docker Desktop-ის მიერ
    build:
      context: ./docker-extension   # ფრონტენდის UI კოდის მდებარეობა
      args:
        - API_URL=${API_URL:-http://backend:8080}  # API ენდფოინთის კონფიგურაცია
        - NODE_ENV=production
    volumes:
      - extension_data:/data        # მუდმივი საცავი გაფართოების მონაცემებისთვის
  
  backend:
    image: ${BACKEND_IMAGE}         # გარემოს ცვლადი ბექენდის იმიჯისთვის
    build:
      context: ./backend            # ბექენდის სერვისის კოდის მდებარეობა
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # Docker API-ზე წვდომა
      - extension_data:/data                          # გაზიარებული მონაცემები ფრონტენდთან
    environment:
      - DEBUG=1                     # გამართვის ლოგირების ჩართვა
      - LOG_LEVEL=info              # ლოგის დონის კონფიგურაცია
    ports:
      - "8080"                      # შიდა პორტი API-სთვის
    restart: on-failure             # ავტომატური გადატვირთვა შეცდომისას

volumes:
  extension_data:                   # დასახელებული დისკი მუდმივი საცავისთვის

ეს docker-compose.yaml განსაზღვრავს:

  1. ფრონტენდის კონტეინერს UI-სთვის, რომელთანაც მომხმარებლები ურთიერთქმედებენ
  2. ბექენდის კონტეინერს, რომელსაც შეუძლია Docker API-ზე წვდომა და დამატებითი ფუნქციონალის უზრუნველყოფა
  3. გაზიარებულ დისკებს მონაცემების მუდმივობისთვის კომპონენტებს შორის
  4. გარემოს ცვლადებს კონფიგურაციისთვის
  5. Docker-ის სოკეტზე წვდომას კონტეინერებთან ურთიერთქმედებისთვის

გაფართოების UI-ის შემუშავება

ფრონტენდის კომპონენტები

  • React-ზე დაფუძნებული UI: თანამედროვე React ფრეიმვორქი ინტერაქტიული ინტერფეისების შესაქმნელად
    # React კომპონენტის მაგალითი Docker UI ბიბლიოთეკის გამოყენებით
    import { Button, Typography, Select } from '@docker/extension-ui-components';
    
    function ContainerManager() {
      const [containers, setContainers] = useState([]);
      const [selectedContainer, setSelectedContainer] = useState('');
      
      useEffect(() => {
        # კონტეინერების წამოღება ბექენდიდან
        fetchContainers().then(setContainers);
      }, []);
      
      return (
        <div>
          <Typography variant="h4">Container Manager</Typography>
          <Select
            label="Select Container"
            value={selectedContainer}
            onChange={(e) => setSelectedContainer(e.target.value)}
            options={containers.map(c => ({ label: c.name, value: c.id }))}
          />
          <Button onClick={() => restartContainer(selectedContainer)}>
            Restart Container
          </Button>
        </div>
      );
    }
    
  • Docker Desktop-ის დიზაინ სისტემა: თანმიმდევრული სტილი Docker Desktop-ის UI-სთან
    # თემის ინტეგრაცია Docker Desktop-თან
    import { createDockerDesktopTheme, ThemeProvider } from '@docker/extension-ui-components';
    
    const theme = createDockerDesktopTheme();
    
    function App() {
      return (
        <ThemeProvider theme={theme}>
          <MyExtensionContent />
        </ThemeProvider>
      );
    }
    
  • ჩაშენებული კომპონენტების ბიბლიოთეკა: წინასწარ აგებული UI კომპონენტები გავრცელებული შაბლონებისთვის
    # ჩაშენებული კომპონენტები თანმიმდევრული UX-ისთვის
    import { 
      Table, 
      TableHead, 
      TableRow, 
      TableCell, 
      TableBody,
      Card,
      Alert,
      Tabs,
      Tab
    } from '@docker/extension-ui-components';
    
  • ადაპტირებადი განლაგებები: ადაპტირებადი ინტერფეისები სხვადასხვა ეკრანის ზომებისთვის
    # ადაპტირებადი ბადის განლაგება
    import { Grid, Box } from '@docker/extension-ui-components';
    
    function Dashboard() {
      return (
        <Grid container spacing={2}>
          <Grid item xs={12} md={6}>
            <Box p={2}>
              <MetricsPanel />
            </Box>
          </Grid>
          <Grid item xs={12} md={6}>
            <Box p={2}>
              <ControlPanel />
            </Box>
          </Grid>
        </Grid>
      );
    }
    
  • მუქი/ღია რეჟიმის მხარდაჭერა: თემის ავტომატური ადაპტაცია
    # თემაზე მორგებული სტილი
    import { useTheme } from '@docker/extension-ui-components';
    
    function ThemedComponent() {
      const theme = useTheme();
      return (
        <div style={{ 
          background: theme.palette.background.default,
          color: theme.palette.text.primary 
        }}>
          შინაარსი ეგუება ღია/მუქ რეჟიმს
        </div>
      );
    }
    

ბექენდის სერვისები

  • კონტეინერიზებული სერვისები: ბექენდის ლოგიკა მუშაობს ცალკე კონტეინერებში
    # ბექენდის Dockerfile
    FROM golang:1.19-alpine AS builder
    WORKDIR /app
    COPY go.* ./
    RUN go mod download
    COPY . .
    RUN go build -o extension-backend
    
    FROM alpine
    COPY --from=builder /app/extension-backend /usr/local/bin/
    ENTRYPOINT ["extension-backend"]
    
  • API ენდფოინთები: RESTful ან GraphQL API-ები ფრონტენდთან კომუნიკაციისთვის
    # Go ბექენდის მაგალითი REST API-ით
    func main() {
      r := mux.NewRouter()
      r.HandleFunc("/api/containers", getContainers).Methods("GET")
      r.HandleFunc("/api/containers/{id}/restart", restartContainer).Methods("POST")
      
      log.Fatal(http.ListenAndServe(":8080", r))
    }
    
  • Docker CLI ინტეგრაცია: Docker-ის ბრძანებების შესრულება ბექენდიდან
    # Docker-ის ბრძანებების შესრულება Go-დან
    func restartContainer(id string) error {
      cmd := exec.Command("docker", "restart", id)
      return cmd.Run()
    }
    
  • ჰოსტ სისტემასთან ურთიერთქმედება: ლოკალურ რესურსებზე წვდომა საჭიროების შემთხვევაში
    # ჰოსტ სისტემის ინფორმაციის წაკითხვა
    func getSystemInfo() (map[string]interface{}, error) {
      info := make(map[string]interface{})
      
      # ჰოსტის მეხსიერების ინფორმაციის მიღება
      memInfo, err := mem.VirtualMemory()
      if err != nil {
        return nil, err
      }
      info["memory"] = memInfo
      
      # CPU ინფორმაციის მიღება
      cpuInfo, err := cpu.Info()
      if err != nil {
        return nil, err
      }
      info["cpu"] = cpuInfo
      
      return info, nil
    }
    
  • Docker-ის დემონთან კომუნიკაცია: პირდაპირი ურთიერთქმედება Docker API-სთან
    # Docker SDK-ის გამოყენება დემონთან ურთიერთქმედებისთვის
    func getContainers() ([]types.Container, error) {
      cli, err := client.NewClientWithOpts(client.FromEnv)
      if err != nil {
        return nil, err
      }
      
      return cli.ContainerList(context.Background(), types.ContainerListOptions{
        All: true,
      })
    }
    

გაფართოების კონფიგურაცია

// metadata.json
{
  "name": "my-extension",
  "version": "1.0.0",
  "title": "My Docker Extension",
  "description": "A helpful Docker Desktop extension",
  "vendor": {
    "name": "My Company",
    "url": "https://example.com"
  },
  "icon": "icon.svg",
  "vm": {
    "composefile": "docker-compose.yaml",
    "host": {
      "binaries": [
        {
          "darwin": [
            {
              "path": "/bin/host-integration"
            }
          ],
          "windows": [
            {
              "path": "/bin/host-integration.exe"
            }
          ],
          "linux": [
            {
              "path": "/bin/host-integration"
            }
          ]
        }
      ]
    }
  },
  "ui": {
    "dashboard-tab": {
      "title": "My Extension",
      "root": "/ui",
      "src": "index.html"
    },
    "container-tab": {
      "title": "Container Tools",
      "root": "/container",
      "src": "container.html"
    }
  },
  "host": {
    "binaries": [
      {
        "darwin": [
          {
            "path": "/bin/host-binary"
          }
        ],
        "windows": [
          {
            "path": "/bin/host-binary.exe"
          }
        ],
        "linux": [
          {
            "path": "/bin/host-binary"
          }
        ]
      }
    ]
  }
}

metadata.json ფაილი კრიტიკულად მნიშვნელოვანია გაფართოების კონფიგურაციისთვის და მოიცავს:

  1. ძირითადი ინფორმაცია: სახელი, ვერსია, სათაური და აღწერა გაფართოებისთვის
  2. მომწოდებლის დეტალები: ინფორმაცია გაფართოების დეველოპერის ან კომპანიის შესახებ
  3. ხატულა: გაფართოების ხატულის ფაილის გზა (რეკომენდებულია SVG)
  4. VM კონფიგურაცია: Docker Compose ფაილი ბექენდის სერვისების გასაშვებად
  5. UI კონფიგურაცია:
    • დაფის ჩანართი მთავარი გაფართოების ხედისთვის
    • არასავალდებულო კონტეინერის ჩანართი, რომელიც ჩნდება კონტეინერის კონტექსტურ მენიუში
  6. ჰოსტთან ინტეგრაცია: არასავალდებულო ბინარები, რომლებსაც შეუძლიათ ჰოსტ სისტემაზე მუშაობა
  7. ნებართვები: განსაზღვრავს, რაზე აქვს წვდომა გაფართოებას (გამომდინარეობს კონფიგურაციიდან)

გაფართოებების ტესტირება

გაფართოებების გამოქვეყნება

მარკეტზე წარდგენა

  • შექმენით Docker Hub-ის ანგარიში: საჭიროა ოფიციალური გამოქვეყნებისთვის
    # დარეგისტრირდით hub.docker.com-ზე
    # დაადასტურეთ ელ.ფოსტის მისამართი
    # დააყენეთ ორფაქტორიანი ავთენტიფიკაცია უსაფრთხოებისთვის
    
  • მოამზადეთ გაფართოების დოკუმენტაცია: შექმენით სრული გამოყენების დოკუმენტაცია
    # ჩემი Docker-ის გაფართოება
    
    ## ფუნქციები
    - ფუნქცია 1: აღწერა და სკრინშოტები
    - ფუნქცია 2: აღწერა და სკრინშოტები
    
    ## ინსტალაცია
    ```bash
    docker extension install myname/my-extension:latest
    

    გამოყენება

    1. გახსენით Docker Desktop-ი
    2. გადადით გაფართოების ჩანართზე
    3. ...

    კონფიგურაცია


    გაფართოება მხარს უჭერს შემდეგ კონფიგურაციის ოპციებს...

    პრობლემების მოგვარება


    ხშირი პრობლემები და გადაწყვეტილებები...
  • წარადგინეთ განსახილველად: მიჰყევით ოფიციალურ წარდგენის პროცესს
    # მოამზადეთ წარდგენის პაკეტი
    docker extension prepare-submission myname/my-extension:latest
    
    # წარადგინეთ Docker Extension Marketplace-ის პორტალის საშუალებით
    # მიუთითეთ:
    # - გაფართოების საწყისი კოდი ან რეპოზიტორიის ბმული
    # - დოკუმენტაცია
    # - სატესტო ანგარიში საჭიროების შემთხვევაში
    # - საკონტაქტო ინფორმაცია
    
  • გაითვალისწინეთ უკუკავშირი: გაიმეორეთ განხილვის კომენტარების საფუძველზე
    # ხშირი უკუკავშირის სფეროები:
    # - უსაფრთხოების საკითხები
    # - UI/UX გაუმჯობესებები
    # - დოკუმენტაციის სიცხადე
    # - წარმადობის პრობლემები
    # - Docker-ის გაფართოების სახელმძღვანელოებთან შესაბამისობა
    
  • გამოაქვეყნეთ მარკეტზე: საბოლოო ნაბიჯი დამტკიცების შემდეგ
    # დამტკიცების შემდეგ, გამოაქვეყნეთ:
    docker extension publish myname/my-extension:1.0.0
    
    # განაახლეთ სია გამოშვების შენიშვნებით:
    docker extension publish myname/my-extension:1.0.1 \
      --release-notes "გამოსწორდა შეცდომა კონტეინერის ხედში, გაუმჯობესდა წარმადობა"
    

კერძო გავრცელება

  • აგეთ გაფართოების იმიჯი: შექმენით გასავრცელებელი პაკეტი
    # გაფართოების აგება
    docker build -t company-registry.com/extensions/my-extension:1.0.0 .
    
    # შექმენით ვერსიონირებული tarball-ი გასავრცელებლად
    docker save company-registry.com/extensions/my-extension:1.0.0 -o my-extension-1.0.0.tar
    
  • ატვირთეთ კერძო რეესტრში: შეინახეთ თქვენი ორგანიზაციის რეესტრში
    # შედით კერძო რეესტრში
    docker login company-registry.com
    
    # ატვირთეთ გაფართოების იმიჯი
    docker push company-registry.com/extensions/my-extension:1.0.0
    
    # მონიშნეთ როგორც latest მოხერხებულობისთვის
    docker tag company-registry.com/extensions/my-extension:1.0.0 company-registry.com/extensions/my-extension:latest
    docker push company-registry.com/extensions/my-extension:latest
    
  • გააზიარეთ ინსტალაციის ინსტრუქციები: შექმენით შიდა დოკუმენტაცია
    # ჩემი გაფართოების დაყენება
    
    ## წინაპირობები
    - Docker Desktop 4.12.0 ან უფრო ახალი
    - წვდომა კომპანიის რეესტრზე
    
    ## ინსტალაციის ნაბიჯები
    1. დარწმუნდით, რომ შესული ხართ კომპანიის რეესტრში:
       ```bash
       docker login company-registry.com
    
    1. დააყენეთ გაფართოება:
      docker extension install company-registry.com/extensions/my-extension:latest
      
    2. შეამოწმეთ ინსტალაცია:
      docker extension ls
      
  • მიაწოდეთ კონფიგურაციის დეტალები: დაადოკუმენტირეთ დაყენების მოთხოვნები
    ## კონფიგურაცია
    
    ### გარემოს ცვლადები
    გაფართოება იყენებს შემდეგ გარემოს ცვლადებს:
    - `MY_API_KEY`: API გასაღები შიდა სერვისისთვის
    - `SERVICE_URL`: ბექენდის სერვისის URL
    
    ### ნებართვები
    ეს გაფართოება მოითხოვს:
    - კონტეინერებზე წაკითხვის წვდომას
    - დისკებზე წერის წვდომას
    - ქსელურ წვდომას შიდა სერვისებზე
    
    ### დაყენების ინსტრუქციები
    1. შექმენით API გასაღები შიდა პორტალში
    2. დააკონფიგურირეთ გასაღები Docker Desktop-ის პარამეტრებში
    3. გადატვირთეთ გაფართოება
    
  • მხარდაჭერის დოკუმენტაცია: შექმენით პრობლემების მოგვარების რესურსები
    ## პრობლემების მოგვარება
    
    ### ხშირი პრობლემები
    
    #### გაფართოება არ ჩანს ინსტალაციის შემდეგ**: 
    - გამოწვეულია ინსტალაციის შეცდომებით, შეუთავსებელი Docker Desktop-ის ვერსიებით ან UI-ის ჩატვირთვის პრობლემებით
    - შეამოწმეთ ინსტალაციის ლოგები შეცდომებზე
    - შეამოწმეთ გაფართოების თავსებადობა თქვენს Docker Desktop-ის ვერსიასთან
    
    - **UI-ის რენდერის პრობლემები**:
    - შეიძლება გამოწვეული იყოს JavaScript-ის შეცდომებით, CSS კონფლიქტებით ან React-ის ვერსიების შეუთავსებლობით
    - ხშირად ჩანს როგორც ცარიელი ეკრანები ან გატეხილი განლაგებები
    - შეიძლება დაკავშირებული იყოს თემის თავსებადობის პრობლემებთან
    
    - **ბექენდის კავშირის პრობლემები**:
    - ფრონტენდი ვერ უკავშირდება ბექენდის სერვისებს
    - ქსელის კონფიგურაციის პრობლემები ან დაბლოკილი პორტები
    - ბექენდის სერვისის კრახი ან წარუმატებელი ჯანმრთელობის შემოწმებები
    
    - **ნებართვების პრობლემები**:
    - არასაკმარისი ნებართვები Docker API-ზე წვდომისთვის
    - ჰოსტის ფაილურ სისტემაზე ან რესურსებზე წვდომის არარსებობა
    - უსაფრთხოების შეზღუდვები, რომლებიც ხელს უშლის გაფართოების მუშაობას
    
    - **რესურსების შეზღუდვები**:
    - გაფართოება მოიხმარს გადაჭარბებულ CPU-ს ან მეხსიერებას
    - Docker Desktop-ის რესურსების ლიმიტები ძალიან შემზღუდველია
    - ფონური პროცესები იწვევს წარმადობის დეგრადაციას
    
    - **ვერსიის თავსებადობა**:
    - გაფართოება შემუშავებულია Docker Desktop-ის სხვა API ვერსიისთვის
    - მოძველებული გაფართოებები არ არის თავსებადი ახალ Docker Desktop-თან
    - მოძველებული API-ები ან ფუნქციები აღარ არის ხელმისაწვდომი
    

გადაწყვეტილებები

# გადატვირთეთ Docker Desktop-ი გაფართოებების ხელახლა ჩასატვირთად
docker desktop restart
# ეს ანახლებს გაფართოების სისტემას და ხშირად აგვარებს UI პრობლემებს

# შეამოწმეთ გაფართოების ლოგები დეტალური შეცდომის ინფორმაციისთვის
docker extension logs extension-name
# მოძებნეთ შეცდომის შეტყობინებები, გამონაკლისები ან კავშირის პრობლემები

# შეამოწმეთ გაფართოების სტატუსი
docker extension ls
# შეამოწმეთ, რომ გაფართოება სწორად არის დაყენებული და ჩართული

# ხელახლა დააყენეთ გაფართოება დაზიანების პრობლემების მოსაგვარებლად
docker extension rm extension-name
docker extension install extension-name
# გამოიყენეთ --force, თუ გაფართოების წაშლა გაჭედილია

# განაახლეთ გაფართოება უახლეს ვერსიამდე
docker extension update extension-name
# შეიძლება მოაგვაროს თავსებადობის პრობლემები ახალ Docker Desktop-თან

# შეამოწმეთ Docker Desktop-ის ლოგები სისტემის დონის პრობლემებისთვის
docker desktop diagnose
# აგენერირებს დიაგნოსტიკურ პაკეტს სრული ლოგებით

# იხილეთ ბექენდის კონტეინერის ლოგები პირდაპირ
docker logs $(docker ps --filter "label=com.docker.desktop.extension=extension-name" -q)
# სასარგებლოა ბექენდის სერვისის პრობლემების გამართვისთვის

# გაზარდეთ Docker Desktop-ის რესურსები
# Docker Desktop > Settings > Resources-ში
# გამოყავით მეტი მეხსიერება/CPU, თუ გაფართოებები რესურს-ინტენსიურია

# შეამოწმეთ იზოლირებულად
docker extension disable --all
docker extension enable extension-name
# განსაზღვრავს, იწვევენ თუ არა სხვა გაფართოებები კონფლიქტებს

გაფართოებების ინტეგრაციები

გაფართოებების მომავალი

მომავალი ფუნქციები

  • გაუმჯობესებული API შესაძლებლობები: გაფართოებული Docker Desktop-ის API-ები უფრო ღრმა ინტეგრაციისთვის
    # მომავალი API შესაძლებლობების მაგალითი
    docker.hostFileSystem.selectDirectory()  # ფაილური სისტემის წვდომის API
    docker.networking.createTunnel()         # ქსელის გვირაბის API
    docker.containers.debug()                # გაფართოებული გამართვის API
    docker.extensions.share()                # გაფართოების გაზიარების API
    
  • გაუმჯობესებული წარმადობა: უფრო სწრაფი ჩატვირთვა და უფრო ეფექტური რესურსების გამოყენება
    # პროგრესული ჩატვირთვის შაბლონი უკეთესი წარმადობისთვის
    function ExtensionApp() {
      const [loaded, setLoaded] = useState(false);
      
      useEffect(() => {
        # დაუყოვნებლივ ჩატვირთეთ აუცილებელი UI
        # შემდეგ ზარმაცად ჩატვირთეთ უფრო მძიმე კომპონენტები
        import('./LazyLoadedComponents').then(() => {
          setLoaded(true);
        });
      }, []);
      
      return (
        <>
          <CoreUI />
          {loaded && <AdvancedFeatures />}
        </>
      );
    }
    
  • მეტი ინტეგრაციის ოპციები: გაფართოებული ეკოსისტემის კავშირები
    # უფრო ფართო ინტეგრაციის შესაძლებლობები
    # მომავალმა გაფართოებებმა შეიძლება ინტეგრაცია მოახდინონ:
    # - კოდის სკანირებისა და ხარისხის ხელსაწყოებთან
    # - ML მოდელების ტრენინგთან და გაშვებასთან
    # - IoT მოწყობილობების მართვასთან
    # - Edge computing ფრეიმვორქებთან
    # - Service mesh ვიზუალიზაციასთან
    
  • კროს-პლატფორმული გაფართოებები: უკეთესი მხარდაჭერა ოპერაციულ სისტემებში
    # ერთიანი კროს-პლატფორმული API
    function getPlatformPath() {
      const platform = window.ddClient.host.platform; // 'darwin', 'win32', 'linux'
      
      const paths = {
        darwin: '/Users/shared/data',
        win32: 'C:\\ProgramData\\DockerExtension',
        linux: '/var/lib/docker-extension'
      };
      
      return paths[platform];
    }
    
  • AI-ზე მომუშავე გაფართოებები: ინტელექტუალური დახმარება კონტეინერების სამუშაო პროცესებისთვის
    # AI შესაძლებლობები გაფართოებებისთვის
    async function suggestOptimizations(dockerfile) {
      const response = await fetch('https://api.extension.ai/analyze', {
        method: 'POST',
        body: JSON.stringify({ dockerfile })
      });
      
      return await response.json();
      # აბრუნებს რეკომენდაციებს, როგორიცაა:
      # - მრავალ-ეტაპიანი ბილდის ოპტიმიზაცია
      # - უსაფრთხოების გაუმჯობესებები
      # - ზომის შემცირების შესაძლებლობები
      # - წარმადობის გაუმჯობესებები
    }
    

საზოგადოების ზრდა

  • ღია კოდის გაფართოებების ბიბლიოთეკები: გაზიარებული კომპონენტები და უტილიტები
    # საზოგადოების ბიბლიოთეკის მაგალითი
    import { ContainerSelector, LogViewer, ResourceMonitor } from '@docker-community/extension-components';
    
    function MyExtension() {
      return (
        <div>
          <ContainerSelector onChange={handleContainerSelect} />
          <ResourceMonitor containerId={selectedContainer} />
          <LogViewer containerId={selectedContainer} />
        </div>
      );
    }
    
  • საზოგადოების მიერ მართული მარკეტი: მომხმარებლის რეიტინგები და გაფართოებების აღმოჩენა
    # გაფართოების მანიფესტი საზოგადოების მეტამონაცემებით
    {
      "name": "community-extension",
      "version": "1.0.0",
      "community": {
        "author": "community-developer",
        "stars": 4.5,
        "downloads": 12500,
        "tags": ["monitoring", "visualization", "open-source"],
        "repository": "https://github.com/user/community-extension"
      }
    }
    
  • გაფართოებების შემუშავების ვორქშოფები: საგანმანათლებლო რესურსები
    # Docker-ის გაფართოების ვორქშოფი
    
    ## სესიები
    1. თქვენი დეველოპმენტის გარემოს დაყენება
    2. თქვენი პირველი გაფართოების შექმნა
    3. გაფართოებული ბექენდის სერვისები
    4. გამოქვეყნება და გავრცელება
    5. საზოგადოების წვლილის სახელმძღვანელოები
    
    ## პრაქტიკული სავარჯიშოები
    - ააგეთ კონტეინერის ჯანმრთელობის დაფა
    - შექმენით დეველოპმენტის სამუშაო პროცესის გაფართოება
    - დანერგეთ მრავალ-კონტეინერიანი ორკესტრაციის UI
    
  • საუკეთესო პრაქტიკების გაზიარება: სტანდარტიზებული შაბლონები და მიდგომები
    # საუკეთესო პრაქტიკა: გაფართოების მდგომარეობის მართვა
    import { createExtensionStore } from '@docker-community/extension-store';
    
    const store = createExtensionStore({
      containers: [],
      selectedContainer: null,
      isLoading: false
    });
    
    # React hook-ი საცავზე წვდომისთვის
    function useExtensionStore() {
      return store;
    }
    
  • ერთობლივი დეველოპმენტი: ერთობლივი პროექტები და გაზიარებული მმართველობა
    # ერთობლივი გაფართოების მმართველობის მაგალითი
    governance:
      maintainers:
        - organization: Docker
          members: [maintainer1, maintainer2]
        - organization: Community
          members: [contributor1, contributor2]
      
      decision_process: "Majority vote from maintainers"
      contribution_guidelines: "CONTRIBUTING.md"
      roadmap: "https://github.com/org/extension/projects/roadmap"
    

შემთხვევების შესწავლა

რესურსები

დოკუმენტაცია

  • Docker-ის გაფართოებების დოკუმენტაცია: სრული სახელმძღვანელოები გაფართოებების შექმნის, გამოქვეყნებისა და გამოყენების შესახებ
    # სწრაფი დაწყება დოკუმენტაციიდან
    # 1. ახალი გაფართოების პროექტის ინიციალიზაცია
    docker extension init my-extension
    
    # 2. გაფართოების აგება
    docker build -t my-extension:latest .
    
    # 3. დეველოპმენტისთვის დაყენება
    docker extension install my-extension:latest
    
  • გაფართოების SDK-ის ცნობარი: დეტალური API დოკუმენტაცია და შესაძლებლობები
    # მაგალითი SDK დოკუმენტაციიდან
    import { createDockerDesktopClient } from '@docker/extension-api-client';
    
    const client = createDockerDesktopClient();
    
    function listContainers() {
      return client.docker.listContainers();
    }
    
    function getExtensionContext() {
      return client.extension.getContext();
    }
    
  • UI კომპონენტების ბიბლიოთეკა: ჩაშენებული React კომპონენტების ცნობარი
    # კომპონენტების ბიბლიოთეკის მაგალითები
    import { 
      Button, 
      TextField, 
      Select, 
      Table, 
      Typography, 
      Tooltip 
    } from '@docker/extension-ui-components';
    
    function MyExtensionUI() {
      return (
        <div>
          <Typography variant="h4">My Extension</Typography>
          <TextField label="Container Name" />
          <Button variant="contained">Create Container</Button>
        </div>
      );
    }
    
  • გაფართოებების გაკვეთილები: ნაბიჯ-ნაბიჯ სახელმძღვანელოები კონკრეტული გაფართოების ტიპებისთვის
    # მიჰყევით გაკვეთილის ნაბიჯებს
    # მაგალითი: React + Go გაფართოების შექმნა
    mkdir my-react-go-extension
    cd my-react-go-extension
    docker extension init --name my-react-go-extension --template react-go
    
  • გაფართოების ნიმუშების რეპოზიტორია: საცნობარო იმპლემენტაციები
    # ნიმუშების რეპოზიტორიის კლონირება
    git clone https://github.com/docker/extensions-sdk.git
    cd extensions-sdk/samples
    
    # სხვადასხვა გაფართოების ტიპების შესწავლა
    ls -la
    # - react-extension/
    # - golang-extension/
    # - flask-extension/
    # - vm-ui-extension/
    

საზოგადოება

  • Docker-ის საზოგადოების ფორუმები: დისკუსია და მხარდაჭერა გაფართოების დეველოპერებისთვის
    # პოპულარული ფორუმის კატეგორიები
    - გაფართოების დეველოპმენტი
    - გაფართოების ფუნქციების მოთხოვნები
    - პრობლემების მოგვარება
    - გაფართოების ჩვენება
    
  • Docker-ის GitHub-ი: საწყისი კოდი და პრობლემების თვალყურის დევნება
    # extensions-sdk რეპოზიტორიის ფორკირება
    git clone https://github.com/docker/extensions-sdk.git
    
    # შექმენით ახალი ტოტი თქვენი წვლილისთვის
    git checkout -b feature/my-contribution
    
    # წარადგინეთ pull request-ები გაუმჯობესებისთვის
    
  • Docker-ის Discord-ი: რეალურ დროში საზოგადოების მხარდაჭერა
    # ძირითადი Discord არხები
    - #extension-developers
    - #extension-showcase
    - #desktop-extensions-help
    
  • Docker-ის გაფართოების ვორქშოფი: პრაქტიკული სასწავლო მასალები
    # ვორქშოფის თემები
    - დეველოპმენტის გარემოს დაყენება
    - თქვენი პირველი გაფართოების შექმნა
    - გაფართოებული ბექენდის სერვისები
    - თქვენი გაფართოების გამოქვეყნება
    
  • DockerCon-ის სესიები: კონფერენციის პრეზენტაციები გაფართოებებზე
    # ბოლო პრეზენტაციები
    - "Docker-ის გაფართოებების შექმნა: საუკეთესო პრაქტიკები"
    - "Docker Desktop-ის გაფართოება საწარმოო სამუშაო პროცესებისთვის"
    - "დეველოპმენტიდან პროდაქშენამდე Docker-ის გაფართოებებით"