Docker Mar 16, 2026
docker images # 列出所有镜像
docker images -a # 包含中间层镜像
docker pull nginx:1.21-alpine # 拉取指定版本
docker rmi nginx # 删除镜像
docker tag nginx my-nginx:v1 # 给镜像打标签
docker tag nginx:latest umyun.com/nginx:prod # 推送到私有仓库
docker inspect nginx # 查看镜像详细信息
docker run nginx # 运行容器
docker run -d nginx # 后台运行
docker run -it nginx bash # 交互模式运行
docker run --name my-nginx nginx # 指定名称
docker run --rm nginx # 运行后自动删除
docker run -p 8080:80 nginx # 端口映射
docker run -v /host/path:/container/path nginx # 挂载卷
docker run -e MY_ENV=value nginx # 设置环境变量
docker start container_name # 启动容器
docker stop container_name # 优雅停止
docker stop -t 30 container_name # 指定超时时间
docker restart container_name # 重启容器
docker pause container_name # 暂停容器
docker unpause container_name # 恢复容器
docker kill container_name # 强制停止
docker rm container_name # 删除容器
docker container prune # 删除所有停止的容器
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker exec -it container_name bash # 进入容器(推荐)
docker exec container_name ls /app # 执行单条命令
docker logs container_name # 查看日志
docker logs -f container_name # 实时查看(类似 tail -f)
docker logs --tail 100 container_name # 查看最后100行
docker logs --since 10m container_name # 查看最近10分钟
docker logs -t container_name # 显示时间戳
docker inspect container_name # 查看容器详细信息
docker stats # 实时查看资源使用
docker stats --no-stream # 单次查看资源使用
docker top container_name # 查看容器内进程
docker port container_name # 查看端口映射
docker diff container_name # 查看容器文件变化
Docker build
可用来将本地服务构建成镜像
常用命令
docker build .使用当前目录作为构建上下文docker build ./fnp指定特定目录作为构建上下文docker build -t fnp:latest .为镜像指定名称和标签docker build -f Dockerfile.dev .使用非默认的 Dockerfile 文件名
FROM openjdk:8u312-oraclelinux8
ENV JAVA_HOME=/usr/java/openjdk-8
ENV EXT_DIRS=${JAVA_HOME}/jre/lib/ext
ENV APP_USER=umcc
ENV APP_GROUP=umcc
ENV APP_HOME=/opt/app
ENV PROJECT_NAME=fnp
ARG USER_ID=1000
ARG GROUP_ID=1000
RUN groupadd -g ${GROUP_ID} ${APP_GROUP} && \
useradd -u ${USER_ID} -g ${APP_GROUP} -s /sbin/nologin -M ${APP_USER}
VOLUME /tmp
RUN mkdir -p ${APP_HOME}/{lib,conf,config,log,doc,phone} && \
chown -R ${APP_USER}:${APP_GROUP} ${APP_HOME}
WORKDIR ${APP_HOME}
COPY --chown=${APP_USER}:${APP_GROUP} target/rms-gpd-fnp.jar ./
COPY --chown=${APP_USER}:${APP_GROUP} target/lib/ ./lib/
COPY --chown=${APP_USER}:${APP_GROUP} target/conf/ ./conf/
COPY --chown=${APP_USER}:${APP_GROUP} target/config/ ./config/
COPY --chown=${APP_USER}:${APP_GROUP} target/doc/ ./doc/
COPY --chown=${APP_USER}:${APP_GROUP} target/startup.sh ./
RUN chmod +x startup.sh
# 切换到非 root 用户
USER ${APP_USER}
# 声明端口
EXPOSE 18081
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
CMD curl -f http://localhost:18081/actuator/health || exit 1
# 启动命令
ENTRYPOINT ["sh", "startup.sh"]
Docker compose
用于定义和运行多容器 Docker 应用程序的工具
常用命令
docker-compose up -d启动docker-compose down停止docker-compose down -v停止并清理卷docker-compose restart重启docker run -it --rm --entrypoint /bin/bash 镜像不了解镜像内部构造时可进入内部查看
services:
fnp:
build:
context: .
dockerfile: Dockerfile
args:
USER_ID: ${HOST_UID:-1000}
GROUP_ID: ${HOST_GID:-1000}
image: fnp:latest
container_name: umcc_fnp
ports:
- "18081:18081"
volumes:
- /opt/app/test_rms/fnp/log:/opt/app/log
- /opt/app/test_rms/fnp/conf:/opt/app/conf
- /opt/app/test_rms/fnp/config:/opt/app/config
- /opt/app/test_rms/fnp/doc:/opt/app/doc
- /opt/app/test_rms/fnp/phone:/opt/app/phone
- /tmp:/tmp:rw,noexec,nosuid
environment:
- TZ=${TZ}
- JAVA_OPTS=${JAVA_OPTS}
# 如果需要可选配置,可以取消注释下面这行
# - JAVA_OPTS=${JAVA_OPTS} ${GC_SAFEPOINT_OPTS} ${JMX_OPTS} ${DEBUG_OPTS}
restart: unless-stopped
#restart: "no" # 从不自动重启(默认)
#restart: always # 总是重启
#restart: on-failure # 失败时重启
#restart: unless-stopped # 除非手动停止,否则总是重启
# 最大内存限制
mem_limit: 4G
# 最小内存限制
mem_reservation: 2G
# cpu分配可填写小数
cpus: 4.0
# CPU 权重(可选) 权重只在CPU紧张时生效
cpu_shares: 1024
stop_grace_period: 30s
构建脚本
#!/bin/bash
set -e
PROJECT_NAME=fnp
ROOT_DIR=/opt/app/test_rms
PROJECT_HOME=${ROOT_DIR}/${PROJECT_NAME}
CURRENT_UID=$(id -u)
CURRENT_GID=1000
export HOST_UID=$CURRENT_UID
export HOST_GID=$CURRENT_GID
echo "========== 部署 ${PROJECT_NAME} =========="
mkdir -p ${PROJECT_HOME}/{log,conf,config,doc,phone}
# 初始化配置文件
cp -rn target/conf/* ${PROJECT_HOME}/conf/ 2>/dev/null || true
cp -rn target/config/* ${PROJECT_HOME}/config/ 2>/dev/null || true
sudo chown -R $CURRENT_UID:$CURRENT_GID ${PROJECT_HOME}
mkdir -p ${PROJECT_HOME}/log/rocketmqlogs
sudo chown -R $CURRENT_UID:$CURRENT_GID ${PROJECT_HOME}/log
docker compose down 2>/dev/null || true
docker compose build
docker compose up -d
if [ $? -eq 0 ]; then
echo "✅ ${PROJECT_NAME} - 部署成功"
else
echo "❌ ${PROJECT_NAME} - 部署失败"
fi
CPU分配
Java 应用经验法则
| 应用类型 | CPU 需求 | 内存需求 | 说明 |
|---|---|---|---|
| 小型服务 | 0.5-1 核 | 1-2 GB | 简单 CRUD,低并发 |
| 中型服务 | 1-2 核 | 2-4 GB | 业务逻辑复杂,中等并发 |
| 大型服务 | 2-4 核 | 4-8 GB | 计算密集,高并发 |
| 计算密集型 | 4+ 核 | 8+ GB | 数据处理、批量任务 |
Docker install
安装
# yum 增强工具
sudo yum install -y yum-utils
# 添加阿里云Docker仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装最新版本
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 或者安装特定版本
sudo yum install -y docker-ce-<VERSION> docker-ce-cli-<VERSION> containerd.io
# 启动Docker
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 查看Docker状态
sudo systemctl status docker
# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看Docker版本
docker version
# 查看详细信息
docker info
自定义配置
# 创建配置文件目录
sudo mkdir -p /etc/docker
vim /etc/docker/daemon.json
国内镜像加速
{
"registry-mirrors": [
"https://mirror.baidubce.com",
"https://mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://registry.docker-cn.com",
"https://quay.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com/",
"https://dockerhub.icu"
]
}
删除
# 停止服务
sudo systemctl stop docker
# 卸载软件包
sudo yum remove docker-ce docker-ce-cli containerd.io
# 删除相关文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
关于网络访问
使用 Docker 网络
# 创建网络
docker network create mynetwork
# 运行容器时加入同一网络
docker run -d --name web --network mynetwork nginx
docker run -d --name redis --network mynetwork redis:alpine
使用主机网络模式(–network host)
--add-host="redis.server:192.168.2.100" \ # B服务器的真实IP
--add-host="host.docker.internal:host-gateway" # 宿主主机地址
Inspect 查看容器内网IP
# 查看容器IP
docker inspect -f '' 容器名