---
title: 创建Nginx镜像
description: "创建一个基于Nginx的Docker镜像，用于后续在Docker容器中部署和运行Nginx服务。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengwebs/ecosystemEnable/Nginx/kunpengnginx_04_0007.html
sourcePath: /source/zh/kunpengwebs/ecosystemEnable/Nginx/kunpengnginx_04_0007.html
indexId: 98831bbdbd1a8c6078b986f457234fff64e5467afedf485dfbc8aa4299c4ea9770
---
# 创建Nginx镜像

创建一个基于Nginx的Docker镜像，用于后续在Docker容器中部署和运行Nginx服务。

1. 启动Docker。
  1 2 dockerd & ps -ef | grep docker

2. 查找并下载镜像源。

  - CentOS：
    选择OFFICIAL为OK的版本，此版本为CentOS官方镜像。 1 2 3 docker search centos docker pull centos:7 docker images

  - openEuler 20.03：
    1 2 3 docker search openeuler docker pull openeuler20/origin-pod:v3.11 docker images

若现场环境无法直接联网但可通过设置代理的方式访问外网，则配置好代理服务器环境变量后，需要对Docker进行配置。
配置代理服务器环境变量的具体操作步骤如下：a. 创建目录。
  1 mkdir /etc/systemd/system/docker.service.d/

b. 新建并编辑http-proxy.conf文件。
  1 vim /etc/systemd/system/docker.service.d/http-proxy.conf

c. 按“i”进入编辑模式，添加如下内容。以下参数请根据实际情况修改：youraccount为用户名，password为密码，
  IP Address为代理的IP地址，PORT为代理端口。 1 2 [Service] Environment="HTTP_PROXY=http://youraccount:password@IP Address:PORT"

d. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
e. 重启服务器生效。


若始终无外网权限，可以在有外网权限的服务器中下载相关镜像后，再备份到部署服务器。具体操作步骤如下：

  a. 访问    镜像网站(https://mirrors.tools.huawei.com/openeuler/openEuler-22.03-LTS-SP1/docker_img/)
。
  b. 根据服务器架构下载对应Docker镜像。此处以下载aarch64架构Docker镜像为例。
  c. 将下载好的Docker镜像上传至Server端“/home”目录下。
  d. 在Docker中加载镜像。
    1 docker load -i /home/openEuler-docker.aarch64.tar.xz

    或者

    1 docker load < /home/openEuler-docker.aarch64.tar.xz

  e. 查看加载的镜像。
    1 docker images

3. dockerfile创建镜像。

  a. 创建“dockerfile”目录。
    1 mkdir /home/dockerfile

  b. 将编译并配置好的Nginx及其依赖复制到“dockerfile”目录下。

    - CentOS：
      1 2 3 4 5 6 7 \cp -r /usr/local/nginx /home/dockerfile \cp -r /usr/lib64/perl5 /home/dockerfile \cp -r /usr/local/lib64/perl5 /home/dockerfile/perl5_1 \cp -r /usr/share/perl5 /home/dockerfile/perl5_2 \cp -r /usr/sbin/ifconfig /home/dockerfile \cp -r /usr/sbin/ethtool /home/dockerfile \cp -r /usr/bin/netstat /home/dockerfile

    - openEuler：
      1 2 3 4 5 6 7 8 \cp -r /usr/local/nginx /home/dockerfile \cp -r /usr/lib64/perl5 /home/dockerfile \cp -r /usr/lib64/perl5 /usr/local/lib64/ \cp -r /usr/local/lib64/perl5 /home/dockerfile/perl5_1 \cp -r /usr/share/perl5 /home/dockerfile/perl5_2 \cp -r /usr/sbin/ifconfig /home/dockerfile \cp -r /usr/sbin/ethtool /home/dockerfile \cp -r /usr/bin/netstat /home/dockerfile

  c. 将物理机上的sysctl.conf拷贝到“dockerfile”目录下。
    1 \cp /etc/sysctl.conf /home/dockerfile

  d. 创建Nginx启动脚本。

    1. 新建start.sh脚本文件。
      1 vim /home/dockerfile/start.sh

    2. 写入以下内容。
      1 2 sysctl -p /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
  e. 创建“dockerfile”文件。

    1. 新建文件。
      1 vi /home/dockerfile/dockerfile

    2. 将以下内容写入文件。

      - CentOS：
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 FROM centos:7 USER root WORKDIR /home/ COPY sysctl.conf /etc/ COPY nginx /usr/local/nginx COPY perl5 /usr/lib64/perl5 COPY perl5_1 /usr/local/lib64/perl5 COPY perl5_2 /usr/share/perl5 COPY ifconfig /usr/sbin/ COPY ethtool /usr/sbin/ COPY netstat /usr/sbin/ COPY start.sh /home/ RUN echo 'ulimit -n 102400' >> /etc/profile RUN chmod +x /home/start.sh CMD /home/start.sh && /usr/bin/top

      - openEuler：
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 FROM openeuler20/origin-pod:v3.11 USER root WORKDIR /home/ COPY sysctl.conf /etc/ COPY nginx /usr/local/nginx COPY perl5 /usr/lib64/perl5 COPY perl5_1 /usr/local/lib64/perl5 COPY perl5_2 /usr/share/perl5 COPY ifconfig /usr/sbin/ COPY ethtool /usr/sbin/ COPY netstat /usr/sbin/ COPY start.sh /home/ RUN echo 'ulimit -n 102400' >> /etc/profile RUN chmod +x /home/start.sh CMD /home/start.sh && /usr/bin/top

    3. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
      运行命令说明参考表1。 执行/usr/bin/top的原因：Docker容器后台运行，必须有一个一直挂起的命令（运行top，tail等），否则容器会自动退出。 表1 命令说明 命令 说明 FROM 基于CentOS（即我们下载的镜像）镜像创建镜像。 USER 镜像以root用户运行。 WORKDIR 工作目录为“/home”。 COPY 将物理机上dockerfile目录里的文件拷贝到容器内的相关目录。 RUN 运行相关命令。 CMD 启动容器时运行相关脚本。

  f. 创建镜像。

    - CentOS：
      1 2 3 cd /home/dockerfile docker build -t arm/centos7/nginx:http . docker images | grep arm/centos7/nginx

    - openEuler：
      1 2 3 cd /home/dockerfile docker build -t arm/openeuler20/nginx:http . docker images | grep arm/openeuler20/nginx

- arm/centos7/nginx:http分别为镜像名和tag。
- arm/openeuler20/nginx:http分别为镜像名和tag。
- “.”表示使用当前目录的dockerfile创建镜像。
