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

推荐订阅源

Recent Announcements
Recent Announcements
博客园 - Franky
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
爱范儿
爱范儿
罗磊的独立博客
博客园_首页
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
V
Visual Studio Blog
T
Tailwind CSS Blog

半方池水半方田

小球称重问题及其引申的思考 蓝色的结构色 病毒是不是生物? 把博客发布交给 GitHub Actions 省外居民身份证的补换领(苏州) hexo-filter-titlebased-link:构建你的数字花园 Vercel 应用实践学习 通过与 Keycloak 配合实现博客文章的受限访问功能 非公开的文章 Soft Mode 非公开的文章 Strict Mode 试试用代码块在 Hexo 中插入实况照片 动态图片测试 Hexo-Butterfly 主题 Preloader 加载页定制 Keycloak 的部署以及 Hexo-Butterfly 网页应用的接入 随机访问文章的实现(Sitemap+本地缓存优化) Authentik 的部署记录 Waline 自建 Auth 认证 记一次行李托运理赔流程(南航) Hexo-Butterfly 主题中对 Algolia 搜索框 Power By 的定制 Hexo 动态加载配置(钩子函数) 设计原则 VSCode 中的配置 Spring AI 中使用 PGVector 实现向量存储 提示词工程速查手册 2025 WePlay 上海两日游 和随机数生成相关的题目 一起撸串(字符串) 树状数组上手了就十分简单 缓存置换算法的实现与 Java 中相关的数据结构 关于海量数据的若干问题
Docker 镜像的制作、拉取与运行
wuanqin · 2026-03-14 · via 半方池水半方田

发表于|更新于|工程

|总字数:1.2k|阅读时长:4分钟|浏览量:|

|出链:0|入链:2

在日常场景中,总会有一些操作我们都会时不时用到,你可以直接上网搜索,或直接问豆包。由于个人习惯问题,我还是更倾向与参考个人以往成功的经验。可以理解为这是日常场景开发时凝结成的自己的 Skill,当经验归好档,获取时就更可信、更便捷了。

Docker 容器技术

Docker 是一种容器技术,可以将项目的环境(比如 Java、Nginx)和项目的代码一起打包成镜像,所有具有权限的用户都能下载镜像,更容易分发和移植。

版本检查

下载安装 Docker 后,检查 Docker 安装是否成功:

1
docker --version

换镜像源

国内网络环境连不上 Docker 仓库,因此我们需要换镜像源(常规操作)。步骤:

  1. 编辑 Docker 配置文件:vim /etc/docker/daemon.json
  2. 替换成下面的配置文件
1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://dockerproxy.com",
"https://hub.rat.dev"
]
}
  1. 重启 Docker:systemctl daemon-reload && systemctl restart docker,通知 Linux 服务管理器重新加载所有服务的配置文件,然后重启 Docker 服务让刚刚刷新的 Docker 新配置正式生效。
  2. 测试:docker pull hello-world 能秒拉就说明成了

拉取镜像

拉取镜像的指令很简单:

1
docker pull <镜像名>

当然,你可以在 docker run 中直接指定未拉取下来的镜像,本地没有镜像时会自动 pull 下来。

运行镜像

1
2
3
4
5
6
7
docker run 
-d \ # -d 后台运行
--restart always \ # 指定重启策略
-e driverName=mysql \ # -e 给容器内容传环境变量
-e dataSourceName='user:password@tcp(x.x.x.x:3306)/' \
-p 8000:8000 \ # -p 端口映射,外面端口:里面端口
myapp # 镜像名称

--restart 的重启策略:

  • always:无论如何,只要 Docker 启动,容器就启动。
  • unless-stopped:只要不是你手动 stop,就自动重启。
  • on-failure:只有崩溃才重启
  • no:不重启(默认)

构建镜像

Dockerfile 记录了项目的打包构建流程,我们可以通过编写这个文件指定构建 Docker 镜像的方法。一般情况下,Dockerfile 不需要自己写,可以直接在网上找。

Dockerfile 一般放置在项目的根目录中:

  • FROM:依赖的基础镜像
  • WORKDIR:工作目录
  • COPY:从本机复制文件
  • RUN:执行命令
  • CMD / ENTRYPOINT:指定运行容器时默认执行的命令,ENTRYPOINT 可以附加额外参数

对于同一个应用程序,Dockerfile 有不同的编写策略:

  1. 构建镜像时复做程序编译的过程(对当前服务器内存有影响);
  2. 直接将编译好的应用程序制作成镜像。

示例:将打包好的 Java 应用程序制作为镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

FROM openjdk:21


WORKDIR /app


COPY myapp-0.0.1-SNAPSHOT.jar /app


EXPOSE 8991


CMD ["java", "-jar", "myapp-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

准备好的文件结构:

1
2
3
a_comfortable_place/
├── Dockerfile # 里面是刚刚写好的 Dockerfile
└── myapp-0.0.1-SNAPSHOT.jar

在此目录下,执行:

1
2
# -t 打标签,"."表示使用当前的目录的Dockerfile构建镜像
docker build -t myapp:v1 .

这样,镜像就制作好了。

Docker Compose

在前面的介绍中,我们可以通过docker run指定参数运行单个容器。如果需要一下子运行多个容器,每个容器配置多个参数,手敲docker run就变得很麻烦了。

我们可以使用docker compose解决这个问题。首先,我们在文件夹里,准备好两个文件:

1
2
docker-compose.yml   
.env

docker-compose.yml 相当于菜谱,里面定义了要启动的容器、要使用的镜像、端口映射和环境变量。.env存放各种环境变量,比如端口配置、数据库密码等。

运行方法为进入文件夹,执行:

1
2
docker compose pull   # 下载镜像
docker compose up -d # 后台启动

如果中途更改环境变量.env可以执行下面的命令使之重新生效:

1
2
docker compose down
docker compose up -d

Docker 常用命令

1
2
3
4
5
docker ps 
docker kill <CONTAINER…>
docker logs <CONTAINER>
docker images
docker rmi -f IMAGE [IMAGE…]

本文参考

版权声明 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 半方池水半方田

封面生成即梦 AI - 图片 5.0 Lite

Prompt卡通平面风格博客封面,以Docker镜像的生命周期为主题,包含Docker标志,色彩鲜艳活泼,元素布局层次清晰,无文字

赞助

  • 微信

    微信

  • 支付宝

    支付宝


avatar

wuanqin

只能懂一点点

最新文章

蓝色的结构色