【Docker】应用程序容器化(二)对应用程序进行容器化
·
一、容器化简单的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应用程序成功部署。
三、谢谢观看!
更多推荐
所有评论(0)