Docker常用命令操作記錄
阿新 • • 發佈:2021-10-11
映象塊
解除安裝舊版本
yum remove docker docker-common docker-selinux docker-engine
安裝新版本
安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
使用國內源
yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
安裝docker
yum makecache fast
yum install docker-ce
自動化指令碼
curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh --mirror Aliyun
啟動
systemctl enable docker
systemctl start docker
新增核心
tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
拉取映象
docker pull [選項] [Docker Registry地址]<倉庫名>:<標籤>
檢視映象
docker images
檢視映象、容器、資料卷所佔用的空間
docker system df
檢視並刪除虛懸映象
docker rmi $(docker images -f dangling=true|sed '1d'|awk '{print $3}')
檢視mongo:3.2 之後建立的映象
docker images -f since=mongo:3.2
通過 LABEL 來過濾
docker images -f label=com.example.version=0.1
只包含映象ID和倉庫名
docker images --format "{{.ID}}: {{.Repository}}"
檢視改動了容器的儲存層
docker diff webserver
構建映象
docker commit(不建議使用,因為不知道操作了什麼,無法維護)
docker commit [選項] <容器ID或容器名> [<倉庫名>[:<標籤>]]
檢視映象歷史記錄
docker history nginx:v2
dockerfile定製映象
dockerfile檔案格式
FROM:指定基礎映象
RUN:執行命令
COPY:複製檔案,格式:COPY <源路徑>... <目標路徑>
ADD:複製檔案,將壓縮檔案直接解壓到目標目錄,如:ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
CMD:容器啟動命令,格式: CMD <命令> 或者 CMD ["可執行檔案", "引數1", "引數2"...]
舉例:CMD echo $HOME == CMD [ "sh", "-c", "echo $HOME" ]
ENTRYPOINT:和CMD一樣,指定容器啟動程式和引數,當指定了 ENTRYPOINT 後, CMD 的含義就發生了改變,不再是直接的執行其命令,而是將
CMD 的內容作為引數傳給 ENTRYPOINT 指令,換句話說實際執行時,將變為:<ENTRYPOINT> "<CMD>"
舉例:
FROM ubuntu:16.04
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
docker run myip -i 將CMD命令-i引數傳給ENTRYPOINT命令
ENV:設定環境變數,格式:ENV <key> <value> 或者ENV <key1>=<value1> <key2>=<value2>.
ARG:構建引數,格式:ARG <引數名>[=<預設值>]
VOLUME:匿名卷,格式:VOLUME ["<路徑1>", "<路徑2>"...] 或者VOLUME <路徑>
EXPOSE:宣告埠,格式為 EXPOSE <埠1> [<埠2>...]
WORKDIR:指定工作目錄,格式為 WORKDIR <工作目錄路徑>
USER:指定當前使用者,格式: USER <使用者名稱>
舉例:如果以 root 執行的指令碼,在執行期間希望改變身份
# 建立 redis 使用者,並使用 gosu 換另一個使用者執行命令
RUN groupadd -r redis && useradd -r -g redis redis
# 下載 gosu
RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.7/
gosu-amd64" \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true
# 設定 CMD,並以另外的使用者執行
CMD [ "exec", "gosu", "redis", "redis-server" ]
HEALTHCHECK:健康檢查
格式:
HEALTHCHECK [選項] CMD <命令> :設定檢查容器健康狀況的命令
HEALTHCHECK NONE :如果基礎映象有健康檢查指令,使用這行可以遮蔽掉其健康檢查指令
構建映象
docker build [選項] <上下文路徑/URL/-> 舉例:docker build -t nginx:v3 .
從Git repo 中構建
docker build https://github.com/twang2218/gitlab-ce-zh.git
從tar 壓縮包構建
docker build http://server/context.tar.gz
從標準輸入中構建
docker build - < Dockerfile
cat Dockerfile | docker build -
多階段構建
編寫 Dockerfile 檔案
FROM golang:1.9-alpine
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/go/helloworld/app .
CMD ["./app"]
儲存映象
docker save alpine | gzip > alpine-latest.tar.gz
載入映象
docker load -i alpine-latest.tar.gz
刪除映象
docker rmi [選項] <映象1> [<映象2> ...]
刪除虛懸映象的指令
docker rmi $(docker images -q -f dangling=true)
刪除所有倉庫名為 redis 的映象
docker rmi $(docker images -q redis)
刪除所有在 mongo:3.2 之前的映象
docker rmi $(docker images -q -f before=mongo:3.2)
容器
新建並啟動
舉例:docker run ubuntu:14.04 /bin/echo 'Hello world'
互動
docker run -t -i ubuntu:14.04 /bin/bash
啟動已終止容器
docker start 容器
後臺執行
舉例:docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
終止容器
docker stop 容器
進入容器
使用 docker attach 命令或 docker exec 命令,推薦大家使用 docker exec 命令
舉例:docker exec -i 69d1 bash
匯出容器
docker export 7691a814370e > ubuntu.tar
匯入容器
cat ubuntu.tar | docker import - test/ubuntu:v1.0 或者:docker import http://example.com/exampleimage.tgz example/imagerepo
刪除容器
docker rm trusting_newton
清理所有處於終止狀態的容器
docker container prune
倉庫(https://hub.docker.com/)
賬號註冊
https://cloud.docker.com
登入/退出
docker login/logout
查詢映象
docker search
拉取映象
docker pull
上傳映象
docker push
打標籤
docker tag 源映象名 新映象名
配置全部容器的DNS
/etc/docker/daemon.json 增加
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}