1.安装docker
# 安装必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 源(用阿里云镜像源加速)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker
systemctl start docker
systemctl enable docker
# 验证
docker -v
2.修改宿主机的docker配置,让其可以远程访问,开放http可访问
#1. 用sudo管理员权限 打开配置文件
sudo vi /lib/systemd/system/docker.service
#2. 在ExecStart=后添加配置
‐H tcp://0.0.0.0:44888 ‐H unix:///var/run/docker.sock
例如完整替换:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:44888 -H unix
:///var/run/docker.sock
#3. 保存退出
**先退出编辑模式**:按一下键盘上的 `Esc` 键(左下角状态栏会从 `-- INSERT --` 变为空白或显示文件名)。
**保存并退出**:
输入 `:wq`(注意是英文冒号开头,`w` 表示保存,`q` 表示退出),然后按 `Enter` 键。
**如果不需要保存修改**:
输入 `:q!`(`!` 表示强制退出不保存),按 `Enter` 键。
#4. 通知docker服务做出的修改
systemctl daemon-reload
#5. 重启docker服务
systemctl restart docker
#6.服务器开放端口
#7.接下来测试一下看是否能连接到docker api
浏览器访问
http://111.170.6.95:44888/version
输出:
{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"26.1.4","Details":{"ApiVersion":"1.45","Arch":"amd64","BuildTime":"2024-06-05T11:31:02.000000000+00:00","Experimental":"false","GitCommit":"de5c9cf","GoVersion":"go1.21.11","KernelVersion":"3.10.0-957.1.3.el7.x86_64","MinAPIVersion":"1.24","Os":"linux"}},{"Name":"containerd","Version":"1.6.33","Details":{"GitCommit":"d2d58213f83a351ca8f528a95fbd145f5654e957"}},{"Name":"runc","Version":"1.1.12","Details":{"GitCommit":"v1.1.12-0-g51d5e94"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"26.1.4","ApiVersion":"1.45","MinAPIVersion":"1.24","GitCommit":"de5c9cf","GoVersion":"go1.21.11","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-957.1.3.el7.x86_64","BuildTime":"2024-06-05T11:31:02.000000000+00:00"}
则成功开放!
备注:1和2步骤快捷解决:可使用自动安装脚本安装 docker-install.sh
1.将docker-install.sh放到服务器目录
2.sudo chmod +x docker-install.sh #添加root执行权限
3. ./docker-install.sh #执行docker-install.sh
或
直接通过 curl 执行(不保存脚本)
curl -fsSL https://api.6600k.cn/public/docker-install.sh | sudo bash
#!/bin/bash
set -e
# 定义可配置的参数
DOCKER_PORT=44888 # 远程访问端口
echo "===== 开始安装必要工具 ====="
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
echo "===== 添加阿里云Docker源 ====="
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
echo "===== 安装Docker ====="
sudo yum install -y docker-ce docker-ce-cli containerd.io
echo "===== 启动Docker服务并设置开机自启 ====="
sudo systemctl start docker
sudo systemctl enable docker
echo "===== 验证Docker版本 ====="
docker -v || sudo docker -v # 兼容不同环境下的权限配置
echo "===== 配置Docker镜像加速 ====="
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.registry.cyou/",
"https://docker-cf.registry.cyou/",
"https://dockercf.jsdelivr.fyi/",
"https://docker.jsdelivr.fyi/",
"https://dockertest.jsdelivr.fyi/",
"https://mirror.aliyuncs.com/",
"https://dockerproxy.com/",
"https://mirror.baidubce.com/",
"https://docker.m.daocloud.io/",
"https://docker.nju.edu.cn/",
"https://docker.mirrors.sjtug.sjtu.edu.cn/",
"https://docker.mirrors.ustc.edu.cn/",
"https://mirror.iscas.ac.cn/",
"https://docker.rainbond.cc/",
"https://jq794zz5.mirror.aliyuncs.com",
"https://66a84trh.mirror.aliyuncs.com"]
}
EOF
echo "===== 备份并修改配置文件(使用端口: $DOCKER_PORT) ====="
# 备份原始配置
sudo cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
# 使用变量修改配置文件,设置远程访问端口
sudo sed -i "s#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:${DOCKER_PORT} -H unix:///var/run/docker.sock#g" /lib/systemd/system/docker.service
echo "===== 重新加载配置并重启Docker ====="
sudo systemctl daemon-reload
sudo systemctl restart docker
echo "===== 检查服务状态 ====="
if sudo systemctl is-active --quiet docker; then
echo "Docker服务运行正常"
else
echo "错误:Docker服务未正常启动" >&2
exit 1
fi
echo "===== 验证镜像加速配置 ====="
# 忽略大小写匹配,同时显示实际配置的镜像源
if docker info | grep -qi "registry mirrors"; then
echo "镜像加速配置已生效"
# 显式输出镜像源列表(兼容不同格式)
docker info | grep -A 20 -i "registry mirrors"
else
echo "警告:镜像加速配置未生效" >&2
fi
echo "===== 测试访问 ====="
echo "本地测试结果:"
curl -s http://localhost:${DOCKER_PORT}/version
echo "====================================="
echo "Docker 安装配置完成!远程访问端口:${DOCKER_PORT}"
echo "====================================="
3.使用插件docker-maven-plugin
# 1.根目录新建docker文件夹放入Dockerfile文件 docker/Dockerfile
Dockerfile内容如下:
# 用 JDK 8 作为基础镜像(你是 JDK 1.8)
FROM openjdk:8-jdk-alpine
# 维护者信息(可选)
LABEL maintainer="597172583@qq.com"
# 把 jar 包复制到容器
COPY bootapi-0.0.1-BOOTAPI.jar bootapi.jar
# 暴露 Spring Boot 端口(根据你项目配置改)
EXPOSE 8800
# 启动命令
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/bootapi.jar", "--spring.profiles.active=prod"]
2. #pom.xml中导入docker-maven-plugin插件配置 ${project.basedir}指向Dockerfile文件路径
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.plugin.version}</version>
<configuration>
<dockerHost>http://111.170.6.95:2375</dockerHost>
<imageName>${project.name}</imageName>
<dockerDirectory>${project.basedir}/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
4.idea 底部服务链接dicker http镜像端口
显示连接成功则可看到镜像
5.maven打包推送镜像
idea执行命令
mvn docker:build -X
6.idea docker插件 运行项目docker容器
可直接服务器启动
docker run -d --restart=unless-stopped -e TZ=Asia/Shanghai -e LANG=C.UTF-8 -p 8899:8899 --name bootapi bootapi:latest
备注: **`-p 0.0.0.0:9900:8800`**
- **0.0.0.0** → 表示监听服务器上所有可用 IP(本地回环、本地局域网 IP、公网 IP 等)
- **9900** → 宿主机端口(外部访问时用这个)
- **8800** → 容器内部应用的端口(Docker 容器里的程序监听的端口)
🔹 这样设置后,无论是:
http://127.0.0.1:9900
http://你的内网IP:9900
http://你的公网IP:9900
都可以访问。
- **`--name bootapi`**
容器名字叫 `bootapi`。
- **`-d`**
让容器在后台运行(detached mode),不占用你的终端窗口。
- **`bootapi:latest`**
要运行的镜像名是 `bootapi`,标签是 `latest`。
1.更具镜像创建容器
2.创建映射端口号
3.添加运行容器配置
-d --restart=unless-stopped -e TZ=Asia/Shanghai -e LANG=C.UTF-8 -p 9900:9900
4.容器运行成功
7.服务器配置服务器或docker重启时,自动重启之前的docker容器
# 1. 设置Docker服务开机自启
sudo systemctl enable docker
# 2. 为所有容器配置自动重启(仅需设置一次)
sudo docker update --restart=always $(sudo docker ps -aq)
# 为所有容器设置unless-stopped策略
sudo docker update --restart=unless-stopped $(sudo docker ps -aq)
- `always`:无论何种情况,Docker 服务启动就会启动容器(即使是手动停止的)
- `unless-stopped`:只有容器是意外停止的才会自动重启(手动停止的容器不会被自动启动)
**创建新容器时直接指定策略**(推荐)
Docker 的 `--restart` 参数用于配置容器的自动重启策略,共有 4 种常用参数,分别适用于不同场景:
**`--restart=no`(默认值)**
- 含义:容器退出后不会自动重启,完全需要手动启动。
- 适用场景:临时测试的容器、不需要持久运行的一次性任务。
**`--restart=on-failure[:max-retries]`**
- 含义:仅当容器**以非 0 状态退出**(即运行出错退出)时才自动重启。
- 可选参数 `max-retries`:最多重启次数(如 `on-failure:3` 表示最多重启 3 次,超过后不再尝试)。
- 适用场景:可能偶尔因外部因素(如网络波动)出错,但可通过重启恢复的服务(如数据库连接临时中断的应用)。
**`--restart=unless-stopped`**
- 含义:容器会一直自动重启,除非用户手动执行 `docker stop` 停止容器(手动停止后,即使 Docker 服务重启也不会再启动)。
- 适用场景:需要长期运行,但可能需要手动临时停止维护的服务(如 Web 应用、API 服务)。
**`--restart=always`**
- 含义:无论容器以何种状态退出(包括正常退出、错误退出),甚至被手动停止,只要 Docker 服务重启,容器就会被重新启动。
- 适用场景:必须始终运行、不允许手动停止后 “遗忘启动” 的核心服务(如监控代理、关键中间件)。