回顾一下Docker的基本操作

发布于:2025-07-16 ⋅ 阅读:(23) ⋅ 点赞:(0)

基本操作

Docker是一个开源的应用容器引擎,使用Docker可以更轻松地创建、部署和运行应用程序。下面介绍Docker的一些基本操作,主要包括镜像操作容器操作仓库操作这几个方面:

镜像操作

  • 搜索镜像:使用docker search命令可以搜索Docker Hub上的镜像。例如,搜索Nginx镜像:
docker search nginx

该命令会列出与Nginx相关的镜像,包含镜像的名称、描述、星级评价等信息。

  • 拉取镜像:通过docker pull命令将镜像从仓库拉取到本地。比如拉取最新版本的Nginx镜像:
docker pull nginx

也可以指定镜像的标签(版本号),例如拉取Nginx的1.23.3版本:

docker pull nginx:1.23.3
  • 查看本地镜像:使用docker images命令查看本地已下载的镜像列表,包括镜像的仓库名、标签、镜像ID、创建时间和大小等信息。
docker images
  • 删除镜像:利用docker rmi命令可以删除本地镜像。例如删除名为nginx的镜像:
docker rmi nginx

如果镜像被多个容器引用,需要先停止并删除相关容器才能删除镜像;若要强制删除,可以使用-f选项。

  • 创建镜像:常见的创建镜像方式是通过编写Dockerfile文件,然后使用docker build命令构建。例如,在包含Dockerfile的目录下执行以下命令构建镜像,-t参数用于指定镜像的名称和标签:
docker build -t my-nginx .

.表示Dockerfile所在的当前目录。

  • 镜像打标签docker tag命令用于给镜像添加标签,方便镜像的管理和分发。比如给本地的nginx镜像添加一个新标签my-nginx:v1
docker tag nginx my-nginx:v1

容器操作

  • 运行容器:使用docker run命令可以基于镜像创建并运行一个容器。例如,运行一个Nginx容器,并将容器的80端口映射到主机的8080端口:
docker run -d -p 8080:80 nginx

其中,-d表示以后台模式运行容器;-p指定端口映射规则,格式为主机端口:容器端口

  • 查看容器docker ps命令用于查看正在运行的容器列表,包括容器的ID、镜像、状态、端口映射等信息。如果要查看所有容器(包括已停止的),可以使用docker ps -a命令。
docker ps
docker ps -a
  • 停止和启动容器:通过docker stop命令可以停止正在运行的容器,例如停止ID为container_id的容器:
docker stop container_id

要重新启动已停止的容器,使用docker start命令:

docker start container_id
  • 进入容器docker exec命令允许在正在运行的容器中执行命令。例如,进入正在运行的Nginx容器的Shell环境:
docker exec -it container_id bash

-i选项表示交互式操作,-t选项分配伪终端。

  • 删除容器:使用docker rm命令删除已停止的容器。例如删除ID为container_id的容器:
docker rm container_id

如果要删除正在运行的容器,可以使用-f选项强制删除。

  • 查看容器日志docker logs命令用于查看容器的日志信息。例如查看Nginx容器的日志:
docker logs container_id

仓库操作

  • 登录Docker Hub:使用docker login命令登录Docker Hub仓库,需要输入用户名和密码:
docker login
  • 推送镜像到仓库:在登录成功后,使用docker push命令可以将本地镜像推送到Docker Hub仓库。例如推送名为my-nginx:v1的镜像:
docker push my-nginx:v1
  • 从仓库拉取镜像:除了前面提到的docker pull命令外,当镜像推送至私有仓库时,登录私有仓库后,同样使用docker pull命令拉取指定镜像。

以上就是Docker的一些基本操作,通过这些操作,能够满足日常开发、测试和部署容器化应用的大部分需求。

日志操作

在Docker中查看容器日志是排查应用问题、监控运行状态的关键操作。以下是查看容器日志的常用方法及场景说明:

一、基础命令:docker logs

1. 查看完整日志
docker logs <容器ID或名称>
  • 示例:查看Nginx容器的所有日志
    docker logs nginx-container
    
