docker命令集合
1. 删除所有没有被任何容器使用的 Docker 镜像
1
2
docker image prune -a -f
不加 -f,需要手动确认
2. docker run [ENTRYPOINT] 或者 [CMD]
共同点
用于在Dockerfile和Docker Compose files里配置容器的运行命令
ENTRYPOINT特殊点
用于设定容器启动时第一个运行的命令及其参数
注意:
1 2 dockerfile中大写: ENTRYPOINT docker-compose中小写: entrypoint特性:
- 任何使用docker run image_name
- 命令传入的参数都会附加在entrypoint指令之后docker run image_name bash
- bash命令附加在entrypoint指令设定的值的后面
- 用此命令传入的参数会覆盖在Dockerfile中使用CMD指令设定的值
命令格式
ENTRYPOINT [“executable”, “param1”, “param2”]
eg:
1 2 ENTRYPOINT ["/docker-entrypoint.sh"] ENTRYPOINT [ "sh", "-c", "echo $HOME" ]dockerfile:
1 ENTRYPOINT ["/bin/ping","-c","3"]
docker-compose:
1 2 3 4 5 6 7 entrypoint: - php - -d - zend_extension=/usr/local/lib/php/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit
3. 删除 “exit” 状态的容器
docker rm $(docker ps -a --filter "status=exited" -q)
4.进入镜像内部
1
2
法一:
docker run -it -t --entrypoint bash 2440077fc65e(镜像ID)
5.打标签
1
docker tag 700e99d2e16d fscloude/alpine:v3.12.4_test
6.提交容器: 将内容修改后的容器,固化成一个新镜像
1
docker commit -p my_first_alpine6 fscloude/alpine:v3.12.4_test
7.推送镜像
1
docker push docker.io/fscloude/alpine:v3.10.3
8.以root用户登录启动的容器
1
docker exec -ti --user root jenkins_confum /bin/bash
9.指定dockerfile启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker build -t fscloude/fscloude/ai_commodity:1.0.0 -f /opt/docker_file/dockerfile_ai_commodity . --no-cache
/opt/docker_file/dockerfile_ai_commodity dockerfile文件
指定环境变量或参数 --build-arg environment=dev
docker build -t registry.cn-hangzhou.aliyuncs.com/shmuker/collect-server_dev:1.0.0 --build-arg environment=dev -f /opt/jenkins/dockerfile/Dockerfile-python-collect-server . --no-cache
cat /opt/jenkins/dockerfile/Dockerfile-python-collect-server
#FROM registry.cn-hangzhou.aliyuncs.com/shmuker/python:3.6.5
FROM python:3.6.5
ARG environment
ENV environment=$environment
ENV TZ Asia/Shanghai
RUN echo "Asiz/Shanghai" > /etc/timezone && ln -sf /usr/share/zoneinfo/Asiz/Shanghai /etc/localtime
WORKDIR /opt/
COPY ./collect-server/ /collect-server
RUN cd /collect-server && pip install -r requirements.txt -i https://python:12345678@nexus.cnabke.com/repository/group-pypi/simple --trusted-host=nexus.cnabke.com
ENTRYPOINT ["/bin/bash","-c","cd /collect-server && python manager.py"]
10.纯净启动,停止后无遗留
1
docker run -d --rm -p 8081:80 -v /data/www/test1.com:/usr/local/web --name nginx nginx:1.18-alpine
11.查看当前占用资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker stats --no-stream
格式化输出的结果
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
docker ps -a --format "table docker ps -a --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}\t{{.Images}}" | grep -v Exited
不知道变量名的时候可以执行这个:
docker ps --format='{{json .}}'
获取所有容器的ip
以下三条命令都可以
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
12.查看多有停止的docker
1
docker ps -qf status=exited
13. 以当前宿主机网络为主 –network=host
1
docker run -ti -d --name customs-data-collect-server-dev --network=host registry.cn-hangzhou.aliyuncs.com/shmuker/collect-server_dev:1.0.1
14. 启动Nginx镜像
1
2
3
docker exec 容器id nginx -t
//重新加载nginx配置
docker exec 容器id nginx -s reload
15. 搜索/下载镜像
1
2
3
docker search alpine
docker pull alpine 下载最新版
docker pull alpine:3.10.3 或 docker.io/library/alpine:3.10.3 下载指定版本
16. docker启动容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
交互式启动
~]# docker run -ti fscloude/alpine /bin/sh docker运行指定镜像 + 命令
非交互式启动:使用创建一个进程自动删除 docker ps -a 查不出来。易用于 仅执行一次的环境
~]# docker run --rm fscloude/alpine:latest /bin/echo "hellow"
非交互式后台启动: 启动时必须指定执行某个命令 否则会直接关闭此启动容器
~]# docker run -d --name my_first_alpine fscloude/alpine:latest /bin/sleep 10 让此容器进入后台10s后退出
注:尽管使用容器启动的进程,但是在宿主机上也能查到此进程,ps -ef,说明容器使用的是宿主机的内核
进入启动容器的内部
~]# docker exec -ti ba5e2a9cc64a /bin/sh
/ # ps -ef
PID USER TIME COMMAND
1 root 0:00 /bin/sleep 300
6 root 0:00 /bin/sh
11 root 0:00 ps -ef
/ #
以守护形式运行容器
Ctrl+P
Ctrl+Q
docker attach dockerfile_ubuntu_web/df0d417a1598
17. docker容器启停
1
2
3
4
5
6
7
8
9
10
11
12
13
容器的启停: 重新启动此容器,重新开始
~]# docker stop ba5e2a9cc64a
~]# docker start ba5e2a9cc64a
~]# docker restart ba5e2a9cc64a
删除容器: 删除之后 docker ps -a查不出来
~]# docker rm bold_feistel(NAMES)
~]# docker rm 10b819f357a9(CONTAINER ID)
~]# docker rm -f 10b819f357a9(CONTAINER ID)
循环删除已退出的容器
~]# for i in `docker ps -a | grep -i exit | awk '{print $1}'`;do docker rm -f $i; done
18. 自定义容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
提交容器: 将内容修改后的容器,固化成一个新镜像
~]# docker commit -p my_first_alpine6 fscloude/alpine:v3.12.4_test
导出容器
~]# docker save 700e99d2e16d > alpine_3.12.4_test.tar
~]# docker rmi 700e99d2e16d
导入容器
~]# docker load < alpine_3.12.4_test.tar
~]# docker tag 700e99d2e16d fscloude/alpine:v3.12.4_test
单次启动比较好的方式
~]# docker run --rm --name my_second1 -ti fscloude/alpine:v3.12.4_test /bin/bash
查看容器日志: 查看的是启动后的ID
~]# docker logs 7317d943dda2(CONTAINER ID)
docker高(升)级操作
映射端口
docker run -p 容器外端口:容器内端口
~]# docker pull nginx:1.18.0
~]# docker run --rm -d --name my_first_nginx -p81:80 fscloude/nginx:v1.18.0
挂载数据卷
docker run -v 容器外目录:容器内目录
~]# mkdir /root/html && wget www.baidu.com index
html]# docker run -ti --rm -d --name nginx_v1.18.0_baidu -p 82:80 -v /root/html/:/usr/share/nginx/html fscloude/nginx:v1.18.0
检查(查看)容器启动的详细信息
docker inspect 1d1077309873(CONTAINER ID)
传递环境变量
docker run -e 环境变量key=环境变量value
使用dockerfile创建镜像
docker名字必须是: Dockerfile
docker build -t='fscloude/dockerfile_test_first' /data/docker_save/dockerfile/
/data/docker_save/dockerfile/ 此目录下存放Dockerfile文件
# First dockerfile for test
FROM ubuntu:14.04
MAINTAINER fscloude
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
dockerfile执行出现问题

