Hướng dẫn docker-cheat-sheet github - docker-cheat-sheet github

Docker Cheat Sheet

Bạn muốn cải thiện bảng gian lận này? Xem phần đóng góp!

Show

Mục lục

  • Tại sao Docker
  • Điều kiện tiên quyết
  • Cài đặt
  • Hộp đựng
  • Hình ảnh
  • Mạng
  • Đăng ký và kho lưu trữ
  • Dockerfile
  • Lớp
  • Liên kết
  • Tập
  • Phơi bày các cổng
  • Thực hành tốt nhất
  • Docker-Compose
  • Bảo vệ
  • Lời khuyên
  • Đóng góp

Tại sao Docker

Điều kiện tiên quyết

Cài đặt

Hộp đựng

Điều kiện tiên quyết

Cài đặt

Hộp đựng

Hình ảnh

Mạng

Đăng ký và kho lưu trữ

Dockerfile

Lớp

Liên kết

Tập

Phơi bày các cổng

Cài đặt

Hộp đựng

Hình ảnh

curl -sSL https://get.docker.com/ | sh

Mạng

Đăng ký và kho lưu trữ

Dockerfile

Lớp

Liên kết Docker Toolbox is legacy. You should to use Docker Community Edition, See Docker Toolbox.

Tập

Phơi bày các cổng

Thực hành tốt nhất

Dockerfile

Lớp

Liên kết

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world

Tập

Phơi bày các cổng

Thực hành tốt nhất

Bảo vệ

Lời khuyên

Đóng góp

"Với Docker, các nhà phát triển có thể xây dựng bất kỳ ứng dụng nào bằng bất kỳ ngôn ngữ nào bằng bất kỳ công cụ nào. Mũ đỏ.

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world

Các nhà phát triển có thể đi nhanh bằng cách bắt đầu với một trong hơn 13.000 ứng dụng có sẵn trên Docker Hub. Docker quản lý và theo dõi các thay đổi và phụ thuộc, giúp Sysadmins dễ dàng hiểu được cách các ứng dụng mà các nhà phát triển xây dựng hoạt động. Và với Docker Hub, các nhà phát triển có thể tự động hóa đường ống xây dựng của họ và chia sẻ các tạo tác với các cộng tác viên thông qua các kho lưu trữ công cộng hoặc tư nhân.

Docker giúp các nhà phát triển xây dựng và vận chuyển các ứng dụng chất lượng cao hơn, nhanh hơn. "-Docker là gì

Tôi sử dụng oh zsh của tôi với plugin docker để tự động hoàn thành các lệnh docker. Ymmv.

Linux

  • docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
    1 hiển thị phiên bản Docker bạn đang chạy.

Nhận phiên bản máy chủ:

$ docker version --format '{{.Server.Version}}'
1.8.0

Bạn cũng có thể đổ dữ liệu JSON thô:

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}

Hộp đựng

Quá trình docker bị cô lập cơ bản của bạn. Container là máy ảo như các chủ đề là các quy trình. Hoặc bạn có thể nghĩ về chúng như là chroots trên steroid.

Vòng đời

  • docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
    2 tạo ra một container nhưng không bắt đầu nó.
  • docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
    3 cho phép container được đổi tên.
  • docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
    4 tạo và bắt đầu một container trong một thao tác.
  • docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
    5 xóa một container.
  • docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
    6 cập nhật giới hạn tài nguyên của container.

Thông thường nếu bạn chạy một thùng chứa mà không có tùy chọn, nó sẽ bắt đầu và dừng ngay lập tức, nếu bạn muốn giữ nó chạy, bạn có thể sử dụng lệnh,

docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
7 Điều này sẽ sử dụng tùy chọn
docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
8 sẽ phân bổ phiên giả và
docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test
9 sẽ tự động tách ra container (Chạy container trong nền và ID container in).

Nếu bạn muốn một thùng chứa thoáng qua,

docker run -it -m 300M ubuntu:14.04 /bin/bash
0 sẽ tháo container sau khi nó dừng lại.

Nếu bạn muốn ánh xạ một thư mục trên máy chủ đến thùng chứa Docker,

docker run -it -m 300M ubuntu:14.04 /bin/bash
1. Cũng xem khối lượng.

Nếu bạn cũng muốn loại bỏ các khối lượng liên quan đến thùng chứa, việc xóa thùng chứa phải bao gồm công tắc

docker run -it -m 300M ubuntu:14.04 /bin/bash
2 như trong
docker run -it -m 300M ubuntu:14.04 /bin/bash
3.

Ngoài ra còn có một trình điều khiển ghi nhật ký có sẵn cho các thùng chứa riêng lẻ trong Docker 1.10. Để chạy Docker với trình điều khiển nhật ký tùy chỉnh (tức là, đến syslog), hãy sử dụng

docker run -it -m 300M ubuntu:14.04 /bin/bash
4.

Một tùy chọn hữu ích khác là

docker run -it -m 300M ubuntu:14.04 /bin/bash
5 bởi vì khi bạn chỉ định
docker run -it -m 300M ubuntu:14.04 /bin/bash
6 bên trong lệnh chạy, điều này sẽ cho phép bạn bắt đầu và dừng một thùng chứa bằng cách gọi nó với tên bạn đã chỉ định khi bạn tạo nó.

Bắt đầu và dừng lại

  • docker run -it -m 300M ubuntu:14.04 /bin/bash
    7 bắt đầu một container để nó đang chạy.
  • docker run -it -m 300M ubuntu:14.04 /bin/bash
    8 dừng một thùng chứa đang chạy.
  • docker run -it -m 300M ubuntu:14.04 /bin/bash
    9 dừng lại và bắt đầu một container.
  • docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
    
    0 tạm dừng một container đang chạy, "đóng băng" nó tại chỗ.
  • docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
    
    1 sẽ không có một thùng chứa đang chạy.
  • docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
    
    2 khối cho đến khi hoạt động của container dừng.
  • docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
    
    3 gửi một sigkill đến một container đang chạy.
  • docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
    
    4 sẽ kết nối với một thùng chứa đang chạy.

Nếu bạn muốn tách ra khỏi một thùng chứa đang chạy, hãy sử dụng

docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
5. Nếu bạn muốn tích hợp một thùng chứa với Trình quản lý quy trình máy chủ, hãy khởi động trình nền bằng
docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
6 sau đó sử dụng
docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
7.

Nếu bạn muốn hiển thị các cổng container thông qua máy chủ, hãy xem phần Cổng lộ.

Khởi động lại các chính sách trên các trường hợp docker bị gặp nạn được đề cập ở đây.

Ràng buộc CPU

Bạn có thể giới hạn CPU, sử dụng tỷ lệ phần trăm của tất cả các CPU hoặc bằng cách sử dụng các lõi cụ thể.

Ví dụ: bạn có thể nói cài đặt

docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
8. Cài đặt hơi lạ - 1024 có nghĩa là 100% CPU, vì vậy nếu bạn muốn container lấy 50% của tất cả các lõi CPU, bạn nên chỉ định 512. Xem https://goldmann.pl/blog/2014/09 /11/Tài nguyên-Quản lý-Trong-Docker/#_ CPU để biết thêm:

docker run -it -c 512 agileek/cpuset-test

Bạn cũng chỉ có thể sử dụng một số lõi CPU bằng cách sử dụng

docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
9. Xem https://agileek.github.io/docker/2014/08/06/docker-cpuset/ để biết chi tiết và một số video hay:

docker run -it --cpuset-cpus=0,4,6 agileek/cpuset-test

Lưu ý rằng Docker vẫn có thể nhìn thấy tất cả các CPU bên trong container - nó không sử dụng tất cả chúng. Xem Moby/Moby#20770 để biết thêm chi tiết.see all of the CPUs inside the container -- it just isn't using all of them. See moby/moby#20770 for more details.

Ràng buộc bộ nhớ

Bạn cũng có thể đặt các ràng buộc bộ nhớ trên Docker:

docker run -it -m 300M ubuntu:14.04 /bin/bash

Khả năng

Khả năng Linux có thể được đặt bằng cách sử dụng

docker run -it --device=/dev/ttyUSB0 debian bash
0 và
docker run -it --device=/dev/ttyUSB0 debian bash
1. Xem https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capability để biết chi tiết. Điều này nên được sử dụng để bảo mật lớn hơn.

Để gắn một hệ thống tập tin dựa trên cầu chì, bạn cần kết hợp cả-cap-add và-device:

docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs

Cung cấp quyền truy cập vào một thiết bị duy nhất:

docker run -it --device=/dev/ttyUSB0 debian bash

Cung cấp quyền truy cập vào tất cả các thiết bị:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
0

Thông tin thêm về các thùng chứa đặc quyền ở đây.

