Docker安装及基本操作
说明
本文介绍在 Docker 平台上部署 Java 版 EC 项目。Linux 有众多发行版,使用 Docker 部署可以使开发人员不受服务器环境的干扰,从而避免"本地可以,服务器上不行"的尴尬局面。运维人员使用 Docker 部署可以快速部署、迁移、缩扩容。
本文仅以 CentOS 为例介绍 Docker 平台上的部署方式。
1、确认服务器上是否已安装 Docker
docker --version
如果已安装会返回类似的内容:
2、下载安装包并上传到服务器执行命令
cd 到对应目录 rpm -ivh docker-ce-cli-18.09.8-3.el7.x86_64.rpm rpm -ivh container-selinux-2.107-3.el7.noarch.rpm rpm -ivh containerd.io-1.2.2-3.el7.x86_64.rpm rpm -ivh docker-ce-18.09.8-3.el7.x86_64.rpm
3、修改默认路径。docker默认安装在根目录下,运行一段时间镜像、容器、日志等会占用大量磁盘,导致根目录磁盘不足。所以一般我们会将docker的存储路径进行修改。提供以下两种方式修改
方法一:
通过修改docker默认存储位置实现
- 打开
/usr/lib/systemd/system/docker.service
文件,找到ExecStart
配置项,在其后面加上 -g /vdb/lib/docker --log-opt max-size=50m --log-opt max-file=5,如图所示 - 重载配置文件
systemctl daemon-reload
- 重启docker
systemctl restart docker
方法二:
通过创建软连接实现(该方法无需修改docker配置)
- 停止docker
systemctl stop docker
- 如果已经出现了磁盘满的情况需要先将
/var/lib/docker
下的东西拷到新磁盘上,如果刚装的docker则忽略此步
cp -r /var/lib/docker /vdb/lib/
- 为
/vdb/lib/docker/
创建软连接
ln -s /vdb/lib/docker/ /var/lib/
- 重启docker
systemctl restart docker
6.修改docker服务开机自动启动
systemctl enable docker
构建容器镜像
- 下载helloworld.tar.gz,并在本地解压,得到以下内容
- 替换 rest 目录下的 jar 包,假设项目的 jar 包名字是
gdhz.jar
- 修改
start.sh
文件,将helloworld.jar
修改为gdhz.jar
,其他内容为默认设置,建议不要修改 - 如果有独立配置文件,将其命名为
application.properties
,并替换config
目录下的默认配置文件 - 将 config Dockerfile rest start.sh 几个文件夹和文件都上传到服务器上,并放在同一个目录里
- 登录服务器
- 进入上传的目录
- 输入命令开始构建镜像,
java-helloworld:0.1
代表的是镜像名:版本号
,可以自行命名,但是不能有特殊字符和中文docker build ./ -t java-helloworld:0.1
创建并启动容器
docker run -d --name java-hello -p 8088:8080 java-helloworld:0.1
停止容器
docker stop java-hello
重启容器
docker restart java-hello
移除容器
docker rm java-hello
docker容器自动启动
# 启动容器时加
--restart=always
# 如果已经启动的项目,则使用update更新
docker update --restart=always 容器名/容器id
更新升级
假设更新java-helloworld:0.2
版
1, 构建新容器
docker build ./ -t java-helloworld:0.2
2, 停止并移除旧容器
docker stop java-hello && docker rm java-hello
3, 创建并启动新容器
docker run -d --name java-hello -p 8088:8080 java-helloworld:0.2
4, 验证更新结果
- 更新成功: 无需操作
- 更新失败: 停止并移除新容器,创建并启动旧版本容器,
docker stop java-hello && docker rm java-hello
docker run -d --name java-hello -p 8088:8080 java-helloworld:0.1
拓展
添加镜像库源
注意方法一与方法二不可同时存在!!!配置完成后需要重载配置,重启docker
方法一: /usr/lib/systemd/system/docker.service
文件中添加--insecure-registry 122.112.162.230:2234
方法二: /etc/docker/daemon.json
文件中添加{"insecure-registries":["192.168.242.132","10.3.13.184"]}
资源监控
docker stats
连接容器
docker exec -it <容器名/容器ID> /bin/bash
查看最后100行日志
docker logs --tail 100 <容器名/容器ID>
部署建议
以上更新方案在更新或失败后版本回退时,都需要短暂的停机,在需要高可用的场景下,可以使用 nginx 反向代理容器的接口,创建新容器时可以用其他端口,验证没有问题后,切换反向代理的端口,即可实现不停机无缝切换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了