使用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访问并显示页面。
■事前準備
・账户
准备一个能够使用容器实例和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存储库。
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来完成。
创建容器实例
接下来我们将创建一个容器实例。
从左上角菜单[Ξ]中选择开发者服务 -> 容器实例。
以上是容器实例的创建完成。
4.对PHP网站的访问测试
为了确认容器实例的PHP是否可以从外部正常显示,从浏览器中访问以下链接:
http://[全局IP]
如果被显示出来,这将是结束。
结束。
我們成功地使用了在OCI上建立的容器實例。