docker常用命令及操作流程

查看版本

  • docker version:查看镜像版本

拉取镜像

  • docker pull:拉取镜像
    • 命令格式一般为 docker pull [Registry]/[Repository]/[Image]:[Tag]
    • Registry:注册服务器。默认会从 docker.io 拉取镜像,一般国内操作会替换成 阿里,腾讯等等国内镜像
    • Repository:为镜像仓库,通常把一组相关联的镜像归为一个镜像仓库,library为 Docker 默认的镜像仓库。
    • image:镜像名称
    • tag:镜像的标签,如果你不指定拉取镜像的标签,默认为latest。
    • 实际上执行docker pull busybox命令,都是先从本地搜索,如果本地搜索不到busybox镜像则从 Docker Hub 下载镜像。

重命名、查看、删除镜像

  • docker tag:重命名镜像
    • 命令格式为 docker tag [SOURCE_IMAGE][:TAG] [TARGET_IMAGE][:TAG]
    • [SOURCE_IMAGE][:TAG]:原始镜像及版本
    • [TARGET_IMAGE][:TAG]:命名后的镜像及版本
  • docker image is:查看镜像
    • docker images:查看镜像
    • docker image ls busybox:查看busybox镜像
    • docker images |grep busybox:查询所有镜像再过滤得到的结果也是查询 busybox镜像
  • docker rmi 镜像名称/id:删除镜像(rmi:rm image)
    • docker run 加上–rm退出容器以后,这个容器就被删除了,方便在临时测试使用

构建镜像

  • docker commit:从运行中的容器提交为镜像
  • docker build:从 Dockerfile 构建镜像 推荐

