zoukankan      html  css  js  c++  java
  • 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"
    ]
    }
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/zy6103/p/15392110.html
Copyright © 2011-2022 走看看