一、容器化简单的Java应用程序

(1)搭建Maven环境

  • 安装JDK
yum install java-11-openjdk-devel
  • 查看JDK版本
javac --version

在这里插入图片描述

  • 安装Maven软件
    Maven安装官网
    在这里插入图片描述
    下载该软件包,从Windows传输到Linux上
    在这里插入图片描述
  • 解压缩:
tar -zxvf apache-maven-3.9.11-bin.tar.gz

在这里插入图片描述

  • 查看路径(要记下该文件路径)
    如图,我的文件所在路径为/root下
    在这里插入图片描述

  • 建立软链接(注意/root为我的文件所在路径)
    ln -s /root/apache-maven-3.9.11 /root/maven 在这里插入图片描述

  • 编辑环境变量

vi /etc/profile

在最下面添加两段代码即可(/root为我的文件所在路径):

export MAVEN_HOME=/root/maven  
export PATH=$PATH:$MAVEN_HOME/bin

在这里插入图片描述

  • 重新加载文件
source /etc/profile
  • 查看是否安装成功
mvn -v

在这里插入图片描述

(2)创建Java项目并进行构建

  • 创建一个Java项目
mvn archetype:generate -DgroupId=org.examples.java -DartifactId=java-hello -DinteractiveMode=false

在这里插入图片描述

  • 查看目录结构
    该项目创建完成后会自动生成Java项目目录,查看结果如下

在这里插入图片描述

tree java-hello

在这里插入图片描述

  • 修改pom.xml文件
vi java-hello/pom.xml

在< /project >节点下添加以下定义

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

在这里插入图片描述

  • 构建Java项目
cd java-hello
mvn package

在这里插入图片描述

  • 运行所生成的Java类
 java -cp target/java-hello-1.0-SNAPSHOT.jar  org.examples.java.App

在这里插入图片描述

(3)构建镜像并启动容器

  • 在java-hello目录下创建Dockerfile文件,并添加以下内容
FROM openjdk:11
COPY target/java-hello-1.0-SNAPSHOT.jar /usr/src/java-hello-1.0-SNAPSHOT.jar
CMD java -cp /usr/src/java-hello-1.0-SNAPSHOT.jar  org.examples.java.App
  • 构建镜像
docker image build -t java-hello .
  • 运行此镜像并启动容器
docker run --rm java-hello

二、容器化Django应用程序

创建项目目录:django-nginx-uwsgi-mysql
该目录需要配置的文件和目录如下:
在这里插入图片描述

1、配置Nginx服务器

创建nginx目录、文件

  • (1)在项目目录下创建nginx目录,在nginx目录下创建conf子目录,在conf子目录下创建配置文件nginx.conf。
    配置文件内容:
user root;
worker_processes 1;                      
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile           on;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

-(2) 在conf子目录下创建配置文件django-nginx.conf
文件内容:

# 定义 upstream,供 uwsgi_pass 调用
upstream uwsgi {
    server unix:/code/app.sock;   # 与 uWSGI 监听的 socket 路径保持一致
}

server {
    listen      80;
    server_name nginx-srv;       
    charset     utf-8;            # 站点默认编码

    # 允许客户端上传最大 75 M 数据
    client_max_body_size 75M;

    # 静态文件目录
    location /static {
        alias /code/static;      
        index index.html index.htm;
    }

    # 动态请求转发给 uWSGI
    location / {
        uwsgi_pass  uwsgi;                 # 调用上面定义的 upstream
        include     /etc/nginx/uwsgi_params;
    }
}

在这里插入图片描述

2、配置Django与uWSGI

在项目目录下创建django-uwsgi目录

  • (1)创建Dockerfile文件
    在django-uwsgi目录下创建Dockerfile文件
    文件内容
FROM python:3.11.4
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY ./requirements.txt /code
RUN pip install --upgrade pip \
  && pip install -r requirements.txt

在这里插入图片描述

  • (2)创建requirements.txt文件
    文件内容:
# Django 主框架
Django>=4.2.1,<4.3

# 富文本、UI 组件
django-tinymce4-lite
django-bootstrap4
django-jet

# 数据库驱动
mysqlclient==2.1.1

# WSGI 服务器
uWSGI

在这里插入图片描述

  • (3)创建uwsgi.ini文件配置uWSGI服务器
    文件内容:
[uwsgi]
# 监听 unix socket(与 nginx upstream 对应)
socket = /code/app.sock

# 启动主进程管理子进程
master = true

# 工作进程数
processes = 4

# 每个进程的线程数
threads = 2

# Django 项目根目录
chdir = /code

# 项目入口模块 (myexample 为项目名,wsgi.py 中 application 对象)
module = myexample.wsgi:application

# 允许 nginx 对 socket 的读写权限
chmod-socket = 666

# 清理环境变量与临时文件
vacuum = true

# 防止中文文件名乱码
env LANGUAGE="en_US.UTF-8"

3、配置MySQL

在项目目录下创建db目录,在该目录下创建conf目录

  • (1)在conf目录下创建mysql_my.cnf配置文件
    文件内容:
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4

在这里插入图片描述

  • (2)在db目录下创建sqls子目录
mkdir sqls

4、在Compose文件中定义所有服务

在项目目录下创建compose.yaml文件
文件内容:

services:
  db:
    image: mysql/mysql-server:8.0
    restart: always
    environment:
      LANG: "C.UTF-8"
      TZ: "Asia/Shanghai"
      MYSQL_DATABASE: "django"
      MYSQL_ROOT_PASSWORD: "django"
      MYSQL_ROOT_HOST: "%"
    ports:
      - "3306:3306"
    volumes:
      - ./db/conf:/etc/mysql/conf.d   # 自定义 mysql_my.cnf 放入此目录
      - db_data:/var/lib/mysql
    networks:
      - backend

  nginx:
    image: nginx:alpine
    restart: always
    ports:
      - "8000:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf/django-nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./app:/code:ro
      - ./log/nginx:/var/log/nginx
    depends_on:
      - django-uwsgi
    networks:
      - frontend
      - backend

  django-uwsgi:
    build: ./django-uwsgi
    restart: always
    command: uwsgi --ini /etc/uwsgi/uwsgi.ini
    volumes:
      - ./django-uwsgi/uwsgi.ini:/etc/uwsgi/uwsgi.ini:ro
      - ./app:/code
      - ./log/uwsgi:/var/log/uwsgi
    depends_on:
      - db
    networks:
      - backend

volumes:
  db_data:

networks:
  frontend:
  backend:

该项目目录下的内容:
在这里插入图片描述

5、创建并运行应用程序

  • (1)在项目目录下执行命令完成服务构建
docker compose build

在这里插入图片描述

  • (2)创建Django初始项目
docker compose run django-uwsgi django-admin startproject myexample .

在这里插入图片描述

  • (3) 修改Django项目的设置文件
    在该项目目录中的app/myexample/settings.py文件
    在这里插入图片描述

在开始部分添加以下语句:

import os

将其中的"ALLOWED_HOSTS"的值修改如下:

ALLOWED_HOSTS = ['*']

最后将"DATABASES"定义修改如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'root',
        'PASSWORD': 'django',
        'HOST': 'db',
        'PORT': 3306,
    }
}

在这里插入图片描述

  • (4)打开浏览器访问http://127.0.0.1:8000,若出现Django欢迎界面,说明Django应用程序成功部署。

三、谢谢观看!

更多推荐