Thông tin

  • docker run -it --device=/dev/ttyUSB0 debian bash
    2 hiển thị các thùng chứa đang chạy.
  • docker run -it --device=/dev/ttyUSB0 debian bash
    3 Nhận nhật ký từ container. (Bạn có thể sử dụng trình điều khiển nhật ký tùy chỉnh, nhưng nhật ký chỉ có sẵn cho
    docker run -it --device=/dev/ttyUSB0 debian bash
    4 và
    docker run -it --device=/dev/ttyUSB0 debian bash
    5 trong 1.10).
  • docker run -it --device=/dev/ttyUSB0 debian bash
    6 xem xét tất cả thông tin trên một container (bao gồm địa chỉ IP).
  • docker run -it --device=/dev/ttyUSB0 debian bash
    7 Nhận các sự kiện từ container.
  • docker run -it --device=/dev/ttyUSB0 debian bash
    8 cho thấy cổng container đối mặt công cộng.
  • docker run -it --device=/dev/ttyUSB0 debian bash
    9 hiển thị các quá trình chạy trong container.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    00 hiển thị số liệu thống kê sử dụng tài nguyên của container.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    01 hiển thị các tệp đã thay đổi trong FS của container.

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
02 hiển thị các thùng chứa đang chạy và dừng.

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
03 hiển thị danh sách tất cả các container, mặc định hiển thị chỉ đang chạy.

Nhập khẩu xuất khẩu

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    04 Sao chép các tệp hoặc thư mục giữa container và hệ thống tập tin cục bộ.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    05 Biến hệ thống tập tin container thành luồng lưu trữ tarball thành stdout.

Thực thi các lệnh

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    06 để thực thi lệnh trong container.

Để nhập một thùng chứa đang chạy, hãy gắn một quy trình shell mới vào một thùng chứa có tên là FOO, sử dụng:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
07.

Hình ảnh

Hình ảnh chỉ là mẫu cho các thùng chứa Docker.

Vòng đời

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    08 cho thấy tất cả các hình ảnh.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    09 tạo ra một hình ảnh từ một tarball.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    10 Tạo hình ảnh từ Dockerfile.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    11 tạo hình ảnh từ một container, tạm dừng nó tạm thời nếu nó đang chạy.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    12 loại bỏ một hình ảnh.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    13 tải một hình ảnh từ kho lưu trữ tar dưới dạng stdin, bao gồm hình ảnh và thẻ (kể từ 0,7).
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    14 lưu một hình ảnh vào luồng lưu trữ TAR cho stdout với tất cả các lớp cha, thẻ & phiên bản (kể từ 0,7).

Thông tin

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    15 cho thấy lịch sử của hình ảnh.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    16 gắn thẻ một hình ảnh vào một tên (cục bộ hoặc đăng ký).

Dọn dẹp

Mặc dù bạn có thể sử dụng lệnh

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
12 để xóa hình ảnh cụ thể, có một công cụ gọi là Docker-GC sẽ làm sạch hình ảnh một cách an toàn không còn được sử dụng bởi bất kỳ container nào. Kể từ Docker 1.13,
# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
18 cũng có sẵn để xóa hình ảnh không sử dụng. Xem Prune.

Tải/lưu hình ảnh

Tải một hình ảnh từ tệp:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
1

Lưu một hình ảnh hiện có:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
2

Hộp đựng nhập khẩu/xuất

Nhập một thùng chứa dưới dạng hình ảnh từ tệp:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
3

Xuất một thùng chứa hiện có:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
4

Sự khác biệt giữa tải một hình ảnh đã lưu và nhập một thùng chứa được xuất dưới dạng hình ảnh

Tải một hình ảnh bằng lệnh

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
19 tạo ra một hình ảnh mới bao gồm cả lịch sử của nó. Nhập một thùng chứa làm hình ảnh bằng lệnh
# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
20 tạo ra một hình ảnh mới, ngoại trừ lịch sử dẫn đến kích thước hình ảnh nhỏ hơn so với tải hình ảnh.
Importing a container as an image using the
# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
20 command creates a new image excluding the history which results in a smaller image size compared to loading an image.

Mạng

Docker có một tính năng mạng. Docker tự động tạo 3 giao diện mạng khi bạn cài đặt nó (cầu, lưu trữ không). Một container mới được đưa vào mạng cầu theo mặc định. Để cho phép giao tiếp giữa nhiều container, bạn có thể tạo một mạng mới và khởi chạy các container trong đó. Điều này cho phép các container giao tiếp với nhau trong khi bị cô lập với các container không được kết nối với mạng. Hơn nữa, nó cho phép ánh xạ tên container vào địa chỉ IP của họ. Xem làm việc với các mạng để biết thêm chi tiết.

