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

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

半方池水半方田

小球称重问题及其引申的思考 蓝色的结构色 病毒是不是生物? 把博客发布交给 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

只能懂一点点

最新文章

蓝色的结构色