docker 架构图
一、docker的部署与安装
1、在 CentOS 上安装 Docker
移除旧版本(如果有的话):
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
2、安装依栏包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3、添加 Docker CE 仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、安装 Docker CE:
sudo yum install docker-ce
5、启动 Docker 服务
sudo systemctl start docker
6、设置 Docker 服务开机自启:
sudo systemctl enable docker
7、验证安装
sudo docker run hello-world
二、在docker上部署应用以及docker的使用
1. 准备 Docker 环境
确保你已经安装了 Docker。可以通过运行 docker --version 来检查是否安装并启动了 Docker 服务。
2. 构建或获取 Docker 镜像
如果你的应用程序已经是一个 Docker 镜像,你可以直接从 Docker Hub 或其他容器镜像仓库获取它。否则,你需要创建一个 Dockerfile 来构建你的镜像。
创建 Dockerfile
在应用程序的根目录下创建一个名为 Dockerfile 的文件,它定义了如何构建你的 Docker 镜像。例如:
# 使用官方 Python 运行时作为父镜像 FROM python:3.8-slim # 将工作目录设置为 /app WORKDIR /app # 将当前目录内容复制到位于 /app 的容器中 COPY . /app # 安装 requirements.txt 中指定的任何所需包 RUN pip install --trusted-host pypi.python.org -r requirements.txt # 使端口 80 可供此容器外的环境使用 EXPOSE 80 # 定义环境变量 ENV NAME World # 在容器启动时运行 app.py CMD ["python", "app.py"]
构建镜像
docker build -t your-app-name .
3. 运行 Docker 容器
使用以下命令来基于你的 Docker 镜像运行一个容器:
docker run -d -p 4000:80 your-app-name
这里 -d 标志代表后台运行,-p 标志将宿主机的 4000 端口映射到容器的 80 端口。
4. 访问应用
如果你的应用程序是一个 web 应用,你可以通过浏览器访问它。如果端口映射到了宿主机的端口,你可以通过 http://localhost:4000 来访问应用
5. 管理 Docker 容器
你可以使用以下命令来管理你的 Docker 容器:
- 查看运行中的容器:docker ps
- 查看所有容器(包括停止的):docker ps -a
- 停止容器:docker stop <container-id或name>
- 启动容器:docker start <container-id或name>
- 删除容器:docker rm <container-id或name>
6. 监控和日志
你可以使用以下命令来监控容器的日志和资源使用情况:
- 查看日志:docker logs <container-id或name>
- 实时监控日志:docker logs -f <container-id或name>
- 查看资源使用情况:docker stats <container-id或name>
7. 存储和数据持久化
如果你需要持久化数据或存储状态,你可以使用 Docker 卷或绑定挂载来实现。
使用 Docker 卷
docker run -d -p 4000:80 --name my-container -v /path/to/volume your-app-name
使用绑定挂载
docker run -d -p 4000:80 --name my-container your-app-name /path/to/app:/app
三、docker容器常出现的问题
1、启动失败:容器启动失败可能是由于镜像下载失败、容器依赖问题、资源不足(如CPU、内存、存储空间)、端口冲突、系统限制(如ulimit设置)等原因。
2、容器无法连接网络:这可能是由于网络配置错误,如网络模式不正确,或者容器内的网络设置有问题。
3、容器内部进程退出:如果容器内的主要进程退出,Docker会停止容器。这通常是因为进程收到了信号,如终端窗口关闭,或者是因为容器配置的问题,如环境变量设置不当。
4、** images 文件损坏**:下载的镜像文件可能因为网络问题或镜像源不稳定而损坏,导致无法正确加载。
5、存储空间不足:Docker容器会在宿主机的文件系统中创建一层存储空间,如果宿主机的空间不足,可能会导致问题。
6、性能问题:Docker容器在运行时可能会受到宿主机资源的限制,如CPU和内存限制过低,或者容器间资源争用。
7、安全问题:如果不当心,容器可能会暴露敏感数据,或者因为未更新的镜像而受到安全漏洞的威胁。
8、容器之间通信困难:即使是在同一台宿主机上的容器,如果网络配置不当,也可能导致容器间通信困难。
9、日志管理困难:Docker容器可能会产生大量的日志,管理这些日志,尤其是定位问题日志,可能是一个挑战。
10、状态持久化困难:由于容器设计为无状态,对于需要状态持久化的应用,需要额外的考虑和配置。
当遇到问题时,可以通过以下步骤进行排查和解决:
(1)查看日志:使用docker logs [container_id]查看容器日志。
(2)查看状态:使用docker ps查看容器状态。
(3)查看资源使用情况:使用docker stats查看容器的资源使用情况。
(4)检查网络配置:使用docker network命令检查网络配置。
(5)查看Docker配置:检查/etc/docker/目录下的配置文件。
(6)使用Docker命令行工具:Docker提供了丰富的命令行工具帮助管理和调试容器。