Vòng đời

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    21 Tên Tạo một mạng mới (loại mặc định: Cầu).
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    22 Tên Xóa một hoặc nhiều mạng theo tên hoặc định danh. Không có thùng chứa nào có thể được kết nối với mạng khi xóa nó.

Thông tin

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    15 cho thấy lịch sử của hình ảnh.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    16 gắn thẻ một hình ảnh vào một tên (cục bộ hoặc đăng ký).

Dọn dẹp

  • Mặc dù bạn có thể sử dụng lệnh
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    12 để xóa hình ảnh cụ thể, có một công cụ gọi là Docker-GC sẽ làm sạch hình ảnh một cách an toàn không còn được sử dụng bởi bất kỳ container nào. Kể từ Docker 1.13,
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    18 cũng có sẵn để xóa hình ảnh không sử dụng. Xem Prune.
  • Tải/lưu hình ảnh

Tải một hình ảnh từ tệp:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
5

Lưu một hình ảnh hiện có:

Hộp đựng nhập khẩu/xuất

Nhập một thùng chứa dưới dạng hình ảnh từ tệp:

Xuất một thùng chứa hiện có:

  • Sự khác biệt giữa tải một hình ảnh đã lưu và nhập một thùng chứa được xuất dưới dạng hình ảnh
  • Tải một hình ảnh bằng lệnh
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    19 tạo ra một hình ảnh mới bao gồm cả lịch sử của nó. Nhập một thùng chứa làm hình ảnh bằng lệnh
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    20 tạo ra một hình ảnh mới, ngoại trừ lịch sử dẫn đến kích thước hình ảnh nhỏ hơn so với tải hình ảnh.
  • Mạng
  • Docker có một tính năng mạng. Docker tự động tạo 3 giao diện mạng khi bạn cài đặt nó (cầu, lưu trữ không). Một container mới được đưa vào mạng cầu theo mặc định. Để cho phép giao tiếp giữa nhiều container, bạn có thể tạo một mạng mới và khởi chạy các container trong đó. Điều này cho phép các container giao tiếp với nhau trong khi bị cô lập với các container không được kết nối với mạng. Hơn nữa, nó cho phép ánh xạ tên container vào địa chỉ IP của họ. Xem làm việc với các mạng để biết thêm chi tiết.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    21 Tên Tạo một mạng mới (loại mặc định: Cầu).

# Display the version of docker installed: docker version # Pull, create, and run 'hello-world': docker run hello-world22 Tên Xóa một hoặc nhiều mạng theo tên hoặc định danh. Không có thùng chứa nào có thể được kết nối với mạng khi xóa nó.

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
23 Mạng danh sách

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
24 Tên hiển thị thông tin chi tiết trên một hoặc nhiều mạng.

Sự liên quan

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
25 Container mạng kết nối một container với mạng

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
26 Network Container Ngắt kết nối một container khỏi mạng

  • Bạn có thể chỉ định một địa chỉ IP cụ thể cho một thùng chứa:
  • Đăng ký & Kho lưu trữ
  • Kho lưu trữ là một bộ sưu tập các hình ảnh được gắn thẻ cùng nhau tạo ra hệ thống tệp cho một thùng chứa.
  • Sổ đăng ký là máy chủ - một máy chủ lưu trữ kho lưu trữ và cung cấp API HTTP để quản lý việc tải lên và tải xuống kho lưu trữ.
  • Docker.com lưu trữ chỉ số riêng của mình cho một cơ quan đăng ký trung tâm có chứa một số lượng lớn kho lưu trữ. Phải nói rằng, Cơ quan đăng ký Docker trung tâm không làm tốt công việc xác minh hình ảnh và nên tránh nếu bạn lo lắng về bảo mật.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    27 để đăng nhập vào sổ đăng ký.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    28 để đăng xuất từ ​​một đăng ký.
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    29 Tìm kiếm Sổ đăng ký cho hình ảnh.

