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"
]
}
posted @ 2021-10-11 10:14  十年如一..bj  阅读(112)  评论(0编辑  收藏  举报