轻松掌握 docker 容器管理项目
文/晨风不可依米 (2025.07.22)
Docker 介绍与安装
Docker 概念
docker:一款开源的应用容器引擎。镜像:一个可独立运行的应用程序。具有轻量级、不可变性(完整软件包)等特点;可使用Dockerfile配置完成自动化构建。容器:一个镜像运行的实例。具有轻量化、隔离性、易管理等特点;卷积:用于持久化存储容器数据;特别注意:卷积是支持双向同步机制;不管是宿主机或容器一方文件更改,相对一方会同步更新。网络:建立容器之间的通信;网络类型有桥接网络、主机网络、覆盖网络等。Dockerfile文件配置:定义自动化构建、文件迁移等配置内容。docker-compose.yml文件配置:一款在单台Linux服务器运行多个容器的工具。常用于自动化部署、管理项目等场景。
Docker 安装
- 前往
docker官网地址:https://www.docker.com,下载桌面端即可。 - 镜像源加速配置,常见加速镜像源地址,如下:
https://dockerhub.icu(较稳定)https://dockerproxy.comhttps://docker.nju.edu.cnhttps://mirror.baidubce.comhttps://registry.docker-cn.comhttps://docker.mirrors.ustc.edu.cnhttps://docker.mirrors.sjtug.sjtu.edu.cnhttps://eph8xfli.mirror.aliyuncs.com(临时)https://ozhrm8gx.mirror.aliyuncs.com(临时)
Docker 常用命令
Docker 镜像命令
- 查看本地镜像:
docker images ls。 - 查找镜像:
docker search <image>。 - 拉取镜像:
docker pull <image:version>。 - 删除镜像:
docker rmi <imageID | image:version>。 - 构建镜像:
docker build -t <自定义镜像名称:版本号> <构建内容目录> [-f <dockerfile 配置路径>]。 - 保存镜像:
docker save -o <image>.tar <image:version>。 - 查看镜像详情:
docker inspect <imageID>。
Docker 容器命令
- 查看运行中的容器:
docker ps;追加参数-a可查看所有容器。 - 运行容器:
docker run -d -p <HostPort>:<ContainerPort> --name <ContainerName> <image:version>。 - 删除容器:
docker rm <ContainerID | ContainerName>。 - 启动容器:
docker start <ContainerID | ContainerName>。 - 暂停容器:
docker stop <ContainerID | ContainerName>。 - 重启容器:
docker restart <ContainerID | ContainerName>。 - 强制删除已停止容器:
docker container prune -f。 - 进入容器:
docker exec -it <ContainerID> /bin/bash。 - 查看容器内进程:
docker top <ContainerID>。 - 查看容器日志内容:
docker logs -f <ContainerID>。 - 拷贝文件(
宿主机 => 容器):docker cp ./dir/file <ContainerID>:/dir/file。 - 拷贝文件(
容器 => 宿主机):docker cp <ContainerID>:/dir/file ./dir/file。
理解命令参数
docker run -d -p <HostPort>:<ContainerPort> -v <HostCacheDir>:<ContainerDir> --name <ContainerName> <image:version>
## 参数理解
-d 指定后台运行容器。
-p 指定端口映射,格式:宿主机端口:容器端口。
-v 指定数据卷积目录挂载,数据持久化存储(实时同步容器,但删除容器它还在);格式:宿主机目录:容器资源目录。
--name 指定容器名称。
Docker 容器内部命令(精简Linux)
进程资源命令
- 查看进程资源:
ps aux。 - 关闭进程服务:
kill -9 <PID>。 - 查看内存信息:
cat /proc/meminfo。 - 查看磁盘信息:
df -h。
网络测试命令
- 查看容器内网卡:
ifconfig。 - 查看网络监听端口:
ss -tunlp或netstat -tunlp。 - 查看容器服务名称:
hostname。 - 查看容器服务
IP:hostname -I。 - 查看主机服务端口:
netstat -lnt。 - 测试连通性和
DNS:nslookup <host-url>或ping 8.8.8.8。 - 直测本容器连通性:
curl http://localhost:<port>。
文件日志命令
- 文件操作:与
Linux环境无异。 - 查看日志:
tail -f <file.log>。
软件测试命令
- 查看操作系统:
cat /etc/os-release。 - 查看终端类型:
echo $SHELL。 - 查看环境配置:
env。 - 查看当前用户:
whoami。 - 查看当前权限:
id。
工具包命令
- 更新工具包:
apt update。 - 安装工具包:
apt install -y <pkg>;参数-y表示静默安装。
docker compose 命令
特别注意:docker compose命令会根据项目根目录下的dockercompose.yml配置文件来编排管理项目。
-
自动化构建部署命令:
docker compose up [-d] [--build];参数-d代表后台运行,参数-build代表强制构建镜像(在开发阶段很有用)。 -
查看已启动服务项目:
docker compose ps;等价于docker ps命令。 -
构建项目服务镜像:
docker compose build;需存在dockercompose.yml配置文件。 -
扩展项目服务容器数量:
docker-compose up -d --scale <ContainerName>=<number>。 -
启动服务(后台隐藏):
docker-compose up -d。 -
查看服务(
compose):docker-compose ps。 -
查看日志(实时):
docker-compose logs -f。 -
构建或重建服务:
docker-compose build。 -
扩展服务数量:
docker-compose up -d --scale <ContainerName>=<number>。
常见工具包
iproute2:包含ss、ip、tc等常见命令集。
Docker 卷积命令
- 列出卷积挂载目录信息:
docker volume ls。 - 创建卷积挂载目录信息:
docker volume create <volume_name>。 - 删除卷积挂载目录信息:
docker volume rm <volume_name>。 - 删除所有未使用卷积目录信息:
docker volume prune。 - 清理所有卷积目录信息:
docker volume prune -f。 - 查看卷积挂载信息:
docker volume inspect <volume_name>。 - 查看卷积挂载目录:
docker volume inspect <volume_name> --format '{{ .Mountpoint }}'。
Docker 其它命令
- 查看系统磁盘使用信息(含卷积信息):
docker system df。
Docker 配置详解
特别提醒:项目根目录下一般都会出现Dockerfile、docker-compose.yml同时存在情况。
Dockerfile配置文件负责自动化构建流程。docker-compose.yml负责项目服务启动。
Dockerfile 文件配置
Dockerfile文件配置,用于自动化构建过程。- 自动化构建过程三阶段。
- 开发环境:热更新实时预览,适合开发阶段。
- 构建环境:打包构建输出生产环境产物(
dist目录)。 - 生产环境:将生产环境产物(
dist目录)构建成镜像,并部署。
关键词理解
WORKDIR:本地源码存放在容器指定位置;常定义在容器的/usr/src/<project_name>。COPY:终端复制操作;用法:COPY <本地资源位置 或 指定阶段里的容器资源位置> <容器资源位置>。ENV:定义环境变量;用法:ENV <key> <value>。ARG:定义参数变量;用法:ARG <key> <value>。RUN:执行终端命令;用法(案例):RUN npm insall -g pnpm。CMD:启动项目命令:用法(案例):CMD [ "node", "dist/apps/${APP_NAME}/main.js" ]。
## Vue 项目案例配置自动化构建过程
### 开发环境
FROM node AS development
ENV NODE_ENV development
RUN npm install -g pnpm
RUN pnpm config set registry https://registry.npmmirror.com
RUN mkdir -p /usr/src/<project_name>
WORKDIR /usr/src/<project_name>
COPY package.json ./
COPY . .
## 先删除后安装,解决依赖项冲突或不一致问题。
RUN rm -rf /usr/src/<project_name>/node_modules
RUN pnpm install
### 构建环境
FROM node AS building
ENV NODE_ENV building
RUN npm install -g pnpm
RUN pnpm config set registry https://registry.npmmirror.com
RUN mkdir -p /usr/src/<project_name>
WORKDIR /usr/src/<project_name>
COPY package.json ./
COPY . .
## 先删除后安装,解决依赖项冲突或不一致问题。
RUN rm -rf /usr/src/<project_name>/node_modules
RUN pnpm install
RUN pnpm irun build
### 生产环境
FROM node AS production
WORKDIR /usr/src/<project_name>
## 仅用构建打包产物 dist 目录,减少镜像体积。
COPY --from=building /usr/src/<project_name>/dist ./dist
# 设置默认的 Nginx 配置;特别注意:vue 项目根目录下请创建 nginx.conf 配置文件;详细配置往下看(单独说明)。
COPY nginx.conf /etc/nginx/nginx.conf
# 设置启动命令
CMD ["nginx", "-g", "daemon off;"]
############################################################
## NestJS 微服务(monorepo)案例配置自动化构建过程
## 开发环境
FROM node AS development
ARG APP_NAME
ENV NODE_ENV development
RUN npm install -g pnpm
RUN pnpm config set registry https://registry.npmmirror.com
RUN mkdir -p /usr/src/<monorepo_pkgame>
WORKDIR /usr/src/<monorepo_pkgame>
COPY package.json ./
COPY . .
## 先删除后安装,解决依赖项冲突或不一致问题。
RUN rm -rf /usr/src/<monorepo_pkgame>/node_modules
RUN pnpm install
## 构建环境
FROM node AS building
ARG APP_NAME
ENV NODE_ENV production
RUN npm install -g pnpm
RUN pnpm config set registry https://registry.npmmirror.com
RUN mkdir -p /usr/src/<monorepo_pkgame>
WORKDIR /usr/src/<monorepo_pkgame>
COPY package.json ./
COPY . .
## 先删除后安装,解决依赖项冲突或不一致问题。
RUN rm -rf /usr/src/<monorepo_pkgame>/node_modules
RUN pnpm install
RUN pnpm run build -- ${APP_NAME}
## 生产环境
FROM node AS production
ARG APP_NAME
WORKDIR /usr/src/<monorepo_pkgame>
## 仅用构建打包产物 dist 目录,减少镜像体积。
COPY --from=building /usr/src/<monorepo_pkgame>/dist ./dist
CMD [ "node", "dist/apps/${APP_NAME}/main.js" ]
前端项目部署的 nginx.conf 配置
server {
## 域名和端口设置
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
## 解决路由重定向问题(未匹配路径)
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://backend-service;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
## 服务异常的路由重定向
root /usr/share/nginx/html;
}
}
docker-compose.yml 文件配置
- 特别提醒:
docker-compose.yml文件会默认读取.env配置文件;但shell脚本命令参数的优先级高于.env文件配置。 - 定义
services配置时,通常情况会部署开发环境和生产环境;切记容器端口不要存在重复或冲突,建议开发环境用x000 ~ x999区间宽口,生产环境用y000 ~ Y999区间端口。
## vue 项目案例管理(一键部署)
## 服务列表
services:
## 以项目名为 vue 为例,开发环境统一用 **-dev 作为开发项目名。
vue-dev:
build:
context: .
### 指定上述 vue 项目根目录下的 Dockerfile 配置文件
dockerfile: Dockerfile
### 持久化存储(源码和依赖;加速启动)
volumes:
- .:/usr/src/vue-dev
- /usr/src/vue-dev/node_modules
### 指定容器端口与项目端口(格式:容器端口:项目|镜像端口)
ports:
- "8080:8080"
environment:
NODE_ENV: development
### 开发环境的启动命令
command: npm run serve
## 以项目名为 vue 为例,开发环境统一用 **-prod 作为开发项目名。
vue-prod:
build:
context: .
### 指定上述 vue 项目根目录下的 Dockerfile 配置文件
dockerfile: Dockerfile
### 持久化存储(源码和依赖;加速启动)
volumes:
- .:/usr/src/vue-dev
- /usr/src/vue-dev/node_modules
### 指定容器端口与项目端口(格式:容器端口:项目|镜像端口)
ports:
- "80:80"
environment:
NODE_ENV: production
############################################################
## NestJS 微服务(monorepo)案例管理(一键部署)
### 持久化存储数据
volumes:
## 开发环境卷积目录
auth-db-dev-data:
email-db-dev-data:
## 生产环境卷积目录
auth-db-prod-data:
email-db-prod-data:
## 服务列表
services:
## 开发环境项目(以 **-dev 为标识)
auth-db-dev:
image: mysql:8
container_name: auth-db-dev
ports:
- '3307:3306'
volumes:
- auth-db-dev-data:/var/lib/mysql
environment:
- MYSQL_ROOT_USER=root
- MYSQL_ROOT_PASSWORD=user
- MYSQL_DATABASE=auth-db
email-db-dev:
image: mysql:8
container_name: email-db-dev
### 格式:容器端口:镜像端口;注意保证容器杜阿口不重复或冲突
ports:
- '3308:3306'
volumes:
- email-db-dev-data:/var/lib/mysql
environment:
- MYSQL_ROOT_USER=root
- MYSQL_ROOT_PASSWORD=user
- MYSQL_DATABASE=email-db
gateway-service-dev:
build:
context: .
target: development
### 指定自动化构建配置文件
dockerfile: Dockerfile
args:
- APP_NAME=gateway-service
### 格式:容器端口:镜像端口;注意保证容器杜阿口不重复或冲突
ports:
- '3000:3000'
environment:
- NODE_ENV=development
### 持久化存储数据(缓存源码和项目依赖,加速构建速度)
volumes:
- .:/usr/src/<monorepo_pkgame>
- /usr/src/<monorepo_pkgame>/node_modules
### 启动项目开发环境的命令
command: 'pnpm run start:dev -- gateway-service'
auth-service-dev:
build:
context: .
target: development
dockerfile: Dockerfile
args:
- APP_NAME=auth-service
ports:
- '3001:3001'
environment:
- NODE_ENV=development
volumes:
- .:/usr/src/<monorepo_pkgame>
- /usr/src/<monorepo_pkgame>/node_modules
depends_on:
- auth-db-dev
command: 'pnpm run start:dev -- auth-service'
email-service-dev:
build:
context: .
target: development
dockerfile: Dockerfile
args:
- APP_NAME=email-service
ports:
- '3002:3002'
environment:
- NODE_ENV=development
volumes:
- .:/usr/src/<monorepo_pkgame>
- /usr/src/<monorepo_pkgame>/node_modules
depends_on:
- email-db-dev
command: 'pnpm run start:dev -- email-service'
## 生产环境项目(以 **-prod 为标识)
auth-db-prod:
image: mysql:8
container_name: auth-db-prod
ports:
- '4307:3306'
volumes:
- auth-db-prod-data:/var/lib/mysql
environment:
- MYSQL_ROOT_USER=root
- MYSQL_ROOT_PASSWORD=xiaoyimi
- MYSQL_DATABASE=auth-db
email-db-prod:
image: mysql:8
container_name: email-db-prod
ports:
- '4308:3306'
volumes:
- email-db-prod-data:/var/lib/mysql
environment:
- MYSQL_ROOT_USER=root
- MYSQL_ROOT_PASSWORD=xiaoyimi
- MYSQL_DATABASE=email-db
gateway-service-prod:
build:
context: .
target: production
dockerfile: Dockerfile
args:
- APP_NAME=gateway-service
ports:
- '4000:4000'
environment:
- NODE_ENV=production
# depends_on:
# - gateway-db-prod
auth-service-prod:
build:
context: .
target: production
dockerfile: Dockerfile
args:
- APP_NAME=auth-service
ports:
- '4001:4001'
environment:
- NODE_ENV=production
depends_on:
- auth-db-prod
email-service-prod:
build:
context: .
target: production
dockerfile: Dockerfile
args:
- APP_NAME=email-service
ports:
- '4002:4002'
environment:
- NODE_ENV=production
depends_on:
- email-db-prod
构建镜像并启动服务命令:在完成以上Dockerfile、docker-compose.yml等配置文件,可执行以下命令:
- 构建
docker-compose.yml定义的所有服务:docker compose up --build。 - 构建
docker-compose.yml定义的指定服务:docker compose up --build <service1> <service2> <...>。
文章收获
- 如果觉得对你有所帮助,请点下“推荐”吧!
- 如果担心文忘记章地址,请点下“收藏”吧!
- 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。

浙公网安备 33010602011771号