docker实践与应用举例

以下是一些Docker的实践与应用举例:

一、Web应用开发与部署

  1. 部署Web服务器(以Nginx为例)
    • 构建自定义Nginx镜像
      • 创建一个Dockerfile
# 使用官方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服务。
  1. 部署一个基于Python Flask的Web应用
    • 创建Flask应用
      • 首先创建一个简单的Flask应用app.py
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"]
  • 在包含Dockerfileapp.py的目录下执行docker build -t my - flask - app.构建镜像。
  • 运行Flask容器
    • 使用docker run -d -p 5000:5000 my - flask - app命令将主机的5000端口映射到容器的5000端口,通过主机IP访问Flask应用。

二、数据库管理

  1. 部署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。这样即使容器被删除,数据也能保留在卷中。
  2. 部署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数据库。

三、持续集成与持续部署(CI/CD)

  1. 在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命令的能力。

四、微服务架构

  1. 构建和部署微服务
    • 假设一个简单的电商微服务架构,包含用户服务、产品服务和订单服务。
    • 用户服务
      • 创建一个基于Spring Boot的用户服务项目,构建Docker镜像(类似于前面Flask应用构建镜像的过程),例如docker build -t user - service.
    • 产品服务和订单服务
      • 同样构建各自的Docker镜像,如product - serviceorder - service
    • 使用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命令,就可以同时启动所有的微服务,并且将它们的端口映射到主机的相应端口,方便外部访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值