# Display the version of docker installed: docker version # Pull, create, and run 'hello-world': docker run hello-world30 kéo một hình ảnh từ đăng ký đến máy địa phương.

  • .dockerignore
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    31 đẩy một hình ảnh vào sổ đăng ký từ máy địa phương.
  • Chạy đăng ký địa phương
  • Bạn có thể chạy một sổ đăng ký địa phương bằng cách sử dụng dự án phân phối Docker và xem xét các hướng dẫn triển khai địa phương.
  • Cũng xem danh sách gửi thư.
  • Dockerfile
  • Tệp cấu hình. Đặt một thùng chứa Docker khi bạn chạy
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    10 trên đó. Rất thích hợp hơn
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    11.
  • Dưới đây là một số trình soạn thảo văn bản phổ biến và các mô -đun làm nổi bật cú pháp của họ mà bạn có thể sử dụng để tạo Dockerfiles:
  • Nếu bạn sử dụng Jedit, tôi đã đưa ra một mô -đun làm nổi bật cú pháp cho Dockerfile mà bạn có thể sử dụng.
  • EntryPoint định cấu hình một container sẽ chạy như một thực thi.
  • Khối lượng tạo ra một điểm gắn kết cho các khối được gắn bên ngoài hoặc các thùng chứa khác.
  • Người dùng đặt tên người dùng cho các lệnh chạy / cmd / entrypoint sau.
  • WorkDir đặt thư mục làm việc.
  • Arg xác định một biến thời gian xây dựng.
  • OnBuild thêm một hướng dẫn kích hoạt khi hình ảnh được sử dụng làm cơ sở cho bản dựng khác.
  • STOPSignal đặt tín hiệu cuộc gọi hệ thống sẽ được gửi đến container để thoát.
  • Nhãn áp dụng siêu dữ liệu khóa/giá trị cho hình ảnh, container hoặc daemon của bạn.
  • Shell Override Shell được sử dụng bởi Docker để chạy các lệnh.
  • HealthCheck nói với Docker cách kiểm tra một thùng chứa để kiểm tra xem nó có còn hoạt động không.

Hướng dẫn

  • Hướng dẫn Dockerfile của Flux7

Ví dụ

  • Ví dụ
  • Thực tiễn tốt nhất để viết Dockerfiles
  • Michael Crosby có thêm một số thực tiễn tốt nhất của Dockerfiles / Take 2.
  • Xây dựng hình ảnh docker tốt / xây dựng hình ảnh docker tốt hơn
  • Quản lý cấu hình container với siêu dữ liệu
  • Cách viết Dockerfiles xuất sắc

Lớp

Hệ thống tập tin được phiên bản trong Docker dựa trên các lớp. Chúng giống như Git cam kết hoặc thay đổi cho các hệ thống tập tin.

Liên kết

Liên kết là cách các container Docker nói chuyện với nhau thông qua các cổng TCP/IP. Atlassian Show làm việc ví dụ. Bạn cũng có thể giải quyết các liên kết bằng tên máy chủ.

Điều này đã bị phản đối ở một mức độ nào đó bởi các mạng do người dùng xác định.

Lưu ý: Nếu bạn muốn các container chỉ giao tiếp với nhau thông qua các liên kết, hãy bắt đầu DOKKER DAEMON với

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
38 để vô hiệu hóa giao tiếp trong quá trình.

Nếu bạn có một thùng chứa có thùng chứa tên (được chỉ định bởi

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
39) và trong Dockerfile, nó có một cổng lộ ra:

Sau đó, nếu chúng ta tạo một thùng chứa khác được gọi là liên kết như vậy:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
6

Sau đó, các cổng và bí danh tiếp xúc của container sẽ hiển thị theo liên kết với các biến môi trường sau:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
7

Và bạn có thể kết nối với nó theo cách đó.

Để xóa các liên kết, sử dụng

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
40.

Nói chung, liên kết giữa các dịch vụ Docker là một tập hợp con của "Khám phá dịch vụ", một vấn đề lớn nếu bạn dự định sử dụng Docker ở quy mô trong sản xuất. Vui lòng đọc hệ sinh thái Docker: Discovery Discovery và các cửa hàng cấu hình phân tán để biết thêm thông tin.

Tập

Khối lượng Docker là hệ thống tập tin nổi tự do. Chúng không phải được kết nối với một container cụ thể. Bạn có thể sử dụng khối lượng được gắn từ các thùng chứa chỉ dành cho dữ liệu để di động. Kể từ Docker 1.9.0, Docker đã đặt tên cho các tập thay thế các thùng chứa chỉ có dữ liệu. Cân nhắc sử dụng các khối được đặt tên để thực hiện nó thay vì các thùng chứa dữ liệu.

