Docker相关使用及配置
快来试试一键式傻瓜分发,做一个docker领域大神吧!在软件开发的过程中,但凡遇到了CI/CD的概念,就离不开Docker。
Docker基本概念
1. Docker 简介
Docker 是一种开源的容器化技术,可以将应用程序及其所有依赖打包成一个可移植的容器。通过 Docker,可以确保应用在不同环境(开发、测试、生产)中运行一致性,解决“在我电脑上可以运行”的问题。
2. Docker 的基本概念
- 镜像(Image):
- 类似于应用程序的模板,包含了运行应用所需的所有环境(如操作系统、运行时、库、应用程序代码等)。
- 镜像是不可变的,类似于虚拟机的快照。
- 容器(Container):
- 基于镜像创建的实例化运行环境。每个容器是一个独立的沙盒,包含应用和所有依赖。
- 容器是轻量级的,启动速度快,占用资源少。
- Dockerfile:
- 一种脚本文件,用于定义如何构建镜像(包含操作系统、依赖安装、程序代码等)。
- 类似于虚拟机的配置文件。
- Docker Hub:
- 一个公共的镜像存储库,类似于代码托管平台(如 GitHub)。可以从 Docker Hub 下载或推送镜像。
- 网络(Network):
- Docker 提供了容器间通信的功能,允许容器通过网络互联。
- 默认的网络模式是
bridge
,所有容器连接到一个虚拟网桥。
- 卷(Volume):
- 用于数据持久化,将容器内部的数据保存到宿主机的文件系统中,避免容器删除后数据丢失。
3. Docker 的基本操作
镜像相关
拉取镜像:
docker pull <镜像名>:<标签>
示例:
docker pull python:3.9
查看本地镜像:
docker images
删除镜像:
docker rmi <镜像ID>
容器相关
运行容器:
docker run -d -p 8000:8000 <镜像名>
参数说明:
-d
:后台运行容器。-p
:将容器的端口映射到主机端口(如8000:8000
)。示例:
docker run -d -p 8080:80 nginx
查看运行中的容器:
docker ps
查看所有容器(包括已停止的):
docker ps -a
停止容器:
docker stop <容器ID>
删除容器:
docker rm <容器ID>
其他命令
进入容器:
docker exec -it <容器ID> /bin/bash
示例:
docker exec -it my-container /bin/bash
查看容器日志:
docker logs <容器ID>
清理未使用的镜像和容器:
docker system prune -a
Docker部署
1. Dockerfile 的作用
Dockerfile 是什么?
Dockerfile 是一份文本文件,用于定义如何构建一个 Docker 镜像。它包含了镜像的基础镜像、依赖安装、文件复制、运行命令等信息。
Dockerfile 的基本结构
以下是一个标准的 Dockerfile 示例:
# 使用官方基础镜像
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制项目依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY app/ ./app
# 暴露应用端口
EXPOSE 8000
# 运行应用程序
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Dockerfile 中的关键指令
FROM
:指定基础镜像(如python:3.11-slim
)。WORKDIR
:设置容器内的工作目录。COPY
:将本地文件复制到镜像中。RUN
:在镜像构建时运行命令(如安装依赖)。EXPOSE
:声明容器会使用的端口。CMD
:指定容器启动时运行的命令。
2. Docker Compose 的作用
Docker Compose 是什么?
Docker Compose 是一个工具,用于定义和管理多容器应用程序。通过 docker-compose.yml
文件,可以用简单的命令启动一组相关的容器。
Docker Compose 文件示例
以下是一个示例 docker-compose.yml
文件,用于部署一个包含单个服务的应用:
version: '3.8'
services:
simon_says:
build: .
container_name: simon_says_app
ports:
- "8000:8000"
environment:
- PYTHONUNBUFFERED=1
关键部分解释:
services
: 定义一组容器服务。build
: 指定构建上下文(当前目录.
)。container_name
: 指定容器的名称。ports
: 定义主机和容器端口的映射(如8000:8000
)。environment
: 配置环境变量。
3. Docker 发布与部署流程
3.1 本地构建与测试
编写 Dockerfile:确保
Dockerfile
文件正确,定义好应用的构建和运行步骤。构建镜像
docker build -t simon_says:latest .
运行容器
docker run -d -p 8000:8000 simon_says:latest
测试应用:通过浏览器或命令行访问 http://localhost:8000。
3.2 使用 Docker Compose
**编写
docker-compose.yml
**:确保服务和端口配置正确。启动服务
docker-compose up -d
测试应用:同样访问 http://localhost:8000。
3.3 发布镜像到 Docker Hub
登录 Docker Hub
docker login
给镜像打标签
docker tag simon_says:latest yourusername/simon_says:latest
推送到 Docker Hub
docker push yourusername/simon_says:latest
3.4 远程部署
在远程服务器上拉取镜像
docker pull yourusername/simon_says:latest
运行镜像
- 直接运行
docker run -d -p 8000:8000 yourusername/simon_says:latest
使用 Docker Compose:
version: '3.8' services: simon_says: image: yourusername/simon_says:latest ports: - "8000:8000"
docker-compose up -d
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZCP妙妙屋!