惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
J
Java Code Geeks
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
腾讯CDC
博客园 - 司徒正美
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
I
InfoQ
N
Netflix TechBlog - Medium
L
LangChain Blog
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
美团技术团队
The Cloudflare Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
H
Help Net Security
Martin Fowler
Martin Fowler
V
Visual Studio Blog

mafeifan 的编程技术分享

mafengwo-mp3-downloader | mafeifan 的编程技术分享 示例页面 | mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 查看 default namespace 下的 default service account名称 mafeifan 的编程技术分享 检查日志 | mafeifan 的编程技术分享 bridge fdb show dev flannel.1 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享
mafeifan 的编程技术分享
2026-01-16 · via mafeifan 的编程技术分享
  1. COPY 和 ADD 命令具有相同的特点:只复制目录中的内容而不包含目录自身。 比如 backend 目录的结构如下:

yaml

 --- backend
     -- model
     -- controller

如果执行

bash

WORKDIR /app
COPY backend .

容器内app底下会是model和controller目录,并不是backend目录。 如果要拷贝整个目录,应该: COPY backend ./backend

  1. 如果修改了 Dockerfile,记得要重新执行build,即生成新的镜像。这样启动后才能看到效果。

  2. 打包node项目中的node_modules问题。 某node项目结构:

src
node_modules
package.json
package-lock.json

dockerfile部分代码

FROM node:8.12-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm install
...

我们在容器内生成了项目所依赖的node_modules文件。这是docker的build阶段。 之后在run启动阶段时,在mouted共享目录时要特别小心,如果挂载整个项目,容器内的node_modules会被项目中的覆盖。 最好把需要挂载的文件单独放到一个目录中。

  1. 关于项目目录是挂载好,还是COPY ADD好,stackoverflow上有人也问过
  • COPY/ADD 文件是镜像的一部分,在docker构建阶段执行。比较适合项目的生产环境,比如自动化。对于成熟稳定的项目,把编译后的可以直接运行的代码打包进镜像内也利于分发。
  • volumn 是在docker运行阶段,本地文件变化能方便的反应到容器中,比较适合项目的开发阶段。 要根据实际情况,挂载可以节省空间,便于修改。如果是想文件COPY到容器,每次修改文件都需要重新制作镜像。
  1. 关于 docker-compose,对于镜像的版本,数据库密码等不建议直接写死到 docker-compose.yml 中,可以新建.env文件。 docker-compose部分

yaml

  mysql:
      build: ./docker-build/mysql
      ports:
        - "33060:3306"
      volumes:
        - ./docker-build/mysql/data:/var/lib/mysql
      environment:
        MYSQL_ROOT_PASSWORD: ${DOCKER_MYSQL_PASSPORD-123456}

.env文件 DOCKER_MYSQL_PASSPORD=mypassord 比如下面的${DOCKER_MYSQL_PASSPORD-123456}表示优先去.env文件找定义的key值,如果没有则使用默认值,即123456。 docker-compose.yml 受版本控制,.env不受。更多细节参考

  1. 在 Laravel 项目中,如果数据库跑在容器里,在宿主机直接执行php aritsan是不行的,

需要进到容器里执行,或者在宿主机执行docker-compose exec <mycontainer> php artisan或者是docker exec -it <mycontainer> php artisan

  1. 如果php项目用的nginx的php-fpm容器,想重启php-fpm,容器内使用kill -USR2 1,容器外执行docker exec -it <mycontainer> kill -USR2 1\

  2. docker-compose down要慎用,他会销毁所有容器和网络等。如果你之前在容器里修改过文件,都会没有。当然docker也不推荐直接在容器动手脚,建议写个shell脚本,启动之后在容器内执行。

  3. 还是 mysql 数据库问题,如果容器启动了 mysql,之后通过配置修改了密码,可能会造成重新连接后死活显示"Access denied"。 这是因为如果建立了共享卷volume,里面存的还是老的user信息,需要docker-compose rm -v 清除卷然后重连。

  4. 删除日志 find /var/lib/docker/containers/ -type f -name "*.log" -delete

  5. 删除所有停止的容器 docker rm $(docker ps -a -q)

  6. Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache. 安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令: docker system prune --all --force --volumns

注意,使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像。

何为 dangling images,其实可以简单的理解为未被任何镜像引用的镜像。比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images

我们还可在不同在子命令下执行 prune,这样删除的就是某类资源:

bash

docker container prune # 删除所有退出状态的容器
docker volume prune # 删除未被使用的数据卷
docker image prune # 删除 dangling 或所有未被使用的镜像
  1. docker diff 容器名或ID,可以查看容器发生的文件系统的变化信息 如下图,我在容器里新建了个demo.txt文件,在docker diff中可以查看出来 A 添加, C 修改, D 删除

image.png

参考:http://blog.51cto.com/13954634/2294107