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的基础命令的主要内容,如果未能解决你的问题,请参考以下文章

docker简介和基础命令

Docker 学习 | 基础命令

Docker 基础知识-入门篇

Docker基础命令详解——镜像及容器操作

1. Docker基础命令

Docker基础知识和命令使用入门