Vòng đời

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    41
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    42

Thông tin

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    43
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    44

Khối lượng rất hữu ích trong các tình huống mà bạn không thể sử dụng các liên kết (chỉ là TCP/IP). Chẳng hạn, nếu bạn cần có hai trường hợp Docker giao tiếp bằng cách để lại nội dung trên hệ thống tập tin.

Bạn có thể gắn chúng vào một số container Docker cùng một lúc, sử dụng

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
45.

Bởi vì khối lượng là hệ thống tập tin bị cô lập, chúng thường được sử dụng để lưu trữ trạng thái từ các tính toán giữa các thùng chứa thoáng qua. Đó là, bạn có thể có một container không trạng thái và thoáng qua chạy từ một công thức, thổi nó đi, và sau đó có một phiên bản thứ hai của hộp chứa thoáng qua từ nơi cái cuối cùng rời đi.

Xem khối lượng nâng cao để biết thêm chi tiết. Container42 cũng hữu ích.

Bạn có thể ánh xạ các thư mục máy chủ MacOS dưới dạng tập docker:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
8

Bạn có thể sử dụng khối lượng NFS từ xa nếu bạn cảm thấy dũng cảm.

Bạn cũng có thể xem xét chạy các container chỉ chạy dữ liệu như được mô tả ở đây để cung cấp một số tính di động dữ liệu.

Xin lưu ý rằng bạn có thể gắn các tập tin dưới dạng khối lượng.

Phơi bày các cổng

Việc hiển thị các cổng đến thông qua thùng chứa máy chủ là khó khăn nhưng có thể thực hiện được.

Điều này được thực hiện bằng cách ánh xạ cổng container vào cổng máy chủ (chỉ sử dụng giao diện localhost) bằng cách sử dụng

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
46:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
9

Bạn có thể nói với Docker rằng bộ chứa lắng nghe trên các cổng mạng được chỉ định khi chạy bằng cách sử dụng phơi bày:

Lưu ý rằng

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
47 không để lộ chính cổng - chỉ
# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
46 sẽ làm điều đó.

Để lộ cổng của container trên cổng localhost của bạn, chạy:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
0

Nếu bạn đang chạy Docker trong VirtualBox, thì bạn cũng cần chuyển tiếp cổng ở đó, sử dụng Forwarded_port. Xác định một loạt các cổng trong Vagrantfile của bạn như thế này để bạn có thể tự động ánh xạ chúng:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
1

Nếu bạn quên những gì bạn đã ánh xạ cổng vào thùng chứa máy chủ, hãy sử dụng

docker run -it --device=/dev/ttyUSB0 debian bash
8 để hiển thị nó:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
2

Thực hành tốt nhất

Đây là nơi các thực tiễn tốt nhất và câu chuyện chiến tranh của Docker nói chung:

  • Lỗ thỏ của việc sử dụng Docker trong các thử nghiệm tự động
  • Bridget Kromhout có một bài đăng trên blog hữu ích về việc chạy Docker trong sản xuất tại Dramafever.
  • Ngoài ra còn có một bài đăng trên blog thực hành tốt nhất từ ​​Lyst.
  • Xây dựng môi trường phát triển với Docker
  • Bài diễn văn trong một container docker

Docker-Compose

Compose là một công cụ để xác định và chạy các ứng dụng Docker đa phụ thuộc. Với Compose, bạn sử dụng tệp YAML để định cấu hình các dịch vụ ứng dụng của bạn. Sau đó, với một lệnh duy nhất, bạn tạo và khởi động tất cả các dịch vụ từ cấu hình của mình. Để tìm hiểu thêm về tất cả các tính năng của Compose, hãy xem danh sách các tính năng.

Bằng cách sử dụng lệnh sau, bạn có thể khởi động ứng dụng của mình:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
3

Bạn cũng có thể chạy docker -compose ở chế độ tách ra bằng cờ -D, sau đó bạn có thể dừng nó bất cứ khi nào cần bằng lệnh sau:

Bạn có thể giảm mọi thứ xuống, loại bỏ các container hoàn toàn, với lệnh Down. Vượt qua

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
50 để loại bỏ khối lượng dữ liệu.

Bảo vệ

Đây là nơi các mẹo bảo mật về Docker đi. Trang bảo mật Docker đi vào chi tiết hơn.