2. 实时跟踪日志(类似tail -f
docker logs -f <容器ID或名称>
  • 场景:调试启动失败的容器(如应用崩溃)
    docker logs -f my-app
    
3. 查看最近N行日志
docker logs --tail <行数> <容器ID或名称>
  • 示例:查看最近50行日志
    docker logs --tail 50 my-container
    
4. 按时间戳过滤日志
docker logs --since <时间点> <容器ID或名称>
  • 示例:查看从2023-01-01之后的日志
    docker logs --since "2023-01-01T00:00:00" my-container
    

二、进阶技巧

1. 格式化输出时间戳
docker logs --timestamps <容器ID或名称>
  • 输出示例
    2023-10-15T12:34:56.789000000Z Hello from container
    
2. 结合grep搜索关键词
docker logs <容器ID或名称> | grep "ERROR"
  • 场景:快速定位错误信息
    docker logs my-app | grep "Exception"
    
3. 查看JSON格式日志(原始格式)
docker logs --details <容器ID或名称>
  • 场景:获取完整元数据(如容器标签、环境变量)

三、日志驱动与持久化

1. 查看当前日志驱动
docker inspect <容器ID或名称> | grep LogDriver
  • 常见驱动json-file(默认)、journaldsyslogfluentd
2. 自定义日志存储位置

docker run时通过--log-opt参数配置:

docker run --log-opt max-size=10m --log-opt max-file=3 ...
  • 作用:限制单日志文件大小(10MB)和文件数量(3个),防止磁盘占满

四、第三方工具

1. 容器编排平台集成
  • Kubernetes:使用kubectl logs命令
    kubectl logs <Pod名称>
    
  • Docker Compose:使用docker-compose logs命令
    docker-compose logs -f service-name
    
2. 日志聚合工具
  • ELK Stack(Elasticsearch + Logstash + Kibana)
    • 配置容器日志发送到Logstash,通过Kibana可视化查询
  • Fluentd + Grafana
    • Fluentd收集日志,Grafana实现实时监控

五、常见问题排查

1. 日志为空
  • 检查容器是否真的有日志输出(应用内是否打印日志)
  • 查看日志驱动是否配置为none(禁用日志)
2. 日志文件过大
  • 清理旧日志:docker system prune -a
  • 配置日志轮转(Log Rotation):
    # 创建/etc/docker/daemon.json
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    
    重启Docker服务生效:systemctl restart docker

小结

  • 基础命令docker logs + 选项(-f, --tail, --since
  • 高级用法:结合grep、时间过滤、JSON格式
  • 持久化与聚合:配置日志驱动、集成ELK/Fluentd等工具

合理利用这些方法,可高效定位容器运行问题,提升运维效率。

docker中执行命令

在Docker中执行命令主要有以下几种常见的方式,分别适用于不同的场景,以下是详细介绍:

一、在运行容器时执行命令

使用docker run命令在基于镜像创建并启动容器的同时,可以指定要执行的命令。

  • 执行一次性命令
    当你希望容器执行一个特定的任务后就退出,可以直接在docker run命令后加上要执行的命令。例如,使用busybox镜像来执行一个简单的echo命令:
docker run busybox echo "Hello, Docker!"

上述命令会基于busybox镜像启动一个容器,在容器中执行echo "Hello, Docker!"命令,输出结果后容器就会停止运行。

  • 进入容器的交互式Shell
    若要进入容器的交互式Shell环境,以便在容器中执行多个命令,可以使用-it选项。例如,进入一个基于ubuntu镜像的容器的Shell:
docker run -it ubuntu bash

这里,-i表示以交互模式运行容器,-t为容器分配一个伪终端,bash是要在容器中执行的Shell命令。进入后,就可以在容器内执行诸如apt updateapt install等其他命令了,操作完成后,输入exit即可退出容器。

二、在已运行的容器中执行命令

对于已经在运行的容器,可以使用docker exec命令来执行命令。

  • 执行单个命令
    比如,你已经启动了一个nginx容器,现在想查看容器内nginx的配置文件内容,可以使用以下命令:
docker exec <容器ID或容器名称> cat /etc/nginx/nginx.conf

<容器ID或容器名称>替换为实际的容器标识,上述命令会在运行的nginx容器中执行cat /etc/nginx/nginx.conf命令,输出nginx的配置文件内容。

  • 进入容器的交互式Shell
    同样使用-it选项,例如进入正在运行的ubuntu容器的Shell:
docker exec -it <容器ID或容器名称> bash

进入后,就可以进行各种交互式操作,如安装软件、查看日志等,退出时同样输入exit

  • 在容器中执行脚本
    如果有一个脚本文件需要在容器中执行,可以先将脚本文件复制到容器内(使用docker cp命令),然后再通过docker exec来执行。例如,将本地的test.sh脚本复制到容器my-container/tmp目录下,然后执行:
docker cp test.sh my-container:/tmp/
docker exec my-container bash /tmp/test.sh

三、使用Dockerfile定义默认执行命令

在编写Dockerfile时,可以使用CMDENTRYPOINT指令来定义容器启动时默认执行的命令。

  • CMD指令
    CMD指令用于指定一个容器启动时要执行的默认命令。一个Dockerfile中只能有一个CMD指令,如果指定了多个,只有最后一个会生效。例如:
FROM ubuntu
CMD ["echo", "This is a default command"]

当使用这个镜像创建并启动容器时,会执行echo "This is a default command"这条命令。

  • ENTRYPOINT指令
    ENTRYPOINT指令也用于指定容器启动时要执行的命令,但它更常用于设置一个可执行的“入口点”,后续通过docker run传入的参数会被当作该命令的参数。例如:
FROM ubuntu
ENTRYPOINT ["bash", "-c"]
CMD ["echo", "This is a default command"]

此时,你可以在启动容器时传入额外的参数来覆盖CMD中的命令,如:

docker run <镜像名称> echo "Override default command"

上述命令会执行bash -c echo "Override default command",覆盖了原来CMD指定的默认命令。

通过以上不同方式,你可以根据具体需求在Docker容器中灵活地执行各种命令,实现对容器内应用的管理和操作。


网站公告

今日签到

点亮在社区的每一天
去签到