常用交互命令
- 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-name100秒后自动停止,以只读的方式共享文件到容器内
- 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
node:<version>
基于Debian,官方默认镜像。当你不确定你需要什么的时候选择这个就对了。这个被设计成可以丢弃的镜像,也就是可以用作构建源码使用,体积挺大。
node:<version>-slim
基于Debian, 删除了很多默认公共的软件包,只有node运行的最小环境。除非你有空间限制,否则推荐使用默认镜像。
node:<version>-alpine
基于alpine, 比Debian小的多。如果想要最小的镜像,可以选择这个做为base。需要注意的是,alpine使用musl代替glibc,一些c环境的软件可能不兼容,但大部分没问题。
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
docker-compose
docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml stop
docker-compose -f docker-compose.yml down