常用交互命令
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
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