Docker命令

常用交互命令

  • docker ps 显示运行中的容器
  • docker ps -a显示所有的容器,包括未运行的
  • docker ps -a --no-trunc 不缩略字段值
  • docker exec -it docker-name在运行的容器中执行命令
  • docker exec -it docker-name /bin/bash常用命令(有CMD进程守护时启动)
  • docker rm -f docker-name通过 SIGKILL 信号强制删除一个运行中的容器
  • docker run -p 80:8181 --name node_test -dit docker-name 启动服务,母机端口80映射到容器服务所在端口8181
  • docker run -p 80:8181 --name node_test -dit docker-name /bin/sh -c "npm run start"启动服务及启动时运行脚本(无CMD)
  • docker run --name node_test --rm --stop-timeout 100 -v /data/web/www.node.com:/data/web/www.node.com:ro -dit docker-name 100秒后自动停止,以只读的方式共享文件到容器内
  • docker run -p 80:80 -v /data:/data -v /etc:/etc -d nginx:latest 挂载多个目录
  • docker logs -f --since 30m --tail=100 CONTAINER_ID 查看最近30分钟,显示最后100行日志
  • docker cp /data/web/test.com/index.js docker-name:/data/web/test.com/routes/ 从宿主机拷贝文件到docker容器
  • docker cp docker-name:/data/web/test.com/routes/index.js /data/web/test.com/ 从docker容器拷贝文件到宿主机
  • docker restart docker-name 拷贝完成后重启docker镜像

容器管理命令

  • docker network ls 显示所有网络模式(bridge-docker默认模式,host-利用宿主机ip和端口)
  • docker network inspect bridge 针对bridge查找有哪些container在其中
  • docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Ports}}"指定显示模版
  • systemctl enable docker设置docker服务开机启动
  • docker run --restart=always ...设置开机启动
  • docker update --restart=always xxx更新为开机启动

镜像管理命令

  • docker images 查看镜像列表
  • docker history dockerImage:tag 查看镜像Dockfile
  • docker build -t nginx_test .构建镜像
  • docker login --username=username xxxxx.com 登录镜像市场
  • docker tag 镜像id 仓库:标签 重新命名镜像
  • docker push dockerImage:tag 推送镜像
  • docker logout 登出镜像市场
  • docker rmi 镜像ID 删除镜像
  • docker rmi -f runoob/ubuntu:v4 删除镜像
  • docker image prune -a -f 删除无用的镜像(运行中或停止的容器对应的镜像不会删除)
  • 更多docker命令

RUN CMD ENTRYPOINT命令区别

  • RUN指令通常用于安装应用和软件包。Dockerfile 中常常包含多个 RUN 指令。
  • CMD如果想为容器设置默认的启动命令,可使用CMD指令。用户可在docker run命令行中替换此默认命令。
    • CMD ["executable","param1","param2"](exec形式,这是首选形式)
    • CMD ["param1","param2"](作为ENTRYPOINT 的默认参数)
    • CMD command param1 param2(shell形式)
    • dockerfile文件中包含多个CMD时,只有最后一个被加载使用。
  • ENTRYPOINT的 Exec 格式用于设置容器启动时要执行的命令及其参数,同时可通过CMD命令或者命令行参数提供额外的参数。ENTRYPOINT中的参数始终会被使用,这是与CMD命令不同的一点。
    • ENTRYPOINT ["executable", "param1", "param2"]
    • ENTRYPOINT command param1 param2
    • 一个Dockerfile中可以有多条ENTRYPOINT指令,但只有最后一条ENTRYPOINT指令有效。

DOCKER报错定位

  • docker top docker-name # 查看镜像中运行的进程
  • docker inspect <container-id> --format='{{.State.ExitCode}}'
  • journalctl -n 3 -u docker.service -o json-pretty --no-pager # docker日志输出查看
  • docker run -it docker-name /bin/bash # 交互式启动容器,进行报错定位(最有效的,一步到位)
  • 常见的错误码
退出码 含义
0 一个归属的前台进程退出(通常是执行完成)
1 由于应用程序错误导致的失败
137 表示容器接收到 SIGKILL 信号(人工干预或者 oom-killer [OUT-OF-MEMORY])
139 表示容器接收到 SIGSEGV 信号
143 表示容器接收到 SIGTERM 信号

NODE DOCKER tag

  • tag list
node:<version>
基于Debian,官方默认镜像。当你不确定你需要什么的时候选择这个就对了。这个被设计成可以丢弃的镜像,也就是可以用作构建源码使用,体积挺大。
node:<version>-slim
基于Debian, 删除了很多默认公共的软件包,只有node运行的最小环境。除非你有空间限制,否则推荐使用默认镜像。
node:<version>-alpine
基于alpine, 比Debian小的多。如果想要最小的镜像,可以选择这个做为base。需要注意的是,alpine使用musl代替glibc,一些c环境的软件可能不兼容,但大部分没问题。
  • debian的发行版
Debian 10(buster) — 当前的稳定版(stable)
Debian 9(stretch) — 旧的稳定版(oldstable)
Debian 8(jessie) — 更旧的稳定版(oldoldstable)
Debian 7(wheezy) — 被淘汰的稳定版

构建业务镜像

FROM centos:7.2.1511
RUN curl -sL https://rpm.nodesource.com/setup_14.x | bash - && yum install -y nodejs
RUN yum install -y epel-release && yum -y update && yum install -y nginx && systemctl enable nginx.service

posted on 2021-01-15 13:55  reamd  阅读(125)  评论(0编辑  收藏  举报