工程源代码+工程的配置文件 在外面配置好
1 工程的配置文件,是工程的一部分
2 要贯彻内聚原则, 用1句挂载整个工程。
在外面集中配置好在一个路径下,一起挂进去或者COPY进去。
防止先COPY了体积小的“配置文件”,然后发现-v挂源码执行不了,于是又COPY了体积大的工程源码。
根据docker image的覆盖机制,如果整个目录覆盖,那么本来有的,覆盖之后也没有了。
ADD与COPY
HOST端
绝对路径 ——ADD,
相对dockerfile路径下的相对路径 ./ ——用COPY
但COPY不能用../访问dockerfile所在路径的上级路径
IMAGE端:
COPY要写绝对路径,一定要检查正确
docker-compse -v 时,两边都绝对路径。
如果COPY总提示错误,查看一下.dockerignore
ENTRYPOINT与CMD
都是启动容器后才执行的语句(创建镜像时不执行。如果想创建镜像时执行,直接用RUN)
每种只能有1句:如果有多个CMD,只会执行最后1个。但是CMD里可以 用 && 执行多条。但其实执行多条命令,应该直接写成1个sh
ENTRYPOINT会先执行,再执行CMD。CMD不会覆盖ENTRYPOINT
也可以不写在dockerfile里。docker-compose.yml里 等价的语句是
entrypoint command (小写)
停止、删除全部容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
删除none镜像
docker rmi $(docker images | grep "none")
卸载nginx
如果docker-compose up失败,提示端口占用,可能是host上正在运行着什么,比如nginx
卸载要这样写sudo apt-get remove nginx nginx-common
查看运行时内存CPU占用
docker stats $(docker ps | awk '{if(NR>1) print $NF}')