解决
ENV DEBIAN_FRONTEND noninteractive #apt-get安装依赖时并非静默安装,需要交互
FROM 使用方法
FROM <image>
FROM <image>:<tag>
image 镜像名称
tag 版本名称
MAINTAINER 使用方法
MAINTAINER <name>
name 指定镜像的作者信息吗,包含镜像的所有者和联系信息
RUN 使用方法
RUN <command> (shell模式)
RUN [ "executable", "param1", "param2" ] (exec模式)
可以指定其他的shell运行指令
RUN ["/bin/bash", "-c", "echo hello"]
EXPOSE 使用方法
EXPOSE <port> [<port>...]
指定运行该镜像的容器使用的端口
只是说明会用到哪个端口,不会开启
仍然需要使用 docker run 执行指定端口
docker run -ti --rm -d --name dockerfile_ubuntu_web -p 83:80 fscloude/ngindddx:v1.18.0
CMD 和 ENTERYPOINT 指定在容器 运行时 执行的命令
CMD
是容器默认执行的指令,使用 docker run 执行的指令会覆盖 CMD指令
CMD 包含 RUN 使用的两种方式,再加一种
CMD <command> param1 param2 (shell模式)
CMD [ "executable", "param1", "param2" ] (exec模式)
CMD ["param1", "param2"] 作为 ENTERYPOINT 指令的默认参数
eg:
# First dockerfile for test
FROM ubuntu:14.04
MAINTAINER fscloude
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "dameon off;"]
ADD COPY 和 VOLUME 设置镜像的目录和文件
WORKDIR ENV 和 USER 在构建及运行镜像时的环境设置
ONBUILD 类似触发器的指令
19. 查看网卡挂载了哪些容器
1
2
3
docker network inspect 网卡名称
eg:
docker network inspect aibus-dev
20. 查看 Docker 镜像每一层的具体操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker history <镜像名或ID>
该命令会显示每层的:
镜像 ID(部分层可能被隐藏显示为<missing>)
创建时间
执行的 Dockerfile 指令
层大小
注释信息
# 默认可能有截断,显示完整的需要加参数: --no-trunc:
docker history --no-trunc <镜像名或ID>
# 以json输出,更易看
docker history <镜像名或ID> --no-trunc --format '{{json .}}' | jq
查看详细内容
1
2
3
4
5
6
7
8
9
10
11
12
docker inspect <镜像名或ID>
在输出的 JSON 数据中,RootFS字段下的Layers数组列出了所有层的存储路径:
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:8d691f585fa8...",
"sha256:3c81...",
...
]
}
查看特定层的元数据
1
docker inspect <层ID>
本文由作者按照
CC BY 4.0
进行授权