使用OCI容器实例将在Docker上创建的镜像运行

首先

我想在这次尝试中,使用Oracle Cloud Infrastructure(OCI)提供的容器实例来运行Nginx + PHP的Docker容器。

如果要使用容器,可以在虚拟机(计算机)上建立Docker环境并运行,但是专门为此目的设立虚拟机并进行管理也不够智能。
如果使用容器实例,既不需要付出太多的努力,也可以进行利用,
我想介绍一下相关简单的步骤。

■参考
容器实例概述
https://docs.oracle.com/ja-jp/iaas/Content/container-instances/overview-of-container-instances.htm

OCI容器实例概述 / OCI容器实例

在本地环境中设置Docker容器以使其能够运行Nginx + PHP,并将映像推送到OCIR(Oracle云基础设施注册表)。然后,通过创建容器实例从该映像中检查是否可以通过外部URL访问并显示页面。

image.png

■事前準備
・账户
准备一个能够使用容器实例和OCIR的OCI账户。

为了访问OCIR,准备认证令牌。

認證令牌的創建方法可以參考這裡。
https://oracle-japan.github.io/ocitutorials/cloud-native/functions-for-beginners/
→ 2-1-1. 認證令牌的創建

在网络中进行设置,
创建Virtual Cloud Network(VCN)、公共子网、互联网网关,
并创建安全列表等,使其能够通过HTTP(端口80)从互联网访问。

关于创建网络的方法,请参考以下链接:
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/

预先在本地PC环境中设置Docker。

关于Docker的信息,请参考以下链接:
https://docs.docker.jp/v1.9/docker-hub/index.html

◆目录
1. 在Oracle Cloud Infrastructure Registry(OCIR)中创建存储库
2. 在本地PC环境中创建Docker映像并推送至OCIR
3. 创建容器实例
4. 对PHP网站进行访问测试

在Oracle Cloud基础设施注册表(OCIR)中创建代码库。

那么,我们马上开始创建OCIR存储库。

image.png
image.png
image.png
image.png

OCIR存储库的创建已经完成。

2. 在本地PC环境中创建Docker镜像,并将其推送到OCIR。

在这里,我们将创建一个在本地PC环境下运行的Nginx + PHP的Docker镜像。
工作用的PC可以是Windows,Linux,Mac,都可以。
特别是配置不是问题,只要准备一个能够运行Docker的环境即可。
※我是通过ssh远程连接到OCI上的Oracle Linux进行操作的。
(请根据您自己的环境进行命令等细节配置)

当登录工作环境后,我们要创建目录和文件。

■文件结构/目录结构

my-php-app/
 |- Dockerfile
 |- custom-nginx.conf
 |- src/
     |- index.php
 |- start.sh

■任务执行流程

登录工作环境后,在任意位置创建两个目录,并切换到my-php-app目录。

mkdir my-php-app
mkdir my-php-app/src
cd my-nginx-app

从现在开始,在my-php-app内进行工作。

创建 Dockerfile
下载一个可以在 Nginx 上运行 PHP 的镜像
编写 Dockerfile 内容,使其可以启动。

vi Dockerfile
# PHPとNginxを含むベースイメージを使用
FROM php:7.4-fpm

# Nginxをインストール
RUN apt-get update && apt-get install -y nginx

# Nginxの設定ファイルをコンテナにコピー
COPY custom-nginx.conf /etc/nginx/sites-available/default

# PHPファイルをコンテナにコピー
COPY src/ /var/www/html/

# スタートアップスクリプトをコンテナにコピー
COPY start.sh /start.sh

# スタートアップスクリプトに実行権限を与える
RUN chmod +x /start.sh

# コンテナ起動時にスタートアップスクリプトを実行
CMD ["/start.sh"]

创建custom-nginx.conf文件以使PHP正常运行。

vi custom-nginx.conf
server {
    listen 80;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000;
    }
}

创建一个shell脚本以启动PHP。

vi start.sh
#!/bin/bash

# PHP-FPMをデーモンとして起動
php-fpm -D

# Nginxを起動
nginx -g 'daemon off;'

为了确认PHP是否正常运行,我们将创建一个简单的phpinfo()页面。

vi src/index.php
<?php
phpinfo();

在这里所需的文件创建已经完成。

完成文件创建后,直接执行构建,将生成映像。

docker build --no-cache -t my-php-app .

我将确认是否已创建映像。
您可以使用docker images进行确认。

docker images

运行时会显示如下:
通过这可以确认图像已经成功创建。

REPOSITORY                              TAG       IMAGE ID       CREATED          SIZE
my-php-app                              latest    70e29d706da8   24 minutes ago   490MB

使用以下命令创建一个容器,可以通过80端口访问。

docker run -d -p 80:80 my-nginx-php-app

我会尝试确认是否已经创建了容器。
您可以使用`docker ps`命令进行确认。

docker ps

运行后会以这样的方式显示。
这样你就可以确认容器已经成功创建了。

CONTAINER ID   IMAGE        COMMAND                  CREATED       STATUS       PORTS                                         NAMES
2299cf21c484   my-php-app   "docker-php-entrypoi…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 9000/tcp   sharp_lewin

我们已经成功地使用前面提到的命令创建了镜像和容器,但为了确保,我们将使用curl来验证PHP的响应。

curl localhost/index.php

如果没有错误并且显示了HTML标签,说明容器已经成功创建。

通过运行以下命令,可以登录到OCIR。
docker login [区域键值].ocir.io
※如果是东京区域,则为nrt.ocir.io。

docker login nrt.ocir.io

执行以上操作时,会要求输入用户和密码。
用户:[租户名称]/oracleidentitycloudservice/[用户名]
密码:※预先准备好的身份验证令牌
※此处假设用户为IDCS。

例如,如果租户名为ABC,用户名称为XYZ。

ユーザ: ABC/oracleidentitycloudservice/XYZ
パスワード: [認証トークン]

给图像打标签的方法如下:
docker tag [图像名称]:latest [区域密钥].ocir.io/[租户名称]/[OCIR仓库名称]:latest

docker tag my-php-app:latest nrt.ocir.io/[テナンシー名]/oci-my-php-app:latest

用OCIR推送图像
推送图像并完成。

docker push nrt.ocir.io/[テナンシー名]/oci-my-php-app:latest

我们可以通过将以上的Docker镜像推送到OCIR来完成。

创建容器实例

接下来我们将创建一个容器实例。
从左上角菜单[Ξ]中选择开发者服务 -> 容器实例。

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

以上是容器实例的创建完成。

4.对PHP网站的访问测试

为了确认容器实例的PHP是否可以从外部正常显示,从浏览器中访问以下链接:
http://[全局IP]

image.png

如果被显示出来,这将是结束。

结束。

我們成功地使用了在OCI上建立的容器實例。

广告
将在 10 秒后关闭
bannerAds