摘要生成中...
AI 摘要
Hunyuan-lite

在日常场景中,总会有一些操作我们都会时不时用到,你可以直接上网搜索,或直接问豆包。由于个人习惯问题,我还是更倾向与参考个人以往成功的经验。可以理解为这是日常场景开发时凝结成的自己的 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
# 使用官方的 Java 21 基础镜像
FROM openjdk:21

# 设置工作目录
WORKDIR /app

# 将本地的 JAR 文件复制到容器中
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 .

这样,镜像就制作好了。

常用命令

1
2
3
4
5
docker ps # 查看运行的镜像
docker kill <CONTAINER…> # 杀死运行中的容器
docker logs <CONTAINER> # 追踪容器的日志输出
docker images # 查看镜像
docker rmi -f IMAGE [IMAGE…] # 移除镜像

本文参考