Docker笔记
Docker笔记
检索docker容器IP
# 为了回避前端vue页面渲染标记,请自行将 [[ 替换为 {{,反之同理
docker inspect -f '[[range .NetworkSettings.Networks]][[.IPAddress]][[end]]' [CONTAINER ID]
docker可视化管理容器
使用portainer-ce,ce通常是指官方维护的非商业版
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /Users/xuan/portainer_data:/data portainer/portainer-ce
docker挂载卷的总结和避坑
docker 有几种方式都可以挂载卷,实现与宿主机共享文件。但是我在网上搜索了很久也没有遇到讲解关于在dockerfile中使用volume实现docker run -v那种自定义挂载文件夹的方式,找了很长时间才找到问题所在。
正常使用挂载,假设我想将桌面的demo文件夹挂载到ubuntu中的share文件夹,我可以这么写docker run -v /Desktop/demo:/share ubuntu。但是这样在dockerfile中是不允许的,dockerfile文件的目的是为了编撰镜像属性,而不是交互属性。交互属性应该是在镜像构建为容器时定义的。所以如果有交互方面的需求可以使用docker compose去实现。
实际上容器内部的文件夹有三种情况:
没有指定VOLUME,也没有指定-v,这种是普通文件夹
指定了VOLUME,ENTRYPOINT没有指定-v,这种文件夹可以在不同容器之间共享,但是无法在本地修改
指定了-v的文件夹,这种文件夹可以在不同容器之间共享,且可以在本地修改
dockerfile中 ENTRYPOINT 和 CMD 的区别
# dockerfile中写
CMD echo "hello world"
# 运行容器时
docker run -it xxx /bin/bash
# 会直接打开交互命令行,CMD内容被直接忽略
# dockerfile中写
ENTRYPOINT echo "hello world"
# 运行容器时
docker run -it xxx /bin/bash
# 会直接忽略/bin/bash,输出hello world
# 只有在运行容器指令后加--entrypoint,才能覆盖dockerfile中的定义
通常建议使用的方式是,CMD和ENTRYPOINT结合使用,并使用Exec格式编写,用CMD为ENTRYPOINT添加参数。