Docker 入门与实践:从零开始掌握容器化技术
Docker 入门与实践:从零开始掌握容器化技术
一、Docker 概述
什么是 Docker?
Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个可移植的镜像中,发布到任何支持 Docker 的 Linux 或 Windows 机器上,实现轻量级虚拟化。容器之间完全隔离,互不干扰。
什么是沙盒机制?
沙盒(Sandbox)是一种安全技术,为运行中的程序提供隔离环境,主要包括:
- 进程隔离
- 权限控制
- 资源隔离
- 数据隔离
Docker 利用沙盒机制确保每个容器运行在独立的环境中,提升安全性和稳定性。
Docker 容器 vs 虚拟机
特性 | Docker 容器 | 虚拟机 |
---|---|---|
虚拟化层次 | 应用层 | 硬件层 |
启动速度 | 秒级 | 分钟级 |
资源占用 | 低 | 高 |
隔离性 | 进程级 | 系统级 |
:类似于安装包,是容器的基础。
- 容器(Container):运行中的镜像实例。
二、Docker 环境部署
1. 检查内核版本
uname -r
要求内核版本 ≥ 3.10。
2. 卸载旧版本(可选)
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
3. 安装依赖与配置源
yum install -y yum-utils
yum-config-manager --add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4. 安装指定版本 Docker
yum install --setopt=obsoletes=0 \docker-ce-20.10.8-3.el7 \docker-ce-cli-20.10.8-3.el7 \containerd.io
5. 启动并验证
systemctl start docker
systemctl enable docker
docker run hello-world
若出现网络超时,可配置镜像加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、Docker 常用操作
镜像操作
命令 | 说明 |
---|---|
docker images | 查看本地镜像 |
docker search <镜像名> | 搜索镜像 |
docker pull <镜像名:标签> | 拉取镜像 |
docker rmi <镜像ID或名称> | 删除镜像 |
容器操作
命令 | 说明 |
---|---|
docker run -p 主机端口:容器端口 -d --name <名称> <镜像> | 创建并运行容器 |
docker start <容器ID或名称> | 启动容器 |
docker stop <容器ID或名称> | 停止容器 |
docker restart <容器ID或名称> | 重启容器 |
docker ps -a | 查看所有容器 |
docker rm <容器ID或名称> | 删除容器 |
docker exec -it <容器> /bin/bash | 进入容器内部 |
docker logs <容器> -f -n 10 | 查看日志 |
示例:运行 Tomcat
docker pull tomcat:8.0
docker run -p 8080:8080 -d --name tomcat8 tomcat:8.0
访问 http://虚拟机IP:8080
即可看到 Tomcat 首页。
四、实战:部署 MySQL 容器
1. 拉取镜像
docker pull mysql:8.4.0-oraclelinux8
2. 创建目录并设置权限
mkdir -p /usr/local/docker/mysql/{logs,conf,data}
chmod 777 /usr/local/docker/mysql/*
3. 运行 MySQL 容器
docker run --name mm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d \-v /usr/local/docker/mysql/logs:/var/log/mysql \-v /usr/local/docker/mysql/conf:/etc/mysql \-v /usr/local/docker/mysql/data:/var/lib/mysql \mysql:8.4.0-oraclelinux8
五、自定义镜像:打包 Spring Boot 应用
1. 准备 Dockerfile
FROM openjdk:8
ADD demo-helloworld-0.0.1-SNAPSHOT-exec-99.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
2. 构建镜像
docker build -t demo .
3. 运行容器
docker run -d -p 8888:8888 --name demo01 demo
访问 http://虚拟机IP:8888
即可访问应用。
六、总结
Docker 通过容器化技术实现了应用的快速部署、隔离和迁移,极大地提升了开发与运维效率。本文介绍了 Docker 的基本概念、安装方法、常用命令以及如何自定义镜像,希望能帮助你快速上手 Docker。
如果有需要修改或者补充的地方,可以随时联系主包