docker(学习笔记第一课) 使用nginx +https + wordpress

文章目录

  • [docker(学习笔记第一课) 使用nginx +https + wordpress](#docker(学习笔记第一课) 使用nginx +https + wordpress)
  • 学习内容:
    • [1. 整体架构](#1. 整体架构)
      • [1.1 在`aws ec2`的整体架构](#1.1 在aws ec2的整体架构)
      • [1.2 不懂都可以问`AI`](#1.2 不懂都可以问AI)
    • [2. 构建详细](#2. 构建详细)
      • [2.1 构建`ec2`](#2.1 构建ec2)
      • [2.2 安装`docker`](#2.2 安装docker)
      • [2.3 创建一个`docker`的内部`network`](#2.3 创建一个docker的内部network)
      • [2.4 创建`wordpress`使用的`mysql`数据库](#2.4 创建wordpress使用的mysql数据库)
      • [2.5 创建两个`wordpress`的`docker process`](#2.5 创建两个wordpressdocker process)
      • [2.6 创建SSL证书](#2.6 创建SSL证书)
      • [2.7 创建Nginx配置文件](#2.7 创建Nginx配置文件)
        • [2.7.1 创建`nginx.conf`](#2.7.1 创建nginx.conf)
        • [2.7.2 创建Nginx Docker的`image`](#2.7.2 创建Nginx Docker的image)
        • [2.7.3 创建Nginx Docker容器](#2.7.3 创建Nginx Docker容器)
    • [3. 访问`nginx`的网页](#3. 访问nginx的网页)
    • [4. 操作`docker`的有用命令](#4. 操作docker的有用命令)
      • [4.1 访问`docker`的`log`](#4.1 访问dockerlog)
      • [4.2 进入`docker`的进程`process`](#4.2 进入docker的进程process)
      • [4.3 `docker`的内部`directory`映射宿主机的`directory`(`mount`)](#4.3 docker的内部directory映射宿主机的directorymount))
      • [4.4 停止所有容器](#4.4 停止所有容器)
      • [4.5 启动所有容器](#4.5 启动所有容器)
      • [4.6 删除所有容器(数据会保留在卷中)](#4.6 删除所有容器(数据会保留在卷中))
      • [4.7 删除所有数据卷](#4.7 删除所有数据卷)
      • [4.8 `docker compose`](#4.8 docker compose)

docker(学习笔记第一课) 使用nginx +https + wordpress

  • awsec2上安装docker
  • 部署两个wordpressdocker
  • 做成自定义证书certificate

学习内容:

  • 使用docker部署wordpress
  • 生成certificate
  • 使用docker部署nginx

1. 整体架构

1.1 在aws ec2的整体架构

这里采用aws ec2主要是国内的网络上docker的镜像都很少能连接上,所以才使用aws ec2

1.2 不懂都可以问AI

在学习一些新概念的时候可以多问问deepseek

为了先能够清晰了解docker,这里特意告诉AI,先不使用docker compose即使我说错了,AI也能理解意思!

这里,AI给出了一个完整的例子,并且可以使用的具体命令。

2. 构建详细

2.1 构建ec2

这里在awspublic subnet里面构建ec2ip address13.115.188.112

2.2 安装docker

shell 复制代码
sudo yum install docker
sudo systemctl start docker

2.3 创建一个docker的内部network

shell 复制代码
docker network create wordpress-network

2.4 创建wordpress使用的mysql数据库

shell 复制代码
docker run -d \
  --name mysql \
  --network wordpress-network \
  -e MYSQL_ROOT_PASSWORD=rootpassword \
  -e MYSQL_DATABASE=wordpress \
  -e MYSQL_USER=wordpress \
  -e MYSQL_PASSWORD=wordpress \
  -v mysql_data:/var/lib/mysql \
  mysql:5.7
  • -e 这里设定docker启动的环境变量,包括用户名和密码的建立,这里设定好了之后后面的wordpress会使用。
  • -v 设定将docker内部的数据路径设定成docker volume,这里的docker volumn会对宿主机的local directory进行mount。通过这样,宿主机的local directory就会映射到docker内部的路径。
  • --network,这里执行docker内部的network,以便相关的docker ps进程实例能够通过一个网络互相访问。
  • --name是指定docker process的一个识别子,能够唯一定位一个docker process

2.5 创建两个wordpressdocker process

第一个wordpress

shell 复制代码
docker run -d \
  --name wordpress1 \
  --network wordpress-network \
  -e WORDPRESS_DB_HOST=mysql \
  -e WORDPRESS_DB_USER=wordpress \
  -e WORDPRESS_DB_PASSWORD=wordpress \
  -e WORDPRESS_DB_NAME=wordpress \
  -v wordpress_data1:/var/www/html \
  wordpress:latest

第二个wordpress

shell 复制代码
docker run -d \
  --name wordpress2 \
  --network wordpress-network \
  -e WORDPRESS_DB_HOST=mysql \
  -e WORDPRESS_DB_USER=wordpress \
  -e WORDPRESS_DB_PASSWORD=wordpress \
  -e WORDPRESS_DB_NAME=wordpress \
  -v wordpress_data2:/var/www/html \
  wordpress:latest

这里,看出wordpress都使用wordpress-network

2.6 创建SSL证书

shell 复制代码
mkdir -p nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout nginx/ssl/private.key \
    -out nginx/ssl/certificate.crt

这里生成以下两个文件:(/home/ec2-user/nginx/ssl)

  • certificate.crt
  • private.key

2.7 创建Nginx配置文件

2.7.1 创建nginx.conf

/home/ec2-user上创建nginx.conf,这里看到upstream这里,指向wordpress1wordpress280端口。

复制代码
upstream wordpress {
    server wordpress1:80;
    server wordpress2:80;
}

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;

    location / {
        proxy_pass http://wordpress;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}
2.7.2 创建Nginx Docker的image

/home/ec2-user/上执行下面的命令,创建nginx docker

shell 复制代码
mkdir -p temp-nginx
cp nginx.conf temp-nginx/
cp -r nginx/ssl temp-nginx/
# 创建Dockerfile
echo "FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY ssl/ /etc/nginx/ssl/" > temp-nginx/Dockerfile
docker build -t custom-nginx temp-nginx/
# 清理临时文件
rm -rf temp-nginx
2.7.3 创建Nginx Docker容器
shell 复制代码
docker run -d \
  --name nginx \
  --network wordpress-network \
  -p 80:80 \
  -p 443:443 \
  custom-nginx

3. 访问nginx的网页

这里由于是自定义的ssl证书,所以显示是不安全的。如果是本番环境,这里会做成正式的证书。

4. 操作docker的有用命令

4.1 访问dockerlog

shell 复制代码
docker logs -f nginx

其中-f表示一直动态监视log,和tail -f loglinux命令很像。

4.2 进入docker的进程process

想要进入docker所在的OS也是特别方便。

shell 复制代码
sudo docker exec -it wordpress1 bash

4.3 docker的内部directory映射宿主机的directorymount

docker内容的路径指向volume,这些volume实际上是宿主机的directory。即使docker process,这些volume也不会被删除,启动其他docker进行的时候,还能继续利用。

shell 复制代码
sudo docker volume inspect wordpress_data2


4.4 停止所有容器

shell 复制代码
docker stop nginx wordpress1 wordpress2 mysql

4.5 启动所有容器

shell 复制代码
docker start mysql wordpress1 wordpress2 nginx

4.6 删除所有容器(数据会保留在卷中)

shell 复制代码
docker rm nginx wordpress1 wordpress2 mysql

4.7 删除所有数据卷

shell 复制代码
docker volume rm mysql_data wordpress_data1 wordpress_data2

4.8 docker compose

可以进一步学习Docker Compose来简化部署过程。

相关推荐
宋均浩7 小时前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵1 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1111 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽2 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
LinXunFeng3 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
武子康4 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
通信小呆呆7 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick7 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee7 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn867 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker