docker 常用命令

130 阅读5分钟

学习docke从curd开始,查看和删除都比较简单,我们只需要把精力主要集中到新建和修改上

docker run/start/stop/restart/pull/push

docker run -t -i --name test -p 8080:80  ubuntu:18.04 /bin/bash

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

-d, –detach:用于在后台运行容器并打印容器ID。

-e、-env:用于设置容器中的环境变量。

-h, –hostname:用于更改容器的主机名。

-i, –interactive:用于与容器交互

–isolation:用于指定容器隔离技术

-l, –lable:用于向容器添加元数据。

–link:它添加到另一个容器的链接

–log-driver:用于指定容器的日志驱动,覆盖默认的日志驱动

–log-opts:用于指定日志驱动程序的选项。

-m, –memory: 用于以字节为单位设置内存限制

–mount:用于将文件系统挂载到容器

–name:用于指定容器的名称

–network:用于将容器连接到与默认网络不同的网络

-p, –publish: 用于将容器的端口发布到主机

-P, --publish-all:大写p 暴露一个端口随机映射到主机端口

–restart:它允许我们为容器指定重启策略

-rm:它在容器退出或停止运行时立即删除容器

-t, –tty: 它分配终端并且主要与’-i’选项一起使用。

-v, –volume:用于将volume绑定到容器上进行持久化存储

-w, –workdir: 允许设置容器的工作目录

# 这几个命令的使用格式基本一样,而且参数也基本都能看明白
 docker start 容器名称/容器id 
 
 docker pull/push 镜像名称

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从 registry 下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

修改镜像和容器相关操作

docker export/import/load/save/cp/commit/tag/build

# 把test 容器打包成nginx.tar导出到本地的目录下
docker export -o nginx.tar test
docker export test > nginx.tar

# 把nginx.tar 导入成镜像test/nginx:v1,由容器再次变成镜像
# 重要的事情说三遍:重要 重要 重要
# 在试nginx的时候根据容器重新导入生成的镜像,再次启动的时候不执行dockerfile上的命令,你需要手动的输入,所以启动的时候注意根据自己的需要启动
docker import nginx.tar test/nginx:v1

# 把当前目录下的index.html 复制到容器中的项目目录下,覆盖掉原来的首页
docker cp ./index.html test:/usr/share/nginx/html/index.html
# 把项目中的目录拷贝出来
docker cp test:/usr/share/nginx/html/index.html ./

docker commit -m="" -a="" 容器ID 新的镜像名称:[version]
# 
docker tag 源镜像ID  目标镜像名称 
#使用dockerfile 构建一个镜像
docker build [OPTIONS] PATH | URL | -
--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q`,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

查看镜像和容器

docker images/ps/logs/inspect/exec/attach/top

# 列出当前服务器上的所有镜像
docker images -a -q
# -q, --quiet           Only show image IDs
# -q 只显示镜像的id
# -a, --all             Show all images
# -a 列出所有的镜像

docker ps -a -q
# -q, --quiet           Only show image IDs
# -q 只显示容器的id
# -a, --all             Show all images(默认只显示正在运行容器)
# -a 列出所有的容器(默认只显示正在运行容器)

docker logs -f 容器名称/容器id
# -f 持续关注日志输出,相当于tail -f
docker logs test
docker logs 66c3c91febd2
#
# 显示详细的容器信息
docker inspect 容器名称/容器id
docker inspect test/66c3c91febd2

# 使用后不会显示命令行提示符,可以直接输入Linux命令,然后就会显示终端的命令提示符
# 使用exit退出容器会停止退出容器,我们一般使用docker exec命令
docker attach 容器名称/容器id

# 进入容器后退出容器但是不会导致容器退出
docker exec -it  容器名称/容器id

# top列出镜像中运行的所有进程
docker top 容器名称/容器id
docker top test/66c3c91febd2

删除镜像和容器

docker rm/rmi

# 强制删除所有的镜像
docker rmi -f `docker images -aq`
docker rmi -f $(docker images -aq)
#-f, --force     Force the removal of a running container (uses SIGKILL)

# 强制删除所有的容器
docker rm -f `docker ps -aq`
docker rm -f $(docker ps -aq)