阿里云CentOS环境下Docker使用教程
一、环境准备
1. 系统要求
- 操作系统:CentOS 7/8(推荐使用阿里云ECS镜像,已优化网络性能)。
- 硬件配置:至少2GB内存(生产环境建议4GB+),CPU支持虚拟化(Intel VT-x/AMD-V)。
- 网络要求:稳定互联网连接(用于拉取镜像和配置加速器)。
2. 关闭SELinux(可选但推荐)
SELinux可能限制Docker访问数据卷或网络,临时或永久关闭:
`# 临时关闭
sudo setenforce 0
# 永久关闭(编辑配置文件)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo reboot # 重启生效`
替代方案:若需保留SELinux,可为数据卷目录设置正确上下文:
`sudo chcon -Rt svirt_sandbox_file_t /path/to/volume`
二、安装Docker
1. 卸载旧版本(如存在)
`sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux`
2. 配置阿里云YUM源
方法一:直接使用阿里云镜像
`# 备份原有CentOS源(可选)
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载阿里云CentOS 7源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 配置Docker官方源为阿里云镜像
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo`
方法二:手动替换源地址
若上述方法失败,可手动编辑/etc/yum.repos.d/docker-ce.repo,将所有download.docker.com替换为mirrors.aliyun.com/docker-ce。
3. 安装依赖工具
`sudo yum install -y yum-utils device-mapper-persistent-data lvm2`
4. 安装Docker CE
`sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin`
5. 启动Docker并设置开机自启
`sudo systemctl start docker
sudo systemctl enable docker`
6. 验证安装
`sudo docker --version
sudo docker run hello-world # 测试拉取镜像并运行容器`
三、配置阿里云镜像加速器
阿里云用户可免费使用容器镜像服务加速下载,步骤如下:
-
登录阿里云控制台 ,进入容器镜像服务 > 镜像加速器 ,获取专属加速地址(如
https://xxxx.mirror.aliyuncs.com)。 -
配置加速器 :
`sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker` -
验证加速效果 :
`sudo docker info | grep "Registry Mirrors" -A 1`输出应包含配置的加速地址。
四、Docker基础操作
1. 镜像管理
拉取镜像
`sudo docker pull [镜像名]:[标签] # 例如:sudo docker pull nginx:latest`
查看本地镜像
`sudo docker images`
删除镜像
`sudo docker rmi [镜像ID或名称] # 例如:sudo docker rmi nginx:latest`
清理无用镜像
`sudo docker image prune # 删除悬空镜像
sudo docker image prune -a # 删除所有未使用的镜像`
2. 容器运行与停止
运行容器
`sudo docker run [选项] [镜像名] [命令]`
常用选项:
-d:后台运行(守护态)。-p [宿主机端口]:[容器端口]:端口映射(如-p 8080:80)。-v [宿主机路径]:[容器路径]:数据卷挂载(如-v /data:/var/lib/mysql)。--name [容器名]:指定容器名称。-e [环境变量]:设置环境变量(如-e MYSQL_ROOT_PASSWORD=123456)。
示例:
`# 运行Nginx容器,映射端口8080
sudo docker run -d -p 8080:80 --name my_nginx nginx
# 运行MySQL容器,设置密码并挂载数据卷
sudo docker run -d \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name my_mysql \
mysql:5.7`
查看运行中的容器
`sudo docker ps`
查看所有容器(包括已停止的)
`sudo docker ps -a`
停止/启动容器
`sudo docker stop [容器名或ID] # 停止容器
sudo docker start [容器名或ID] # 启动容器
sudo docker restart [容器名或ID] # 重启容器`
删除容器
`sudo docker rm [容器名或ID] # 删除已停止的容器
sudo docker rm -f [容器名或ID] # 强制删除运行中的容器`
3. 进入容器
`sudo docker exec -it [容器名或ID] /bin/bash # 进入容器终端`
退出容器 :输入exit或按Ctrl+D。
五、数据持久化
1. 数据卷(Volumes)
创建数据卷
`sudo docker volume create [卷名] # 例如:sudo docker volume create mysql_data`
查看数据卷
`sudo docker volume ls`
使用数据卷运行容器
`sudo docker run -d -v mysql_data:/var/lib/mysql --name my_mysql mysql`
2. 绑定挂载(Bind Mounts)
直接挂载宿主机目录到容器:
`sudo docker run -d -v /host/path:/container/path --name my_container nginx`
注意 :确保宿主机目录存在且权限正确(如chmod -R 777 /host/path)。
六、网络配置
1. 查看网络模式
`sudo docker network ls`
2. 创建自定义网络
`sudo docker network create [网络名] # 例如:sudo docker network create my_net`
3. 运行容器时指定网络
`sudo docker run -d --network my_net --name my_container nginx`
4. 容器间通信
同一网络下的容器可通过容器名互相访问:
`# 容器1(MySQL)
sudo docker run -d --network my_net --name mysql_db -e MYSQL_ROOT_PASSWORD=123456 mysql
# 容器2(应用连接MySQL)
sudo docker run -d --network my_net --name my_app my_app_image`
七、Docker Compose(多容器编排)
1. 安装Docker Compose
`sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose`
2. 编写docker-compose.yml
示例:
`version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- mysql_data:/var/lib/mysql
networks:
- my_net
nginx:
image: nginx
ports:
- "8080:80"
networks:
- my_net
volumes:
mysql_data:
networks:
my_net:`
3. 启动服务
`sudo docker-compose up -d # 后台启动
sudo docker-compose down # 停止并删除容器`
八、常见问题解决
1. 端口冲突
-
现象 :容器启动失败,提示
Address already in use。 -
解决 :更换宿主机端口或停止占用端口的服务:
`sudo netstat -tulnp | grep <端口号> # 查看占用端口的进程 sudo kill <PID> # 终止进程`
2. 数据卷权限问题
- 现象 :容器启动失败,日志显示
Permission denied。 - 解决 :
-
调整宿主机目录权限:
`sudo chown -R 999:999 /path/to/volume # MySQL容器默认用户UID为999` -
或运行容器时指定用户:
`sudo docker run -u 1000:1000 ... # 使用宿主机用户UID:GID`
-
3. 容器无法访问互联网
- 现象 :容器内
ping失败或apt-get无法下载。 - 解决 :
-
检查宿主机网络是否正常。
-
重启Docker服务:
`sudo systemctl restart docker`
-
4. 磁盘空间不足
- 现象 :拉取镜像或运行容器时提示
no space left on device。 - 解决 :
-
清理无用镜像和容器:
`sudo docker system prune -a` -
扩展磁盘空间或清理宿主机文件。
-
九、总结
- 安装Docker:通过阿里云镜像源快速安装,并配置加速器提升下载速度。
- 镜像管理:拉取、查看、删除镜像,清理无用镜像。
- 容器操作:运行、停止、进入容器,管理容器生命周期。
- 数据持久化:使用数据卷或绑定挂载确保数据安全。
- 网络配置:自定义网络实现容器间通信。
- Docker Compose:简化多容器编排,一键启动复杂应用。
- 常见问题:解决端口冲突、权限问题、网络故障等。
通过本教程,您可以在阿里云CentOS环境下高效使用Docker部署和管理容器化应用。如需进一步学习,可参考Docker官方文档或阿里云容器服务文档。