Điều đầu tiên đầu tiên: Docker chạy như root. Nếu bạn ở trong nhóm

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
51, bạn thực sự có quyền truy cập gốc. Nếu bạn để lộ ổ cắm Docker Unix vào một thùng chứa, bạn sẽ cung cấp quyền truy cập root container vào máy chủ.

Docker không nên là phòng thủ duy nhất của bạn. Bạn nên bảo đảm và làm cứng nó.

Để hiểu được những gì các container để lại phơi bày, bạn nên đọc sự hiểu biết và làm cứng các thùng chứa Linux của Aaron Grattafiori. Đây là một hướng dẫn đầy đủ và toàn diện về các vấn đề liên quan đến các container, với rất nhiều liên kết và chú thích dẫn đến nội dung hữu ích hơn. Các mẹo bảo mật sau đây rất hữu ích nếu bạn đã làm cứng các container trong quá khứ, nhưng không phải là sự thay thế cho sự hiểu biết.

Mẹo bảo mật

Để bảo mật lớn nhất, bạn muốn chạy Docker trong một máy ảo. Điều này là trực tiếp từ Trưởng nhóm bảo mật Docker - slide / ghi chú. Sau đó, chạy với apparmor / seccomp / selinux / grsec, vv để giới hạn các quyền container. Xem các tính năng bảo mật Docker 1.10 để biết thêm chi tiết.

ID hình ảnh Docker là thông tin nhạy cảm và không nên tiếp xúc với thế giới bên ngoài. Đối xử với chúng như mật khẩu.

Xem tờ Cheat Cheat của Docker của Thomas Sjögren: Một số thứ tốt về việc làm cứng container trong đó.

Kiểm tra tập lệnh bảo mật băng ghế dự bị, tải xuống các giấy tờ trắng.

10 Docker hình ảnh của SNYK

Bạn nên bắt đầu bằng cách sử dụng kernel với các bản vá không ổn định cho GRSECurity / PAX được biên dịch, chẳng hạn như Linux Alpine. Nếu bạn đang sử dụng GRSECurity trong sản xuất, bạn nên hỗ trợ thương mại cho các bản vá ổn định, giống như bạn sẽ làm cho Redhat. Đó là 200 đô la một tháng, không có gì đối với ngân sách DevOps của bạn.

Vì Docker 1.11, bạn có thể dễ dàng giới hạn số lượng quy trình hoạt động chạy bên trong một thùng chứa để ngăn chặn bom ngã ba. Điều này yêu cầu một hạt nhân Linux> = 4.3 với cgroup_pids = y trong cấu hình kernel.

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
4

Cũng có sẵn vì Docker 1.11 là khả năng ngăn chặn các quy trình đạt được các đặc quyền mới. Tính năng này đã nằm trong nhân Linux kể từ phiên bản 3.5. Bạn có thể đọc thêm về nó trong bài viết trên blog này.

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
5

Từ tờ Cheat Cheat của Docker (trong PDF, khiến cho nó khó sử dụng, vì vậy hãy sao chép bên dưới) bằng các giải pháp container:

Tắt giao tiếp giữa các chuyên gia với:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
6

Đặt thùng chứa để chỉ đọc:

Xác minh hình ảnh bằng Hashsum:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
7

Đặt khối lượng chỉ được đọc:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
8

Xác định và chạy người dùng trong Dockerfile của bạn để bạn không chạy làm root bên trong container:

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
9

Không gian tên người dùng

Cũng có công việc trên các không gian tên người dùng - nó nằm trong 1.10 nhưng không được bật theo mặc định.

Để kích hoạt các không gian tên người dùng ("Remap các người dùng") trong Ubuntu 15.10, hãy làm theo ví dụ về blog.

Video bảo mật

  • Sử dụng Docker một cách an toàn
  • Đảm bảo các ứng dụng của bạn bằng Docker
  • Bảo mật container: Các container có thực sự chứa không?
  • Linux Container: Tương lai hay tưởng tượng?

Lộ trình an ninh

Lộ trình Docker nói về sự hỗ trợ của SECCOMP. Có một trình tạo chính sách Apparmor có tên Bane và họ đang làm việc trên các hồ sơ bảo mật.

Lời khuyên

Sources:

  • 15 mẹo docker trong 5 phút
  • CodeFresh Hacks hàng ngày docker

Cắt tỉa

Các lệnh quản lý dữ liệu mới đã hạ cánh như Docker 1.13:

  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    52
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    53
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    54
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    55
  • # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    18

DF

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
57 trình bày một bản tóm tắt về không gian hiện đang được sử dụng bởi các đối tượng Docker khác nhau.

