Docker

Docker的筆記

初學技術建議先熟悉 docker 指令,剛開始可能會覺得有點小複雜,反正指令都這樣,會使用 docker 之後,可以使用 docker 很快的搭建環境。

一些概念

multi-stage build

這個可以讓我們在同一個 docker file 分成好幾個 stage ,根據需求去使用,詳情參考 Use multi-stage builds | Docker Documentation

Docker 的限制

配置

設定使用者群組,以便之後可以使用 docker 指令而不需要使用 sudo

常用指令

查看開啟的容器

docker ps

停止容器

docker stop 容器ID

查看未啟動的容器

docker container ls -a

移除容器

docker rm 容器ID

搜尋 image

docker search 名稱

獲取容器地址,出處

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名稱

作弊表

危險區

移除所有未開啟的容器,請確認沒有要保留的容器在使用此指令!!

sudo docker rm $(sudo docker container ls -a | awk '{ if (NR >= 2) { print $1 } }')

移除<none>的image

sudo docker image rm $(sudo docker image ls -a | grep '<none>'| awk '{ print $3 }')

bash

啟動並執行bash

docker run --name http1 -it httpd bash 

執行後啟動bash

docker exec -it 容器id /bin/bash

ARG 參數 可以使用 --build-arg 帶入參數

掛載

volumes掛載

docker run -v 主機地址:容器地址 image-name

檔案

複製的指令為

sudo docker cp /hostPath container:/containerPath

複製容器內部的檔案,以httpd作為範例

sudo docker create --name temp httpd
sudo docker cp temp:/usr/local/apache2/conf/httpd.conf httpd.conf
sudo docker rm temp

Dockerfile

建立Dockerfile

FROM httpd
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf

build image

sudo docker build -t my-httpd . 

Docker 停止與刪除所有容器

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Docker Compose

Docker Remote

docker 設定遠程

docker context create <context_name> --docker "host=ssh://user@host:port"

切換 context

docker context use <context_name>

列出 context 列表

docker context list

參見文檔 Docker Context

安全性

docker group 之使用者,可以透過 docker | GTFOBins 描述方法提權


Docker