Docker 详解与部署微服务实战
主讲老师:Fox
有道笔记地址链接:https://note.youdao.com/s/8eWHV1Jr
1. Docker详解
1.1 Docker简介
Docker 是一个开源的容器化平台,可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器。
容器化是一种虚拟化技术,通过操作系统层面的隔离实现应用程序的独立运行。
与传统虚拟机相比的优势:
- 轻量级:容器与宿主机共享内核,启动快,资源占用少。
- 可移植性:可在任何支持容器运行时的系统中运行。
- 快速部署:简化打包、分发和部署流程。
- 弹性扩展:可快速创建、启动和停止容器。
- 环境隔离:容器之间相互隔离,安全稳定。
Docker 与传统虚拟机的区别:
- 虚拟机:模拟完整硬件和操作系统,系统级隔离。
- Docker:进程级隔离,共享宿主机内核。
1.2 Docker 架构
Client
├── Docker_build
├── docker pull
└── docker run
DOCKER_HOST
├── Docker daemon
├── Containers
└── Images
Registry (如 Docker Hub)
- Docker Daemon:运行在宿主机的后台进程。
- Client:用户界面,接受命令并与 Daemon 通信。
- Images:只读模板,用于创建容器。
- Container:镜像的运行实例。
- Registry:镜像存储与分发服务(公有/私有)。
1.3 Docker 安装(以 CentOS 为例)
系统要求:
内核版本高于 3.10
bash
uname -r
安装步骤:
- 更新 yum 包:
bash
yum update -y
- 卸载旧版本:
bash
sudo yum remove -y docker*
- 安装依赖:
bash
yum install -y yum-utils
- 设置阿里云镜像源:
bash
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
- 查看可安装版本:
bash
yum list docker-ce --showduplicates | sort -r
- 安装指定版本:
bash
yum install -y docker-ce-3:24.0.2-1.el7.x86_64
- 启动并设置开机自启:
bash
systemctl start docker && systemctl enable docker
- 验证安装:
bash
docker version
配置镜像加速器(阿里云):
- 创建或编辑配置文件:
bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://jbw52uwf.mirror.aliyuncs.com"]
}
EOF
- 重启 Docker:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
1.4 Docker 使用
镜像相关命令:
- 搜索镜像:
bash
docker search java
- 下载镜像:
bash
docker pull java:8
docker pull nginx
- 列出镜像:
bash
docker images
- 删除镜像:
bash
docker rmi java
docker rmi $(docker images -q) # 删除所有
容器相关命令:
- 新建并启动容器:
bash
docker run -d -p 91:80 nginx
- 列出容器:
bash
docker ps
docker ps -a # 包括已停止的
- 停止容器:
bash
docker stop <容器ID>
- 强制停止容器:
bash
docker kill <容器ID>
- 启动已停止的容器:
bash
docker start <容器ID>
- 查看容器信息:
bash
docker inspect <容器ID>
- 查看日志:
bash
docker logs <容器ID>
- 进入容器:
bash
docker exec -it <容器ID> /bin/bash
- 容器内安装工具:
bash
apt-get update
apt-get install vim iputils-ping net-tools
- 删除容器:
bash
docker rm <容器ID>
docker rm -f $(docker ps -a -q) # 强制删除所有
2. 使用 Dockerfile 构建 Docker 镜像
2.1 Dockerfile 常用指令
| 指令 | 用途说明 |
|---|---|
| FROM | 基础镜像 |
| RUN | 构建阶段执行命令 |
| ADD | 添加文件(支持URL和压缩包) |
| COPY | 拷贝文件 |
| CMD | 容器启动后执行的命令 |
| EXPOSE | 声明服务端口 |
| WORKDIR | 设置工作目录 |
| ENV | 设置环境变量 |
| ENTRYPOINT | 容器入口命令 |
| USER | 设置运行用户 |
| VOLUME | 声明持久化目录 |
2.2 构建微服务镜像示例(Spring Boot Jar)
Dockerfile 内容:
dockerfile
FROM java:8
ADD tulingmall-member-0.0.5.jar /tulingmall-member-0.0.5.jar
EXPOSE 8877
ENTRYPOINT java ${JAVA_OPTS} -jar /tulingmall-member-0.0.5.jar
构建镜像:
bash
docker build -t tulingmall-member:0.0.5 .
运行容器:
bash
docker run -d -p 8877:8877 \
-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848 \
-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m' \
--cap-add=SYS_PTRACE \
tulingmall-member:0.0.5
3. 将微服务镜像发布到阿里云镜像仓库
- 登录阿里云 Docker Registry:
bash
docker login --username=fox666 registry.cn-hangzhou.aliyuncs.com
- 标记镜像:
bash
docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com/fox666/tulingmall-member:0.0.5
- 推送镜像:
bash
docker push registry.cn-hangzhou.aliyuncs.com/fox666/tulingmall-member:0.0.5
4. 搭建私有 Docker 镜像仓库
4.1 使用 Docker Compose 部署私有仓库
docker-compose.yml:
yaml
version: '3'
services:
registry:
container_name: docker-registry
image: registry:2
ports:
- 5000:5000
volumes:
- /data/docker-registry:/var/lib/registry
启动:
bash
docker compose up -d
4.2 配置 Docker Daemon 支持私有仓库
编辑 /etc/docker/daemon.json:
json
{
"registry-mirrors": ["https://jbw52uwf.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.65.78:5000"]
}
重启 Docker:
bash
systemctl daemon-reload && systemctl restart docker
4.3 推送镜像到私有仓库
- 构建并标记镜像:
bash
docker build -t 192.168.65.78:5000/tulingmall-member:latest .
- 登录私有仓库:
bash
docker login 192.168.65.78:5000
- 推送镜像:
bash
docker push 192.168.65.78:5000/tulingmall-member:latest
- 验证:
bash
curl -X GET http://192.168.65.78:5000/v2/_catalog
文档整理自《Docker详解与部署微服务实战.pdf》,内容涵盖Docker基础、镜像构建、容器管理、私有仓库搭建等实战内容。
如果有需要修改或者补充的地方,可以随时告诉我。