Heredoc Docker container

$ docker version --format '{{.Server.Version}}'
1.8.0
0

ID cuối cùng

$ docker version --format '{{.Server.Version}}'
1.8.0
1

Cam kết với lệnh (nhu cầu Dockerfile)

$ docker version --format '{{.Server.Version}}'
1.8.0
2

Nhận địa chỉ IP

$ docker version --format '{{.Server.Version}}'
1.8.0
3

Hoặc với JQ được cài đặt:

$ docker version --format '{{.Server.Version}}'
1.8.0
4

Hoặc sử dụng mẫu GO:

$ docker version --format '{{.Server.Version}}'
1.8.0
5

Hoặc khi xây dựng một hình ảnh từ Dockerfile, khi bạn muốn vượt qua trong một đối số xây dựng:

$ docker version --format '{{.Server.Version}}'
1.8.0
6

Nhận bản đồ cổng

$ docker version --format '{{.Server.Version}}'
1.8.0
7

Tìm các thùng chứa bằng cách biểu hiện thông thường

$ docker version --format '{{.Server.Version}}'
1.8.0
8

Nhận cài đặt môi trường

$ docker version --format '{{.Server.Version}}'
1.8.0
9

Giết container đang chạy

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
0

Xóa tất cả các container (lực !! Chạy hoặc dừng container)

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
1

Xóa các thùng chứa cũ

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
2

Xóa các thùng chứa dừng

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
3

Xóa container sau khi dừng

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
4

Xóa hình ảnh lơ lửng

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
5

Xóa tất cả các hình ảnh

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
6

Xóa khối lượng treo lủng lẳng

Kể từ Docker 1.9:

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
7

Trong 1.9.0, bộ lọc

# Display the version of docker installed:
docker version

# Pull, create, and run 'hello-world':
docker run hello-world
58 không hoạt động - nó bị bỏ qua và sẽ liệt kê tất cả các tập.

Hiển thị phụ thuộc hình ảnh

$ docker version --format '{{json .}}'
{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
8

Giảm béo container Docker

  • Làm sạch APT trong một lớp
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    59 - Điều này nên được thực hiện trong cùng một lớp với các lệnh
    # Display the version of docker installed:
    docker version
    
    # Pull, create, and run 'hello-world':
    docker run hello-world
    60 khác. Nếu không, các lớp trước vẫn tồn tại thông tin ban đầu và hình ảnh của bạn vẫn sẽ béo.

    $ docker version --format '{{json .}}'
    {"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"am"}
    9

  • Làm phẳng một hình ảnh

    docker run -it -c 512 agileek/cpuset-test
    0

  • Cho sao lưu

    docker run -it -c 512 agileek/cpuset-test
    1

Giám sát việc sử dụng tài nguyên hệ thống để chạy các thùng chứa

Để kiểm tra việc sử dụng CPU, bộ nhớ và mạng I/O của một thùng chứa, bạn có thể sử dụng:

Đối với tất cả các thùng chứa được liệt kê bởi ID:

docker run -it -c 512 agileek/cpuset-test
2

Đối với tất cả các container được liệt kê theo tên:

docker run -it -c 512 agileek/cpuset-test
3

Đối với tất cả các thùng chứa được liệt kê bởi hình ảnh:

docker run -it -c 512 agileek/cpuset-test
4

Xóa tất cả các hình ảnh không được gắn thẻ:

docker run -it -c 512 agileek/cpuset-test
5

Loại bỏ container bằng một biểu thức chính quy:

docker run -it -c 512 agileek/cpuset-test
6

Xóa tất cả các thùng chứa đã thoát:

docker run -it -c 512 agileek/cpuset-test
7

Tập có thể là tệp

Xin lưu ý rằng bạn có thể gắn các tập tin dưới dạng khối lượng. Ví dụ: bạn có thể tiêm một tệp cấu hình như thế này:

docker run -it -c 512 agileek/cpuset-test
8

Đóng góp

Đây là cách đóng góp cho bảng gian lận này.

Mở readme.md

Nhấp vào readme.md

Hướng dẫn docker-cheat-sheet github - docker-cheat-sheet github

Chỉnh sửa trang

Hướng dẫn docker-cheat-sheet github - docker-cheat-sheet github

Thay đổi và cam kết

Hướng dẫn docker-cheat-sheet github - docker-cheat-sheet github

Hướng dẫn docker-cheat-sheet github - docker-cheat-sheet github