Docker 常用命令总结

694 阅读6分钟
# 镜像 关键指令回顾
docker [image] pull NAME[:TAG]  # 获取镜像
docker images
docker image ls  # 列出镜像
docker [image] tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]  # 添加镜像标签
docker image inspect [OPTIONS] IMAGE [IMAGE...]  # 查看镜像详细信息
docker [image] history [OPTIONS] IMAGE  # 查看镜像各层创建信息
docker search [OPTIONS] TERM  # 搜索镜像
docker rmi/image rm [OPTIONS] IMAGE [IMAGE...]  # 使用标签删除镜像
docker image prune  # 清理镜像
docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]  # 基于已有容器创建镜像
docker [container] import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]  # 基于本地模板导入镜像
docker [image] build [OPTIONS] PATH | URL | -  # 基于Dockerfile创建镜像
docker [image] save [-o fileName] IMAGE [IMAGE...]  # 存出镜像
docker [image] load  [-i fileName] # 载入镜像
docker [image] push [OPTIONS] NAME[:TAG]  # 上传镜像
# 容器 关键命令回顾
docker [container] create [OPTIONS] IMAGE [COMMAND] [ARG...]  # 创建容器
docker [container] start [OPTIONS] CONTAINER [CONTAINER...]  # 启动容器
docker [container] run [OPTIONS] IMAGE [COMMAND] [ARG...]  # 新建并启动容器
docker [container] logs  # 查看容器的输出信息
docker [container] pause CONTAINER [CONTAINER...]  # 暂停容器,恢复换为unpause
docker [container] stop [OPTIONS] CONTAINER [CONTAINER...]  # 终止容器
docker [container] attach [OPTIONS] CONTAINER  # 进入在后台运行的容器
docker [container] exec [OPTIONS] CONTAINER COMMAND [ARG...]  # 推荐进入容器的用法,可以在运行中容器内直接执行任意命令
docker [container] rm [OPTIONS] CONTAINER [CONTAINER...]  # 删除处于终止或退出状态的容器
docker container prune [OPTIONS]  # Remove all stopped containers
docker [container] export [OPTIONS] CONTAINER  # 导出容器快照
docker [container] import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]  # 导入容器
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]  # 查看容器详
docker [container] top CONTAINER [ps OPTIONS]  # 查看容器内进程,PID、用户、时间、命令等
docker [container] stats [OPTIONS] [CONTAINER...]  # 查看统计信息,CPU、内存、存储、网络等
docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker [container] cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH  # 复制文件
docker [container] diff CONTAINER  # 查看容器内文件系统的变更
docker [container] port CONTAINER [PRIVATE_PORT[/PROTO]]  # 查看端口映射
docker [container] update [OPTIONS] CONTAINER [CONTAINER...]  # 更新容器的一些运行时配置,主要是一些资源限制份额。
# 仓库 关键指令回顾
docker login  # 登录 docker hub
docker login --username=dfface registry.cn-beijing.aliyuncs.com  # 登录第三方镜像市场
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]  # push 之前的重命名,打标签,镜像还是指向同一个
docker push registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]  # 上传到
docker run -d -p 5000:5000 registry:2  # 使用官方的 registry:2 搭建私有仓库服务,默认镜像存储于 /var/lib/registry
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2  # 使用官方的 registry:2 搭建私有仓库服务,并将镜像存储于 /opt/data/registry

# 数据管理 关键命令回顾
docker volume create [OPTIONS] [VOLUME]  # 创建数据卷
docker volume create -d local test  # 默认/var/lib/docker/volumes路径下
## 在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷
docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py  # 两者等效
docker run -d -P --name web -v /webapp:/opt/webapp:ro training/webapp python app.py  # Docker挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读
## 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载,在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷
docker run -it -v /dbdatav--name dbdata ubuntu  # 创建一个数据卷容器dbdata
docker run -it --volumes-from dbdata --name db1 ubuntu  
docker run -it --volumes-from dbdata --name db2 ubuntu  #  容器db1和db2都挂载同一个数据卷到相同的/dbdata目录,三个容器任何一方在该目录下的写入,其他容器都可以看到
## 利用数据卷容器进行数据备份与恢复
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata  # 备份dbdata数据卷容器内的数据卷
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar  # 挂载dbdata2的容器,并使用tar xvf解压备份文件到所挂载的容器卷中

