本文详细介绍了Docker的基础概念、安装方法、基本命令以及镜像管理,并深入讲解了Docker网络与存储的使用,包括多种网络模式和数据卷管理方法。文章还提供了Docker项目实战演练,通过创建和部署一个简单的Web应用项目,展示了如何将项目打包为Docker镜像并运行,涵盖本地和云服务器的部署。文中还包括了Docker的最佳实践与进阶技巧,确保读者能够全面掌握Docker项目实战。
Docker基础概念与安装Docker 是一种开源的应用容器引擎,它让开发者可以将应用及其依赖打包在一个可移植的容器中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。每个容器拥有自己的文件系统、进程空间、用户空间和用户ID,不需要任何类型的权限提升和虚拟化系统。
Docker的优势包括:
应用场景包括:
sudo apt-get update
sudo apt-get install docker.io
sudo docker --version
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
sudo systemctl start docker
sudo docker --version
docker --version
docker ps
docker ps -a
docker search nginx
docker run -it nginx
docker stop container_id_or_name
docker rm container_id_or_name
docker images
docker rmi image_id
Docker 镜像是一个只读模板,用于创建 Docker 容器。一个镜像可以包含一个操作系统,也可以包含一个软件栈。Docker 镜像是构建容器的基础,可以通过 Dockerfile 来定义。
搜索镜像
docker search nginx
拉取镜像
docker pull nginx
构建镜像
创建一个Dockerfile
,内容如下:
FROM nginx COPY index.html /usr/share/nginx/html/
然后使用以下命令构建镜像:
docker build -t mynginx .
推送镜像
docker push mynginx
一个基本的Dockerfile的结构如下:
# 使用基础镜像 FROM ubuntu:latest # 维护者信息 LABEL maintainer="admin@example.com" # 安装必要的软件 RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ && rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 将代码复制到容器 COPY . /app # 安装项目依赖 RUN pip3 install -r requirements.txt # 暴露端口 EXPOSE 8000 # 定义启动命令 CMD ["python3", "app.py"]
启动容器
docker run -it nginx
停止容器
docker stop container_id_or_name
删除容器
docker rm container_id_or_name
连接容器网络
docker network create mynet docker run --name web1 --network mynet -d nginx docker run --name web2 --network mynet -d nginx
容器间通信
在上面的示例中,web1
和 web2
两个容器可以通过 mynet
网络进行通信,可以使用 curl
或其他网络工具进行测试:
docker exec web1 curl http://web2:80
进入容器
docker exec -it container_id_or_name /bin/bash
查看容器日志
docker logs container_id_or_name
Docker 支持多种网络模式,包括:
docker network create mynet
。数据卷允许容器与宿主机之间共享数据,数据卷可以在容器间共享。
创建数据卷
docker volume create myvol
启动容器并挂载数据卷
docker run -it --name test -v myvol:/data nginx
查看数据卷
docker volume ls
删除数据卷
docker volume rm myvol
Docker Compose 用于定义和运行多容器Docker应用。使用一个docker-compose.yml
文件来配置应用的服务。
创建一个docker-compose.yml
文件,内容如下:
version: '3' services: web: image: nginx ports: - "80:80" volumes: - ./html:/usr/share/nginx/html db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: exampledb volumes: - db_data:/var/lib/mysql volumes: db_data:
使用以下命令启动服务:
docker-compose up -d
创建一个简单的Python Flask应用:
创建一个requirements.txt
文件:
Flask==2.0.1
创建一个app.py
文件:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
创建Dockerfile:
FROM python:3.8-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"]
docker build -t flaskapp .
docker run -p 5000:5000 flaskapp
访问 http://localhost:5000
查看应用是否正常运行。
将容器推送到Docker Hub:
docker login docker tag flaskapp username/flaskapp:latest docker push username/flaskapp:latest
在云服务器上运行:
docker pull username/flaskapp:latest docker run -p 5000:5000 username/flaskapp:latest
--cap-drop
选项限制容器权限。--memory
和 --cpus
选项限制容器的内存和CPU使用。docker stats
查看资源使用情况,优化Dockerfile。通过以上步骤,可以全面掌握Docker的基础概念及其高级应用,实现高效可靠的开发部署流程。