Cài đặt
Linux
Để biết thêm thông tin, xem tại đây
curl -sSL https://get.docker.com/ | sh
Mac
Để biết thêm thông tin, xem tại đây
Sử dụng liên kết này để tải xuống dmg.
https://download.docker.com/mac/stable/Docker.dmg
Mở tệp đã tải xuống và làm theo hướng dẫn cài đặt.
Windows
Để biết thêm thông tin, xem tại đây
Sử dụng trình cài đặt msi:
https://download.docker.com/win/stable/InstallDocker.msi
Mở tệp đã tải xuống và làm theo hướng dẫn cài đặt.
Đăng ký Docker & Registry
Đăng nhập vào registry
docker login
docker login localhost:8080
Đăng xuất từ registry.
docker logout
docker logout localhost:8080
Tìm kiếm image
docker search nginx
docker search --filter stars=3 --no-trunc nginx
Pull image
docker image pull nginx
docker image pull eon01/nginx localhost:5000/myadmin/nginx
Push image
docker image push eon01/nginx
docker image push eon01/nginx localhost:5000/myadmin/nginx
Run Container
Create và Run Container đơn giản
-Bắt đầu một ubuntu:latest Image mới nhất
- Ràng buộc Port từ CONTAINER vào Port trên HOST
80:3000
- Gắn thư mục hiện tại vào container
/data
- Note: Trên windows bạn phải đổi sang
-v ${PWD}:/data-v "C:\Data":/data
docker container run --name infinite -it -p 3000:80 -v ${PWD}:/data ubuntu:latest
Create Container
docker container create -t -i eon01/infinite --name infinite
Run Container
docker container run -it --name infinite -d eon01/infinite
Đổi tên Container
docker container rename infinite infinity
Loại bỏ Container
docker container rm infinite
Một container chỉ có thể được xóa bỏ sau khi dừng nó bằng lệnh. Để tránh điều này, hãy thêm tham số sau trong khi Run container.
docker stop --rm
Cập nhật Container
docker container update --cpu-shares 512 -m 300M infinite
Run lệnh trong container đang chạy
docker exec -it infinite sh
Start & Stop Container
Start
docker container start nginx
Stop
docker container stop nginx
Khởi động lại
docker container restart nginx
Pause
docker container pause nginx
Unpause
docker container unpause nginx
Block container
docker container wait nginx
Gửi SIGKILL
docker container kill nginx
Gửi tín hiệu khác
docker container kill -s HUP nginx
Kết nối với container hiện có
docker container attach nginx
Nhận thông tin về Container
Từ Run Container
Cách ngắn nhất:
docker ps
Thay thế:
docker container ls
Từ tất cả các container.
docker ps -a
docker container ls -a
Container Logs
docker logs infinite
Logs ‘đuôi -f’ Container’
docker container logs infinite -f
Kiểm tra container
docker container inspect infinite
docker container inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)
Container event
docker system events infinite
Public port
docker container port infinite
Run process
docker container top infinite
Xem sử dụng tài nguyên Container
docker container stats infinite
Kiểm tra các thay đổi đối với tệp hoặc thư mục trên hệ thống tệp của container
docker container diff infinite
Quản lý Images
Listing Images
docker image ls
Building Images
Từ một Dockerfile trong thư mục hiện tại
docker build .
Từ một git Repository
docker build github.com/creack/docker-firefox
Thay vì chỉ định context, bạn có thể sử dụng một Dockerfile duy nhất trong URL hoặc pipeline thông qua STDIN
docker build - < Dockerfile
docker build - < context.tar.gz
Build và Tag
docker build -t eon/infinite .
Build Dockerfile và chỉ định Build Context
docker build -f myOtherDockerfile .
Build từ Remote Dockerfile URI
curl example.com/remote/Dockerfile | docker build -f - .
Loại bỏ một Image
docker image rm nginx
Tạo image từ tệp hoặc luồng đầu vào tiêu chuẩn
docker image load < ubuntu.tar.gz
docker image load --input ubuntu.tar
Lưu trữ Image bằng Tar Archive (dump image)
docker image save busybox > ubuntu.tar
Hiển thị lịch sử của Image
docker image history
Create Image từ Container
docker container commit nginx
Gắn thẻ Image
docker image tag nginx eon01/nginx
Đẩy Image
docker image push eon01/nginx
Network
Create Network
Create Network overlay
docker network create -d overlay MyOverlayNetwork
Create Network bridge
docker network create -d bridge MyBridgeNetwork
Create Network overlay tùy chỉnh
docker network create -d overlay \ --subnet=192.168.0.0/16 \ --subnet=192.170.0.0/16 \ --gateway=192.168.0.100 \ --gateway=192.170.0.100 \ --ip-range=192.168.1.0/24 \ --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \ --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \ MyOverlayNetwork
Loại bỏ Network
docker network rm MyOverlayNetwork
List Network
docker network ls
Nhận thông tin về Network
docker network inspect MyOverlayNetwork
Kết nối Container Đang Run với Network
docker network connect MyOverlayNetwork nginx
Kết nối Container với Network khi nó khởi động
docker container run -it -d --network=MyOverlayNetwork nginx
Ngắt kết nối Container khỏi Network
docker network disconnect MyOverlayNetwork nginx
Expose Port
Sử dụng Dockerfile, bạn có thể Expose một Port trên Container bằng cách sử dụng:
EXPOSE <port_number>
Bạn cũng có thể ánh xạ Port chứa đến Port lưu trữ bằng cách sử dụng:
docker run -p $HOST_PORT:$CONTAINER_PORT --name <container_name> -t <image>
Ví dụ:
docker run -p $HOST_PORT:$CONTAINER_PORT --name infinite -t infinite
Security
Hướng dẫn xây dựng Image Docker an toàn
- Nên sử dụng base image cơ bản nhất (ubuntu, debian, cetos, alpine …)
- User chạy app trong Image là user ít đặc quyền nhất
- Ký và xác minh Image để giảm thiểu các cuộc tấn công MITM
- Tìm, fix và giám sát các lỗ hổng mã nguồn mở
- Không rò rỉ thông tin nhạy cảm vào Image docker
- Sử dụng tag cố định cho sự bất biến
- Sử dụng COPY thay vì ADD
- Sử dụng label cho metadata
- Sử dụng multi-stage build nhiều giai đoạn cho Image
- Sử dụng linter
Bạn có thể tìm thấy thêm thông tin trên bài đăng trên blog 10 Docker Image Security Best Practices của Snyk.
Làm sạch Docker
Loại bỏ Container đang Run
docker container rm nginx
Loại bỏ một container và khối lượng của nó
docker container rm -v nginx
Loại bỏ tất cả các Container Đã thoát
docker container rm $(docker container ls -a -f status=exited -q)
Loại bỏ Tất cả Container Đã dừng
docker container rm `docker container ls -a -q`
Loại bỏ Image Docker
docker image rm nginx
Loại bỏ Image không dùng
docker image rm $(docker image ls -f dangling=true -q)
Loại bỏ tất cả Image
docker image rm $(docker image ls -a -q)
Xóa tất cả Image chưa được gắn thẻ
docker image rm -f $(docker image ls | grep "^<none>" | awk "{print $3}")
Dừng & Loại bỏ tất cả Các Container
docker container stop $(docker container ls -a -q) && docker container rm $(docker container ls -a -q)
Loại bỏ volume không dùng
docker volume rm $(docker volume ls -f dangling=true -q)
Loại bỏ tất cả các không sử dụng (Container, Image, Network và ổ đĩa)
docker system prune -f
Clean hết mọi thứ
docker system prune -a
Docker Swarm
Cài đặt Docker Swarm
curl -ssl https://get.docker.com | bash
Create Swarm
docker swarm init --advertise-addr 192.168.10.1
Thêm node vào cụm
docker swarm join-token worker
Thêm node master vào cụm Swarm
docker swarm join-token manager
List các Service
docker service ls
List các Node
docker node ls
Create Service
docker service create --name vote -p 8080:80 instavote/vote
List Swarm Service
docker service ps
Thay đổi size Service
docker service scale vote=3
Update Service
docker service update --image instavote/vote:movies vote
docker service update --force --update-parallelism 1 --update-delay 30s nginx
docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote
docker service update --limit-cpu 2 nginx
docker service update --replicas=5 nginx