# 端口映射和容器互联 关键命令回顾
docker run -p 5000:5000 training/webapp python app.py  # 本地所有地址的5000端口映射到容器的5000端口
docker run -p 127.0.0.1:5000:5000 training/webapp python app.py  # 指定映射使用一个特定地址
docker run -p 127.0.0.1::5000 training/webapp python app.py  # 绑定localhost的任意端口(容器启动时随机指定)到容器的5000端口
docker run -d -P --name web training/webapp python app.py  # 为容器自定义命名,容器的名称是唯一的
docker run -d --name db -e MYSQL_ROOT_PASSWORD=Passw0rd! mysql  # 创建一个新的数据库容器,-e, --env list Set environment variables
docker run -d -P --name webapp --link db:db training/webapp python app.py  # 创建一个新的webapp容器,并将它连接到db容器,--link参数的格式为--link <name or id>:alias
docker exec -it webapp bash  # 在运行中的container中执行命令
docker start -i webapp  # 以交互方式启动一个已经停止的容器
# Dockerfile 关键命令回顾
## 配置指令
ARG <name>[=<default value>]  # 定义创建镜像过程中使用的变量,当镜像编译成功后,ARG指定的变量将不再存在
FROM <image>:<tag>[AS<name>]  # 任何Dockerfile中第一条指令必须为FROM指令,指定所创建镜像的基础镜像
LABEL <key>=<value> <key>=<value> <key>=<value>……  # 为生成的镜像添加元数据标签信息
EXPOSE <port>[<port>/<protocol>……]  # 声明镜像内服务监听的端口
ENV <key> <value>
ENV <key>=<value>……  # 指定环境变量,在镜像生成过程中会被后续RUN指令使用,在镜像启动的容器中也会存在
ENTRYPOINT ["executable","param1","param2"]  # exec调用执行,指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数
ENTRYPOINT command param1 param2  # shell中执行
VOLUME ["/data"]  # 创建一个数据卷挂载点
USER daemon  # 指定运行容器时的用户名或UID,后续的RUN等指令也会使用指定的用户身份
WORKDIR /path/to/workdir  # 为后续的RUN、CMD、ENTRYPOINT指令配置工作目录,可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径
ONBUILD [INSTRUCTION]  # 指定当基于所生成镜像创建子镜像时,自动执行的操作指令
STOPSIGNAL signal  # 指定所创建镜像启动的容器接收退出的信号值
HEALTHCHECK [OPTIONS]CMD command  # 根据所执行命令返回值是否为0来判断健康与否
HEALTHCHECK NONE  # 禁止基础镜像中的健康检查
SHELL ["executable", "parameters"]  # 指定其他命令使用shell时的默认shell类型,默认值为["/bin/sh","-c"]
## 操作指令
RUN <command>  # 在shell终端中运行命令
RUN ["executable","param1","param2"]  # 运行指定命令,使用exec执行
CMD["executable","param1","param2"]  # 相当于执行executable param1 param2,每个Dockerfile只能有一条CMD命令
CMD command param1 param2  # 在默认的Shell中执行
CMD ["param1","param2"]  # 提供给ENTRYPOINT的默认参数
ADD <src> <dest>  # 添加内容到镜像,比较强大
COPY <src> <dest>  # 复制本地主机的<src>(为Dockerfile所在目录的相对路径,文件或目录)下内容到镜像中的<dest>,目标路径不存在时,会自动创建
## 创建镜像
docker build [OPTIONS] PATH | URL | - 
## 使用 .dockerignore 文件
## 多步骤创建