创建并启动容器

  • docker run:创建并启动镜像

    • –name:指定容器名称,不填写则会默认一个名称(名字需要在镜像前
    • -d:后台运行容器,并返回容器id,即启动守护式容器。
      • docker容器后台运行,就必须有一个前台进程
    • -i则让容器的标准输入保持打开(终端的 STDIN 打开),即交互模式运行容器通常与-t同时使用
    • it: -t让docker分配一个伪终端并绑定到容器的标准输入上,同时使用 -it 参数可以让我们进入交互模式。 在交互模式下,用户可以通过所创建的终端来输入命令
    • -P:随机端口映射
    • -p:指定端口映射
      • ip:hostPort:containerPort
      • ip::containerPort
      • hostPort:containerPort
      • containerPort
    • -v:把 Docker 容器的某个目录或文件挂载到主机上,保证容器被重建后数据不丢失。-v参数冒号前面为主机目录,冒号后面为容器内目录。

      docker run -v /var/lib/registry/data:/var/lib/registry

    • –e:指定容器内的环境变量

      -e REGISTRY_HTTP_ADDR=0.0.0.0:443

  • docker run --name testNginx -d -p 80:80 nginx:安装nginx 名称修改为 textNginx 容器退出后不自动关闭

使用以下命令创建一个名为 busybox 的容器并进入 busybox 容器。

docker run --rm --name=busybox -it busybox sh
启动流程

  • docker会检查本地是否存在busybox镜像,如果不存在会从dockerhub拉取
  • 使用busybox镜像创建并启动一个容器
  • 分配文件系统,并在镜像只读层外创建一个读写层
  • 从docker IP池中分配一个IP给容器
  • 执行命令运行镜像

docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出

docker run -dit -p 8088:80 639f /bin/bash

在容器中,执行以下命令创建一个文件并写入内容:

  • Linux touch:若文件不存在,系统会建立一个新的文件。
  • Linux echo:字符串的输出

touch hello.txt && echo "I love Docker. " > hello.txt

此时在容器的根目录下,已经创建了一个 hello.txt 文件,并写入了 "I love Docker. "。下面,我们新打开-

  • 另一个命令行窗口,运行以下命令提交镜像:

    docker commit busybox busybox:hello

    docker image ls命令查看镜像:
    在这里插入图片描述

  • 第二种方式是最重要也是最常用的镜像构建方式:Dockerfile。Dockerfile 是一个包含了用户所有构建命令的文本。通过docker build命令可以从 Dockerfile 生成镜像。

    使用 Dockerfile 构建镜像具有以下特性:

    • Dockerfile 的每一行命令都会生成一个独立的镜像层,并且拥有唯一的 ID;
    • Dockerfile 的命令是完全透明的,通过查看 Dockerfile 的内容,就可以知道镜像是如何一步步构建的;
    • Dockerfile 是纯文本的,方便跟随代码一起存放在代码仓库并做版本管理。
    Dockerfile 常用的指令
    Dockerfile 指令指令简介
    FROMDockerfile 除了注释第一行必须是 FROM ,FROM 后面跟镜像名称,代表我们要基于哪个基础镜像构建我们的容器。
    RUNRUN 后面跟一个具体的命令,类似于 Linux 命令行执行命令。
    ADD拷贝本机文件或者远程文件到镜像内
    COPY拷贝本机文件到镜像内
    USER指定容器启动的用户
    ENTRYPOINT容器的启动命令
    CMDCMD 为 ENTRYPOINT 指令提供默认参数,也可以单独使用 CMD 指定容器启动参数
    ENV指定容器运行时的环境变量,格式为 key=value
    ARG定义外部变量,构建镜像时可以使用 build-arg = 的格式传递参数用于构建
    EXPOSE指定容器监听的端口,格式为 [port]/tcp 或者 [port]/udp
    WORKDIR为 Dockerfile 中跟在其后的所有 RUN、CMD、ENTR
    FROM centos:7
    COPY nginx.repo /etc/yum.repos.d/nginx.repo
    RUN yum install -y nginx
    EXPOSE 80
    ENV HOST=mynginx
    CMD ["nginx","-g","daemon off;"]
    
    • 第一行表示我要基于 centos:7 这个镜像来构建自定义镜像。这里需要注意,每个 Dockerfile 的第一行除了注释都必须以 FROM 开头。

    • 第二行表示拷贝本地文件 nginx.repo 文件到容器内的 /etc/yum.repos.d 目录下。这里拷贝 nginx.repo 文件是为了添加 nginx 的安装源。

    • 第三行表示在容器内运行yum install -y nginx命令,安装 nginx 服务到容器内,执行完第三行命令,容器内的 nginx 已经安装完成。

    • 第四行声明容器内业务(nginx)使用 80 端口对外提供服务。

    • 第五行定义容器启动时的环境变量 HOST=mynginx,容器启动后可以获取到环境变量 HOST 的值为 mynginx。

    • 第六行定义容器的启动命令,命令格式为 json 数组。这里设置了容器的启动命令为 nginx ,并且添加了 nginx 的启动参数 -g ‘daemon off;’ ,使得 nginx 以前台的方式启动。

镜像的实现原理

Docker 镜像是由一系列镜像层(layer)组成的,每一层代表了镜像构建过程中的一次提交。

Docker 镜像是静态的分层管理的文件组合,镜像底层的实现依赖于联合文件系统(UnionFS)

退出容器

  • exit:退出并关闭容器
  • ctrl+p+q:退出不关闭容器

删除容器

  • docker rm 容器id/名称:删除容器,容器必须是停止状态
    • docker rm -f:强制终止正在运行的容器

查询所有容器

  • docker ps:查看所有启动的镜像
    • docker ps -a:查看所有镜像,包括未运行的
    • docker ps -q:静默模式,只显示容器编号
    • docker ps -l:列出最近使用的容器 不常用
  • docker container ls --all:查看所有容器列表

启动、重启、关闭、删除容器

  • docker start 容器id/名称:启动容器
  • docker restart 容器id/容器名称:重启容器
  • docker stop 容器id/名称:停止容器
  • docker kill 容器id/名称:强制停止容器
  • docker rm 容器id/名称:删除容器
  • docker rm -f 容器id/名称:强制删除容器
  • docker rm -f $(docker ps -aq):强制删除所有容器

查看容器日志

  • docker logs 容器id/容器名称:查看容器log,如果没有log说明容器启动失败
  • docker logs 容器id -f:停留在日志中
  • docker logs -tf --tail 10 容器id
    • -t:加入时间戳
    • -f:跟随打印最新的日志
    • -tail 数字:显示后多少条
  • docker logs -f --tail 100 0b83f42a0efa

查看容器运行进程

  • docker top 容器id

查看容器运行细节

  • docker inspect 容器id

进入正在运行的容器并以命令交互

  • docker exec -it 容器id/名称 /bin/bash:以交互模式(重新分配一个终端) 进入容器中,可以使用exit退出并且不会关闭
  • docker attach 容器id:使用最开始创建的中断进入,exit 会退出容器

复制容器文件到主机

  • docker cp 容器id:容器内路径 主机路径

导出容器、导入镜像、创建一个新的镜像

  • docker export 容器id/容器名称:导出容器 例如 :

    docker export busybox > busybox.tar
    导出busybox容器执行后会在当前文件夹下生成 busybox.tar 文件

  • docker import 容器id/容器名称:导入镜像,例如:

    docker import busybox.tar busybox:test
    busybox.tar 被导入成为新的镜像,镜像名称为 busybox:test

  • docker commit -m=“修改内容” -a=“作者” 原容器id/容器名称 新容器名称:容器版本号
    • -m:镜像描述
    • -a:作者

    docker commit -m=“create tomcat” -a=“CodingAnHour” 45678vvvd mytomcat:1.0
    从tomcat容器创建一个新的镜像

查看数据键

  • docker volume ls :查看数据键

容器数据卷,持久化

持久化优点:

  • 容器的某个目录或文件挂载到主机上,保证容器被重建后数据不丢失
  • 容器间继承和共享数据
  • 示例:
    • 1、命令挂载

      • docker run -v /var/lib/registry/data:/var/lib/registry (其他配置) 镜像id
      • -v:冒号前面为主机目录,冒号后面为容器内目录。

      挂载时如果出现没有权限问题,可以直接在挂载目录后增加--privileged=true

      …Permission denied

    • 2、Dockerfile挂载

      • dockerfile的 VOLUME 指令可以在镜像中创建挂载点
      • VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的

      Dockerfile

      FROM ubuntu
      VOLUME ["/data1","/data2"]
      

查看容器信息 docker inspect 容器id

在这里插入图片描述

容器继承

–volumes-from标志创建一个安装该卷的新容器

  • 创建一个容器

    docker run --name mybusybox01 -it -d -v /host/data:/var/data busybox

  • 创建第二个容器

    docker run --name mybusybox02 -it -d --volumes-from mybusybox01 busybox

  • 创建第三个容器

    docker run --name mybusybox03 -it -d --volumes-from mybusybox02 busybox

  • 在任意容器中 /var/data目录下的文件被所有容器共享,引用同一个数据键
  • 删除其中一个容器,其他容器目录下文件不会发生变化

查看镜像历史信息

  • docker history 镜像id/镜像名称:tag

容器配置root权限

容器内root只是外部的一个普通用户权限。

  • --privileged=true :获取宿主机root权限

    docker run -it (其他配置) --privileged=true 镜像id

其他

  • docker diff 容器di/名称:查看容器改动历史
  • docker history nginx v2:查看nginx v2的镜像
  • docker login:登陆
  • docker search:搜索
  • docker inspect mysql:查看mysql信息 mounts:中把name的数据键mounts到destination中
  • docker pause:容器暂停
  • docker unpasue:启动已停止运行的容器。由暂停->启动
  • docker system df:查看容器或镜像所占用的空间

busybox 是一个集成了数百个 Linux 命令(例如 curl、grep、mount、telnet 等)的精简工具箱,只有几兆大小,被誉为 Linux 系统的瑞士军刀。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值