以下是一些Docker的实践与应用举例:
一、Web应用开发与部署
- 部署Web服务器(以Nginx为例)
- 构建自定义Nginx镜像
- 创建一个
Dockerfile
:
- 创建一个
- 构建自定义Nginx镜像
# 使用官方Nginx基础镜像
FROM nginx:latest
# 将本地的自定义配置文件复制到容器中
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露80端口(Nginx默认监听端口)
EXPOSE 80
- 在包含
Dockerfile
的目录下执行docker build -t my - nginx.
来构建名为my - nginx
的镜像。 - 运行Nginx容器
- 使用
docker run -d -p 80:80 my - nginx
命令。其中-d
表示在后台运行容器,-p 80:80
将主机的80端口映射到容器的80端口,这样就可以通过主机的IP地址访问容器中的Nginx服务。
- 使用
- 部署一个基于Python Flask的Web应用
- 创建Flask应用
- 首先创建一个简单的Flask应用
app.py
:
- 首先创建一个简单的Flask应用
- 创建Flask应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
- 构建Docker镜像
- 创建
Dockerfile
:
- 创建
# 使用官方Python基础镜像
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 复制当前目录下的所有文件到容器的/app目录下
COPY. /app
# 安装Flask依赖
RUN pip install flask
# 暴露5000端口(Flask应用监听端口)
EXPOSE 5000
# 运行Flask应用
CMD ["python", "app.py"]
- 在包含
Dockerfile
和app.py
的目录下执行docker build -t my - flask - app.
构建镜像。 - 运行Flask容器
- 使用
docker run -d -p 5000:5000 my - flask - app
命令将主机的5000端口映射到容器的5000端口,通过主机IP访问Flask应用。
- 使用
二、数据库管理
- 部署MySQL数据库
- 运行MySQL容器
- 使用
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql:latest
。这里-e MYSQL_ROOT_PASSWORD=your_password
设置了MySQL的root用户密码,通过-p 3306:3306
将主机的3306端口映射到容器的3306端口,以便从主机访问容器内的MySQL数据库。
- 使用
- 数据持久化
- 可以使用Docker卷来实现数据持久化。例如,先创建一个卷:
docker volume create mysql - data
,然后运行容器时指定卷:docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password -v mysql - data:/var/lib/mysql mysql:latest
。这样即使容器被删除,数据也能保留在卷中。
- 可以使用Docker卷来实现数据持久化。例如,先创建一个卷:
- 运行MySQL容器
- 部署MongoDB数据库
- 运行MongoDB容器
- 使用
docker run -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=your_password mongo:latest
。这里设置了MongoDB的初始root用户和密码,并将主机的27017端口映射到容器的27017端口,从而可以从主机访问MongoDB数据库。
- 使用
- 运行MongoDB容器
三、持续集成与持续部署(CI/CD)
- 在GitLab CI/CD中使用Docker
- 配置
.gitlab - ci.yml
文件- 在项目的根目录下创建
.gitlab - ci.yml
文件,内容示例如下:
- 在项目的根目录下创建
- 配置
stages:
- build
- test
- deploy
build - image:
stage: build
script:
- docker build -t my - app.
tags:
- docker - runner
test - image:
stage: test
script:
- docker run my - app pytest
tags:
- docker - runner
deploy - image:
stage: deploy
script:
- docker push my - app
tags:
- docker - runner
- 这个配置文件定义了构建、测试和部署三个阶段。在构建阶段构建Docker镜像,测试阶段使用构建的镜像运行测试,部署阶段将镜像推送到镜像仓库。其中
docker - runner
是在GitLab中配置的一个运行器,它具有运行Docker命令的能力。
四、微服务架构
- 构建和部署微服务
- 假设一个简单的电商微服务架构,包含用户服务、产品服务和订单服务。
- 用户服务
- 创建一个基于Spring Boot的用户服务项目,构建Docker镜像(类似于前面Flask应用构建镜像的过程),例如
docker build -t user - service.
。
- 创建一个基于Spring Boot的用户服务项目,构建Docker镜像(类似于前面Flask应用构建镜像的过程),例如
- 产品服务和订单服务
- 同样构建各自的Docker镜像,如
product - service
和order - service
。
- 同样构建各自的Docker镜像,如
- 使用Docker Compose编排微服务
- 创建
docker - compose.yml
文件:
- 创建
version: '3'
services:
user - service:
build:
context:.
dockerfile: Dockerfile - user - service
ports:
- 8081:8081
product - service:
build:
context:.
dockerfile: Dockerfile - product - service
ports:
- 8082:8082
order - service:
build:
context:.
dockerfile: Dockerfile - order - service
ports:
- 8083:8083
- 在包含
docker - compose.yml
的目录下执行docker - compose up -d
命令,就可以同时启动所有的微服务,并且将它们的端口映射到主机的相应端口,方便外部访问。