1. 程式人生 > 其它 >Docker常用命令操作記錄

Docker常用命令操作記錄

映象塊

解除安裝舊版本

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"
]
}