• 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"
    ]
    }
  • 相关阅读:
    数论笔记
    微积分笔记
    洛谷P3835 【模板】可持久化平衡树
    洛谷P3385 【模板】负环
    洛谷 P3379 【模板】最近公共祖先(LCA)
    洛谷P3386 【模板】二分图匹配
    洛谷P3388 【模板】割点(割顶)
    洛谷P3373 【模板】线段树 2
    洛谷P3372 【模板】线段树 1
    Linux(CentOS 6.5) 下安装MySql 5.7.18 二进制版本粗浅攻略
  • 原文地址:https://www.cnblogs.com/zy6103/p/15392110.html
Copyright © 2020-2023  润新知