1、基础命令

  1. 查看docker版本
  2. docker version
  3. 查看docker信息
  4. docker info
  5. 帮助命令
  6. docker --help

docker inspect 查看细节(容器、镜像)

  1. #查看容器的细节
  2. docker inspect 容器id
  3. #查看镜像的细节(详细信息)
  4. docker inspect image镜像名称
  5. #除了看容器详情直接使用 看其他的都要加对应关键字
  6. docker inspect image/network/volume...

docker login 登录

  1. #查看登录成功唯一认证串
  2. cat /root/.docker/config.json

image.png

docker logout 退出登录仓库



2、镜像命令

docker build 从一个 Dockerfile 文件构建镜像

  1. # -t 指定镜像名称 -f 指定dockerfile文件 .是上线文环境
  2. docker build -t imageName -f DockerfileName .

docker images 列出已下载镜像

docker images 等价于 docker image ls

  1. docker images -a 查看所有的镜像(更详细,包含中间映像层)
  2. docker images -q 查看当前镜像的 ID
  3. docker images -qa 查看所有镜像的 ID
  4. docker images --digests 显示镜像的摘要信息
  5. docker images --no-trunc 显示镜像的完整信息docker images

docker search 搜索镜像

docker pull 下载镜像

  1. docker pull redis == docker pull redis:latest(最新版)
  2. #如果想要下载指定版本
  3. docker pull redis:5.0.12-alpine3.13

docker push 推送镜像到镜像仓库

注册docker hub并登录
可以创建一个仓库,选为public
docker push lshady/mynginx:tagname
docker hub一个完整镜像的全路径是
docker.io/library/redis:alpine3.13 我们的 docker.io/lshady/mynginx:tagname
docker images的时候镜像缩略了全名 默认官方镜像没有docker.io/library/
docker.io/ rediscommander / redis-commander:latest
docker.io/lshady/mynginx:v4 我的镜像的全称
登录远程docker仓库
当前会话登录以后 docker login 。所有的东西都会push到这个人的仓库
docker push lshady/mynginx:tagname
上面命令的完整版 docker push docker.io/lshady/mynginx:v4
怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录

  1. docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lshady/mynginx:[镜像版本号]
  2. docker push registry.cn-hangzhou.aliyuncs.com/lshady/mynginx:[镜像版本号]

docker rmi 删除镜像

  1. #默认不加tag 删除latest版本 如果有多个同名镜像 需要指定版本
  2. docker rmi redis
  3. docker rmi redis:latest
  4. #强制删除镜像 如果有在运行的容器 不能直接删除 想直接删除 加 -f 参数
  5. docker rmi -f redis:latest
  6. #强制删除所有镜像
  7. docker rmi -f $(docker images -aq)

docker image prune 删除无用的游离镜像

image.png

docker tag 给镜像重新起名字

  1. docker tag 原镜像名 新镜像名字
  2. #举例
  3. docker tag redis:latest redis:lshady

docker save/load—操作镜像 生成tar文件—

docker save -o busybox.tar busybox:latest 把busybox镜像保存成tar文件
docker load -i busybox.tar 把压缩包里面的内容直接导成镜像

3、容器命令

docker run 启动一个容器

  1. #latest版本不用加:latest ,如果是指定版本需要镜像名称:TAG
  2. docker run redis (后面跟随镜像名称)

常用关键参数 OPTIONS 说明:

  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • —name=”nginx-lb”:为容器指定一个名称;
  • —dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • —dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=”ritchie”: 设置环境变量;
  • —env-file=[]: 从指定文件读入环境变量;
  • —cpuset=”0-2” or —cpuset=”0,1,2”: 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • —net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • —link=[]: 添加链接到另一个容器;
  • —expose=[]: 开放一个端口或一组端口;
  • —restart , 指定重启策略,可以写—restart=awlays 总是故障重启
  • —volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹

docker logs 查看容器日志

  1. docker logs 容器id
  2. docker logs -f 容器id #跟踪日志持续输出
  3. docker logs -ft --tail=150 容器id #跟踪日志持续输出 输出最后的150行 显示是时间戳

docker attach 绑定容器控制台

  1. 绑定到运行中容器的 标准输入, 输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,
  2. 他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx...)

docker exec 进入容器 常用

  1. [root@lshady ~]# docker exec --help
  2. Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  3. Run a command in a running container
  4. Options:
  5. -d, --detach Detached mode: run command in the background
  6. --detach-keys string Override the key sequence for detaching a container
  7. -e, --env list Set environment variables
  8. --env-file list Read in a file of environment variables
  9. -i, --interactive 以交互模式进去 不是以绑定模式
  10. --privileged 以最高权限进入容器
  11. -t, --tty 重新分配一个终端
  12. -u, --user string 使用那种身份进入容器
  13. -w, --workdir string Working directory inside the container
  14. #常用写法
  15. docker exec -it 容器名 /bin/bash
  16. #终极为所欲为操作
  17. docker exec -it --privileged 容器名 /bin/bash

docker cp 文件拷贝

  1. # 可以将容器内文件拷贝到宿主机 也可以将宿主机文件拷贝到容器内
  2. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的复制出来
  3. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的复制进去
  4. # 指令示例
  5. docker cp index.html mynginx4:/usr/share/nginx/html
  6. docker cp mynginx4:/etc/nginx/nginx.conf nginx.conf

选项
SRC_PATH 指定为一个文件:

  • DEST_PATH不存在:文件名为 DEST_PATH ,内容为SRC的内容
  • DEST_PATH不存在并且以/ 结尾:报错
  • DEST_PATH 存在并且是文件:目标文件内容被替换为SRC_PATH的文件内容。
  • DEST_PATH存在并且是目录:文件复制到目录内,文件名为SRC_PATH指定的名字

SRC_PATH 指定为一个目录:

  • DEST_PATH 不存在: DEST_PATH 创建文件夹,复制源文件夹内的所有内容
  • DEST_PATH 存在是文件:报错
  • DEST_PATH 存在是目录
    • SRC_PATH 不以 /. 结束:源文件夹复制到目标里面
    • SRC_PATH 以 /. 结束:源文件夹里面的内容复制到目标里面

自动创建文件夹不会做递归。把父文件夹做好

docker diff 检查容器里文件系统结构的更改

  1. 检查容器里文件系统结构的更改【A:添加文件或目录 D:文件或者目录删除 C:文
  2. 件或者目录更改】
  3. docker diff

docker commit 将容器生成镜像

  1. # 一般运行中的容器会常年修改,我们要使用最终的新镜像
  2. docker commit -a lshady -m "first commit" mynginx4 mynginx:v4
  3. #把新的镜像放到远程docker hub,方便后来在其他机器下载

docker export 导出容器文件系统为一个tar文件。commit是直接提交成镜像,export是导出成文件方便传输

  1. #---------export操作容器/import-------------------
  2. docker export导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令
  3. docker ps --no-trunc),然后再用下面启动。
  4. docker run -d -P mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'
  5. 或者docker image inspect 看之前的镜像,把 之前镜像的 Entrypoint的所有和 Cmd的连接起来就
  6. 能得到启动命令

4、制作镜像几种方式

1、基于已经存在的容器,提取成镜像
2、人家给了我tar包,导入成镜像
3、做出镜像

  1. 准备一个文件Dockerfile
  2. 编写Dockerfile
  3. 构建镜像 docker build -t mybusy66:v6 -f Dockerfile .