一文搞定docker容器化
Docker 是一个“集装箱”技术,把你的应用(代码+依赖+环境)打包成一个标准化的“集装箱”(容器),无论你把它放到哪台机器(Windows/Linux/云服务器),都能保证“一模一样”的运行效果。
下面解释一下我们为什么需要它呢?我们看下下面的场景
| 问题场景 | 传统方式 | Docker 解决方案 |
|---|---|---|
| 开发环境能跑,服务器报错 (比如:Java 1.8 依赖库缺失) |
开发用 Mac,服务器用 Ubuntu,配置不一致 → 代码在开发机跑得好,部署到服务器就报错 | Docker 容器自带完整环境 (Java 1.8 + Tomcat + 所有依赖)→ 代码在哪都一样跑 |
| 服务器资源浪费 (单机跑 5 个 Tomcat,每个占 2G) |
每个应用单独装 JDK/Tomcat → 5 个应用占 10G 内存 | Docker 共享底层系统 (只占 500MB 空间)→ 5 个应用共用 2.5G 内存 |
| 部署慢 (手动装 JDK、配置环境、部署 WAR 包) |
1 小时/次 | 一键启动 ( docker run -p 8080:8080 my-app:1.0 → 5 秒完成) |
✅ 核心价值:解决“环境不一致”和“资源浪费”问题,让开发、测试、生产环境完全一致。
Docker是一个开源的容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容 器。 容器化引擎(新型虚拟机) Docker使用Google公司推出的Go语言进行开发实现,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。 用户可以方便地创建和使用容器,把自己的应用放入容器。 容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。 容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器的镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统 工具、系统库和设置。
官网:https://www.docker.com/
特点: 轻量,在一台机器上运行的多个Docker容器可以共享这台机器的操作系统内核;它们能够迅速启动,只 需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件。这样就能尽 量降低磁盘用量,并能更快地下载镜像。 标准,Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸 机服务器和云在内的任何基础设施上运行。 安全,Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的 隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器。
核心组成:
镜像( Image ) 软件安装包,是一套软件集合,需要的其他的软件都在里面,比如Tomcat镜像,就 包含Jdk+tomcat
容器( Container )基于镜像安装之后的实例
数据卷(Data Volumes)容器存储数据的地方,类似磁盘(虚拟的)
网络(Network)可以实现容器的网络分配,每个容器都有自己的网络(ip+端口)
仓库( Repository )存储镜像的地方,国内建议使用第三方镜像仓库
1.安装
因为我们主要还是在云服务器上使用,所以这里直接在lInux服务器安装为例
执行命令,先查看是否有Docker
docker --version
如果想要删除:yum -y remove docker-ce
如果没有需要安装: 1.执行命令,实现Docker安装
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast
yum -y install docker-ce

验证:
docker --version
启动:systemctl start docker

停止:systemctl stop docker
查看状态:systemctl status docker
重启:systemctl restart docker
docker配置国内镜像站(解决拉取镜像慢的问题)
vi /etc/docker/daemon.json
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.ru" ] }
然后重启服务:
systemctl daemon-reload
systemctl restart docker
之后拉取镜像速度会快一些
2.使用
2.1镜像
1.搜索镜像:docker search tomcat(例子,并不固定)
2.查看本地镜像:docker images
3.下载镜像:docker pull 镜像名称
4.删除镜像 docker rmi a76ed56adf24(IMAGE ID)
2.2容器
创建容器:docker create docker create --name tomcat8081 -p 8081:8080 tomcat
参数说明: 1.--name 为容器起个名字,名称唯一 2.-p 设置端口号 访问端口号:软件本身的端口号
创建并运行容器:docker run docker run -d --name tomcat8082 -p 8082:8080 tomcat
参数说明: 1.-d 后台启动 2.--name 为容器起个名字 3.-p 设置端口号 访问端口号:软件本身的端口号 run命令:1.镜像不存在,会自动下载 2.创建容器 3.启动容器 等价于:pull+create+start 命令组合
启动容器:docker start
docker start tomcat8081
停止容器:docker stop
docker stop tomcat8081
删除容器:docker rm
docker rm tomcat8081
注意:删除容器,容器必须先停止
查看容器:docker ps
docker ps -a 查看创建的所有的容器
docker ps 查看运行中的容器
查看容器日志:docker logs
docker logs tomcat8082
12.进入到容器内部:docker exec docker exec -it tomcat8082 bash
参数说明: 1.-it 交互 2.bash 命令 退出容器,采用exit
查看容器详情:docker inspect
docker inspect tomcat8082
2.3使用
在你的本地项目根目录(也就是生成 target/app.jar 的地方),创建一个 Dockerfile
内容如下:
# 使用精简的 JDK 8 环境
FROM openjdk:8-jre-slim
# 设置工作目录
WORKDIR /app
# 复制构建好的 jar 包
# 假设你的 maven/gradle 构建输出在 target/app.jar
COPY target/app.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令 (优化随机数生成器以加快启动)
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

然后配置ssh,用本地电脑连接远程服务器,通过脚本一键部署(个人项目,小项目适合)
创建脚本deploy.sh
输入一下命令:
#!/bin/bash
VERSION="v1" # 每次发布前修改版本号
IMAGE_NAME="my-java-app"
SERVER_USER="root"
SERVER_IP="192.168.1.100" # 替换为你的服务器IP
echo "1. 正在构建镜像..."
docker build -t ${IMAGE_NAME}:${VERSION} .
echo "2. 正在导出镜像..."
docker save -o ${IMAGE_NAME}.tar ${IMAGE_NAME}:${VERSION}
echo "3. 正在传输到服务器..."
scp ${IMAGE_NAME}.tar ${SERVER_USER}@${SERVER_IP}:/tmp/
echo "4. 正在远程部署..."
ssh ${SERVER_USER}@${SERVER_IP} << EOF
echo "停止旧容器..."
docker stop ${IMAGE_NAME} || true
docker rm ${IMAGE_NAME} || true
echo "加载新镜像..."
docker load -i /tmp/${IMAGE_NAME}.tar
echo "启动新容器..."
docker run -d -p 8080:8080 --name ${IMAGE_NAME} ${IMAGE_NAME}:${VERSION}
echo "清理临时文件..."
rm /tmp/${IMAGE_NAME}.tar
echo "部署完成!"
docker ps | grep ${IMAGE_NAME}
EOF
echo "5. 清理本地临时文件..."
rm ${IMAGE_NAME}.tar
echo "✅ 全部完成!"
- 给脚本权限:
chmod +x deploy.sh - 每次代码更新后,在本地运行:
./deploy.sh
更多推荐
所有评论(0)