Docker的基础命令
Posted @Kerry~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的基础命令相关的知识,希望对你有一定的参考价值。
帮助命令
docker version 查看docker 版本 docker info 显示 Docker 系统信息,包括镜像和容器数。 docker --help 展示docker所有命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。 command 为你想要的了解命令 docker run --help 案例 Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] [OPTIONS] 表示参数选项 []括号表示可有可无 [IMAGE] 表示镜像 [COMMAND] 表示命令 ..
镜像命令
docker images 查看本地所有镜像 docker images nginx 查看指定的镜像 默认是latest版本 nginx:1.20 查看指定版本 Usage: docker images [OPTIONS] [REPOSITORY[:TAG]] Options: -a, --all 列出本地所有的镜像(含中间映像层)默认是-f --digests 显示镜像的摘要信息 -f, --filter filter 根据条件筛选镜像 --no-trunc 显示完整的镜像信息 -q, --quiet 只显示镜像ID docker images -q 只查看镜像id 镜像信息说明 REPOSITORY TAG IMAGE ID CREATED SIZE REPOSITORY # 镜像仓库 TAG # 镜像标签(版本) IMAGE ID # 镜像ID CREATED # 镜像创建时间 SIZE # 镜像大小 docker search 镜像名称 命令来搜索镜像 Usage: docker search [OPTIONS] TERM Options: -f, --filter filter 根据提供的 filter 过滤输出(stars、is-automated、is-official) --format string 使用 Go 模板进行美观打印 --limit int 限制int最大搜索结果数(默认值25) --no-trunc 显示更加详细的描述信息 使用案例: docker search nginx docker search nginx --limit 5 显示5条 docker search nginx --limit 5 --no-trunc 显示5条并且详细的展示描述信息 docker search nginx -f stars=5 -f is-automated=true stars数量大于5的并且是自动构建
镜像信息说明 NAME DESCRIPTION STARS OFFICIAL AUTOMATED NAME: 镜像仓库源的名称 DESCRIPTION: 镜像的描述 OFFICIAL: 是否 docker 官方发布 stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。 AUTOMATED: 自动构建。 下载镜像 docker pull 镜像名称[:TAG] docker pull [OPTIONS] NAME[:TAG|@DIGEST] Options: -a, --all-tags 下载仓库所有版本的镜像(谨慎使用) --disable-content-trust 禁用内容信任跳过图像验证(默认为true)-- 不需要用到 --platform string 设置服务器支持多平台,则设置平台字符串 -q, --quiet 省掉详情信息输出 -- 不建议 docker pull nginx 下载nginx镜像 没有指定版本的,都是下载latest版本 docker pull nginx:1.20 下载指定1.20版本nginx镜像 容器运行命令(容器是镜像的实例)-- 具体容器相关命令查看下面 docker run -it centos(镜像名称) Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Options: -i 以交互式运行运行容器 -t 在新容器内指定一个伪终端或终端,用于交互(简单来说就是生成一一个交互终端)。 -d 以守护进程方式在后台运行容器。 -p (小写)指定docker对外暴露端口映射,容器里面的服务端口 8888:8080 -P (大写) 随机端口映射容器里面服务端口 镜像删除 Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] Options: -f, --force 强制删除 --no-prune 不要删除未标记的父对象 docker rmi 镜像名称[:TAG]|IMAGE ID 如果下载了指定了版本,删除时候需要指定 或 根据镜像ID删除 docker rmi nginx 默认删除latest版本 docker rmi -f nginx:1.20 强制删除 docker rmi -f 镜像名1:TAG 镜像名2:TAG 批量删除 docker rmi -f $(docker images -qa) 删除全部镜像 创建镜像 当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。 1、从已经创建的容器中更新镜像,并且提交这个镜像。 2、使用 Dockerfile 指令来创建一个新的镜像 方式1:例如我们下载了一个tomcat镜像,我们想把里面的webapps 里面的docs删除掉,并且形成一个新的镜像(本地) docker pull tomcat 下载tomcat镜像 docker run -it -p 8888:8080 tomcat 运行tomcat容器 docker ps 查看正在运行的容器-- 留意CONTAINER ID参数 另外打开一个终端 以/bin/bash方式进入(/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash) 其实默认就是 bin/bash 只是习惯性写一下 docker exec -it 容器ID(CONTAINER ID) /bin/bash cd /usr/local/tomcat 如果是MAC 就需要做一下以下操作(windows省去) mv webapps webapps2 mv webapps.dist/ webapps 浏览器访问:localhost:8888 查看是否可以访问 进入webapps目录 rm -rf ./docs 那么对应的 http://localhost:8888/docs/ 访问为 404 创建新的镜像 docker commit -m=“镜像描述” -a=“作者名称” 容器ID(CONTAINER ID) 你起的镜像名称(REPOSITORY参数)[:TAG] docker commit -m="del tomcat docs and examplex" -a="ymb" 934bafa2c0fa ymb/tomcat:1.1 各个参数说明: -m: 提交的描述信息 -a: 指定镜像作者 934bafa2c0fa:容器 ID runoob/ubuntu:v2: 指定要创建的目标镜像名:tag(标签/版本) TAG不带 默认是 latest版本 docker images 查看本地镜像就会有一个 ymb/tomcat镜像
使用新创建的镜像来运行容器 docker run -d -p 6567:8080 --name="mydiytomcat" ymb/tomcat:1.1 访问 localhost:6567 点击Documentation 访问404 就完成了 这是创建一个本地镜像 Dockerfile - 构建新的镜像 ---等待完善
容器命令
查看容器命令 docker ps [OPTIONS] Options: -a, --all 显示所有容器(默认) -f, --filter filter 根据信息过滤查找 -n, --last int 示最后被创建的 n 个容器(默认 -1) -l, --latest 显示最后创建的容器(全部状态中筛选) --no-trunc 显示容器完整信息 -q, --quiet 仅显示正在运行的容器ID -s, --size 显示容器文件大小 docker ps 查看正在运行容器 docker ps -q 查看正在运行的容器ID docker ps -s 查看容器文件大小 docker ps -l 查看最后创建的容器 docker ps -n 3 查看最后创建的三个容器 docker ps --filter name=bingo --filter name=huang --filter status=running 以上过滤条件会找出 name 包含 bingo 或 huang 并且 status 为 running 的容器。 运行容器命令 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] (可选项参数 -- 常用基础参数) Options: -i 以交互式模式运行容器,通常与-t 同时使用 -t 在新容器内指定一个伪终端或终端,通常与-i同时使用。 -d 以守护进程模式在后台运行容器,并返回容器ID,也即启动守护式容器。 --name。 指定生成的容器名称 -P (大写) 随机端口映射容器里面服务端口 -- 随机端口映射 -p (小写)指定docker对外暴露端口映射容器里面的服务端口 8888:8080 -- 指定端口映射 指定端口有四种格式: ip:hostPort:containerPort ip::containerPort hostPort:containerPort(常用这种) containerPort IMAGE: 镜像名称/容器ID COMMAND: 命令 案例: 1、依据centos镜像创建一个容器并且运行 docker run -it centos 2、通过centos镜像 创建一个名称为 mycentos 容器 docker run -it --name=“mycentos” centos 3、用守护进程方式运行容器 docker run -d centos 当大家使用docker ps 查看的时候发现没有一个正在运行的容器,docker ps -a 时候发现容器的状态都是停止 Exited 解释说明一下: 这个关于docker的运行机制问题: Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。因为Docker是一个Client-Server结构的系统。所以想要后台运行,那么必须需要一个前台进程。(需要持续响应,就像websocket一样 心跳检测保持客户端活跃状态,保持与服务端链接)。 这个是 docker 的机制问题,比如你的 web 容器,我们以 nginx 和 fpm 为例, 正常情况下,我们配置启动服务只需要启动响应的 service 即可,例如 service nginx start && service php5-fpm start 但是,这样做, nginx 和 fpm 均为后台进程模式运行,就导致 docker 前台没有运行的应用, 这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了. 所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,保持前台有事情做。 解决方法: 设置一个启动命令才就可以避免此问题,设置启动命令(一定要设置不会自动退出的命令) 设置命令每隔5秒 写入日志一句话 hello 保证前台运行(重点) docker run -d centos /bin/sh -c "while true;do echo hello;sleep 5;done" 或者拼通网络也可以 docker run -d centos /bin/sh ping 8.8.8.8 查看日志 docker logs [OPTIONS] CONTAINER(容器名称/容器ID) Options: -f 跟随最新的日志打印 -t 显示日志时间 --tail 显示最新的条数 1、显示最新的10日志 docker logs --tail 10 79f73e675985 2、显示最新10条 展示时间并且最加写入 docker logs -f -t --tail 10 79f73e675985 启动容器 docker start [OPTIONS] CONTAINER [CONTAINER...] 可选参数 Options: -a, --attach Attach STDOUT/STDERR and forward signals --detach-keys string Override the key sequence for detaching a container -i, --interactive 以交互模式启动容器 CONTAINER:容器ID/容器名称 docker start 6e759fdb41d2 单个 docker start 5a50942ef4fd 6e759fdb41d2 多个 退出容器 方式一:exit 容器停止退出 方式二:容器不停止退出 重启容器 docker restart 容器名称/容器ID-01 容器名称/容器ID-02 docker restart 5a50942ef4fd 6e759fdb41d2 停止容器 docker stop 容器名称/容器ID 强制停止容器(一个或者多个) docker kill 容器名称/容器ID-01 容器名称/容器ID-02 删除容器 docker rm 容器ID 删除单个容器 docker rm -f $(docker ps -a -q) 删除全部 查看容器内部细节命令 docker inspect 容器ID 以json串形式告诉容器的结构 查看容器内部运行进程 docker top 容器ID 重新进入容器 docker exec -it 容器ID /bin/bash /bin/bash 以交互式shell方式进入容器(默认) 打开一个新的终端 docker exec -it 容器ID ls -l /tmp 显示容器内的结果 centos docker attach 容器ID 直接进入容器 上述两个区别: 1、exec 是执行命令 比attach 强大 2、attach 直接进入容器启动命令的终端,不会启动新的进程 3、exec 是在容器中打开新的终端,并且可以启动新的进程 4、attach 需要先进入容器再操作,exec 可以直接在容器外面操作容器里面命令 容器中文件拷贝到宿主机上 docker cp 容器ID:容器内路径 目的主机路径 docker cp 79f73e675985:/home/ymb_error.log /Users/xiemingbao/ymb_1111.log
以上是关于Docker的基础命令的主要内容,如果未能解决你的问题,请参考以下文章