1. Docker基本介绍
Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器化技术使得应用可以在任何支持 Docker 的环境中运行,确保环境一致性。
1.1 Docker 的核心概念
镜像(Image):Docker 镜像是一个只读模板,包含运行应用所需的代码、库、环境变量和配置文件。镜像是容器的基础。
容器(Container):容器是镜像的运行实例。容器是轻量级的,包含应用及其依赖,但共享主机操作系统的内核。
仓库(Registry):Docker 仓库用于存储和分发 Docker 镜像。Docker Hub 是最常用的公共仓库,用户也可以搭建私有仓库。
Dockerfile:Dockerfile 是一个文本文件,包含一系列指令,用于自动化构建 Docker 镜像。
1.2 Docker 的优势
- 环境一致性:确保开发、测试和生产环境一致,避免“在我机器上能运行”的问题。
- 快速部署:容器启动速度快,资源占用少,适合微服务架构。
- 隔离性:每个容器相互隔离,确保应用安全性和稳定性。
- 可移植性:容器可以在任何支持 Docker 的平台上运行,简化了跨平台部署。
1.3 安装 Docker
CentOS系统
更新软件包列表:
sudo yum update
安装必要的依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker的官方存储库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker引擎:
sudo yum install docker-ce docker-ce-cli containerd.io
启动Docker服务:
sudo systemctl start docker
将Docker添加到启动项,使其在系统启动时自动启动:
sudo systemctl enable docker
验证Docker是否成功安装:
sudo docker run hello-world
如果一切正常,你将看到一条消息,表示Docker已经正确安装和配置。
配置Docker命令免sudo(可选,添加用户到docker组):
sudo usermod -aG docker your_username
请将
your_username
替换为你的实际用户名。然后退出当前终端会话,或者运行su - your_username
,以使更改生效。
Ubuntu系统
更新软件包列表:
sudo apt update
安装依赖包以允许apt使用HTTPS:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置Docker的稳定存储库:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
如果你使用的是其他架构,例如arm64,可以将
[arch=amd64]
部分替换为[arch=arm64]
。更新软件包列表(再次更新):
sudo apt update
安装Docker引擎:
sudo apt install docker-ce docker-ce-cli containerd.io
启动Docker服务:
sudo systemctl start docker
将Docker添加到启动项,使其在系统启动时自动启动:
sudo systemctl enable docker
验证Docker是否成功安装:
sudo docker run hello-world
如果一切正常,你将看到一条消息,表示Docker已经正确安装和配置。
2. 常用命令
docker pull <image>
:从仓库拉取镜像。docker build -t <image_name> .
:根据 Dockerfile 构建镜像。docker run <image>
:运行容器。docker ps
:查看运行中的容器。docker stop <container_id>
:停止容器。docker rm <container_id>
:删除容器。docker rmi <image_id>
:删除镜像。
3. 部署常见服务
3.1 Nginx
1. 拉取镜像
docker pull nginx:1.25-alpine
2. 创建并运行容器
docker run -d \
--name nginx \
-p 80:80 \
-p 443:443 \
-v nginx_html:/usr/share/nginx/html \
-v nginx_conf:/etc/nginx/conf.d \
--restart unless-stopped \
nginx:1.25-alpine
-p 80:80
:映射容器内 HTTP 端口 80 → 宿主机 80-p 443:443
:映射容器内 HTTPS 端口 443 → 宿主机 443-v nginx_html:/usr/share/nginx/html
:挂载网站文件目录-v nginx_conf:/etc/nginx/conf.d
:挂载 Nginx 配置文件目录--restart unless-stopped
:容器退出时自动重启
3. 验证部署
- 查看容器状态:
docker ps | grep nginx
- 访问测试页面:浏览器打开
http://localhost
或http://服务器IP
,显示 Nginx 欢迎页
3.2 MySQL
1. 拉取镜像
docker pull mysql:latest
2. 创建并运行容器
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_secure_password \
-v mysql_data:/var/lib/mysql \
--restart unless-stopped \
mysql:latest
-p 3306:3306
:映射容器内 MySQL 端口 3306 → 宿主机 3306-e MYSQL_ROOT_PASSWORD=your_secure_password
:设置 MySQL root 用户密码-v mysql_data:/var/lib/mysql
:挂载数据卷(持久化数据库文件)--restart unless-stopped
:容器退出时自动重启
3. 验证部署
- 查看容器状态:
docker ps | grep mysql
- 命令行验证:
docker exec -it mysql mysql -u root -p
输入密码后进入 MySQL Shell
3.3 Redis
1. 拉取镜像
docker pull redis:latest
2. 创建并运行容器
docker run -d \
--name redis \
-p 6379:6379 \
-e REDIS_PASSWORD=your_secure_password \
-v redis_data:/data \
--restart unless-stopped \
redis:latest
-p 6379:6379
:映射容器内 Redis 端口 6379 → 宿主机 6379-e REDIS_PASSWORD=your_secure_password
:设置 Redis 访问密码-v redis_data:/data
:挂载数据卷(持久化 Redis 数据)--restart unless-stopped
:容器退出时自动重启
3. 验证部署
- 查看容器状态:
docker ps | grep redis
- 命令行验证:
docker exec -it redis redis-cli -a your_secure_password PING
返回PONG
3.4 RabbitMQ
1. 拉取镜像
docker pull rabbitmq:3.13-management
2. 创建并运行容器
docker run -d \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=your_secure_password \
-v rabbitmq_data:/var/lib/rabbitmq \
--restart unless-stopped \
rabbitmq:3.13-management
-p 5672:5672
:映射容器内 AMQP 协议端口 5672 → 宿主机 5672(消息通信)-p 15672:15672
:映射容器内 HTTP 端口 15672 → 宿主机 15672(管理界面)-e RABBITMQ_DEFAULT_USER=admin
:设置环境变量:RabbitMQ 默认用户名-e RABBITMQ_DEFAULT_PASS=your_secure_password
:设置环境变量:默认用户密码-v rabbitmq_data:/var/lib/rabbitmq
:挂载数据卷(宿主机命名卷 → 容器数据目录)--restart unless-stopped
:容器退出时自动重启(除非手动停止)
3. 验证部署
- 查看容器状态:
docker ps | grep rabbitmq
- 访问管理界面:http://localhost:15672 或 http://服务器IP:15672。使用设置的账号密码登录(admin/your_secure_password)