Cách chạy các tính năng Docker thử nghiệm trên CircleCI


12

Khi quá trình xây dựng được bắt đầu trên CircleCI, một trong những điều đầu tiên được thực hiện là:

Thiết lập công cụ Docker từ xa

Specified reusable docker engine, but build has not been whitelisted.
Contact CircleCI to be whitelisted
Allocating a remote Docker Engine
...
Remote Docker engine created. Using VM 'prealloc-wrjtu1qd-1491949826270'
Created container accessible with:
  DOCKER_TLS_VERIFY=1
  DOCKER_HOST=tcp://<IP>:2376
  DOCKER_CERT_PATH=/tmp/docker-certs615987123
  DOCKER_MACHINE_NAME=51123

Sau đó, khi docker build --squash -t imagename .được chạy trên CircleCI, kết quả là:

Error response from daemon: squash is only supported with experimental mode
Exited with code 1

Thảo luận

Nó hoạt động để sử dụng các tính năng thử nghiệm cục bộ sau khi thay đổi /etc/docker/daemon.jsonnhư sau:

{
    "experimental": true
}

và khởi động lại dịch vụ docker systemctl, nhưng làm thế nào để làm điều đó trên CircleCI? Có vẻ như không thể vì đầu ra bản dựng chỉ ra rằng một kết nối được tạo ra cho một docker từ xa nằm trên các hệ thống CircleCI.

Câu trả lời:


5

Bạn đang chạy vào những hạn chế của dịch vụ được quản lý. Nhiều dịch vụ được quản lý là tuyệt vời để bắt đầu thử nghiệm ý tưởng và có thể hiển thị một giá trị lớn cho người dùng thông thường. Nhưng họ đánh đổi sự dễ sử dụng cho tính linh hoạt và chức năng, do đó ngay khi chúng tôi bắt đầu có nhu cầu nghiêm túc và sẵn sàng dành một lượng lớn nỗ lực để xây dựng những ý tưởng này, bước đầu tiên chúng ta nên làm là lựa chọn linh hoạt Giải pháp đầy đủ chức năng. Theo đánh giá của tôi, bạn đang đánh vào dòng mà bạn cần tìm thứ khác - và bạn sẽ nhận thấy rằng bạn cần học một công cụ khác, vì đó không phải là phần mềm miễn phí và bạn không thể tự chạy nó.

Ở đây chúng tôi đang nói về Circle CI, nhưng những hạn chế sau đây là phổ biến đối với nhiều dịch vụ được quản lý:

  • Các dịch vụ được quản lý đặt một sự chống đối cứng đối với các phiên bản phần mềm mà chúng cho phép chúng tôi sử dụng. Những ràng buộc này có thể phù hợp với những gì chúng ta cần ngày hôm nay, nhưng không cần thiết sau đó. Họ có thể đã không đồng bộ ngày hôm nay. Trong mọi trường hợp, đây thường là một công cụ chặn hiển thị, bởi vì không thể sử dụng cùng các phiên bản phần mềm trong môi trường phát triển và trong môi trường được quản lý là nguồn vô dụng của các lỗi và khó khăn.

  • Dịch vụ quản lý cung cấp quyền truy cập hạn chế vào các chức năng của họ. Đây là vấn đề bạn đang gặp phải ở đây: bạn muốn chạy docker, nhưng bạn không có quyền truy cập vào daemon, chỉ đến một tập hợp con các chức năng của nó. Những hạn chế này đôi khi không được ghi chép rõ ràng và cũng không được đưa ra ánh sáng đầy đủ bằng tài liệu quảng cáo. Điều này chỉ có nghĩa là công việc dành cho việc hiểu và tích hợp các tính năng này là vô ích cho đến khi chúng tôi rời khỏi dịch vụ được quản lý để có giải pháp tốt hơn.

  • Các dịch vụ được quản lý cung cấp quyền truy cập hạn chế vào dữ liệu chúng tôi lưu trữ ở đó. Vì vậy, để lấy ví dụ về các dịch vụ được quản lý để ghi nhật ký và giám sát, việc truy cập dữ liệu rất chậm, bất tiện và mở rộng. Nếu chúng tôi chạy cơ sở hạ tầng của mình, chúng tôi có thể tự do chạy bất kỳ phân tích tùy chỉnh ưa thích nào trên các vật phẩm giám sát của mình, vì dữ liệu dễ dàng tiếp cận hơn.

Lưu ý rằng đây không phải là một trường hợp chống lại các dịch vụ được quản lý. Một bàn tay của họ có thể kết hợp dễ sử dụng cùng với tính linh hoạt và chức năng. Nhưng nhiều trong số các dịch vụ này dễ sử dụng vì tính linh hoạt và chức năng: chúng ta có thể sử dụng chúng như một phương tiện để nhanh chóng xây dựng một chức năng đơn giản nhưng chúng sẽ ngăn chúng ta vượt qua điểm đó. Chúng ta cần nhận thức được sự đánh đổi này và xem xét.


8

CircleCI hiện cho phép bạn sử dụng trình thực thi máy cung cấp VM riêng cho bạn, với Ubuntu 14.04 và Docker phiên bản 17.06.0-ce được cài đặt. Điều này cho phép bạn bật các tính năng thử nghiệm cho trình nền Docker.

Bạn cần sử dụng machinekhóa thay vì dockerkhóa, để chạy công việc của bạn trong một máy ảo riêng thay vì chỉ chứa một Docker.

Bạn chỉ có thể chọn 2 hình ảnh cho máy:

  • circleci/classic:latest: Ubuntu 14.04 với Docker 17.03.0-ce hoặc
  • circleci/classic:edge: Ubuntu 14.04 với Docker 17,06.0-ce - phiên bản có các tính năng thử nghiệm.

Bạn cũng sẽ cần phải tự cài đặt các phụ thuộc vào máy, vì nó khá trống. Ví dụ: nếu bạn cần PHP cho các bài kiểm tra của mình, bạn sẽ cần chạy sudo apt-get install -y php5.

Dưới đây là một mẫu .circleci / config.yml xây dựng hình ảnh Docker bằng tính năng thử nghiệm docker build --squash:

.circleci / config.yml

version: 2
jobs:
  build:
    # Run in a separate virtual machine instead of a Docker container.
    machine:
      enabled: true
      # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.
      image: circleci/classic:edge
    steps:
      - checkout
      - run:
          command: |
            # Restart Docker with experimental features on.
            sudo sh -c 'echo '\''DOCKER_OPTS="--experimental=true"'\'' >> /etc/default/docker'
            sudo service docker restart

            # Install dependencies for tests etc.
            sudo apt-get update
            sudo apt-get install -y php5

            # Build image with experimental feature --squash.
            docker build --squash -t myuser/myimage .

            # Login and push Docker image to registry.
            docker login -u $DOCKER_USER -p $DOCKER_PASS
            docker push myuser/myimage

1
Đây phải là câu trả lời được chấp nhận. Hoạt động rất tốt trong Circle CI. Chỉ cần có hình ảnh mỏng 1GB của tôi xuống còn 180 MB.
pista329
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.