Docker 制作Nginx鏡像


參考文章:https://www.jianshu.com/p/dc4cd0547d1e

   

鏡像的制作方式有兩種,一種是下載別人的鏡像之后再制作成自己的鏡像,一種是從頭開始制作自己的鏡像

第一種,下載別人的鏡像來修改。

安全起見下載官方的centos系統鏡像,在該系統內安裝nginx之后,在封裝成鏡像

下載centos系統鏡像

docker pull centos

使用鏡像啟動容器並進入容器

docker run -it --name centos.nginx centos /bin/bash

安裝epel源和nginx

yum install epel-release -y

yum install nginx -y

   

   

配置nginx為前台啟動模式

在nginx的配置文件中加入如下參數

vi /etc/nginx/nginx.conf

daemon off;

使用exit退出容器,然后使用docker commit命令制作鏡像

查看容器

docker ps -a

制作鏡像

docker commit -m "nginx" -a "centos-nginx" -c 'CMD ["/usr/sbin/nginx"]' 86ae1d7284e3 centos-nginx

-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;

-a 可以指定更新的用戶信息;之后是用來創建鏡像的容器的 ID;最后指定目標鏡像的倉庫名和 tag 信息。創建成功后會返回這個鏡像的 ID 信息;

-c 制作鏡像之后執行的命令

86ae1d7284e3 容器ID,就是希望將哪個容器重新制作

centos-nginx 制作之后的鏡像名稱

使用新鏡像啟動容器

先查看鏡像

docker images

使用新鏡像啟動容器

docker run --name nginx -p 8888:80 -d centos-nginx

--name nginx 為容器定義名稱,名稱為nginx

-p 8888:80 將宿主機的8888端口映射到容器內的80端口

-d 指定該容器在后天運行

cetnos-nginx 指定使用centos-nginx鏡像來創建容器

使用瀏覽器訪問容器內的nginx

第二種,全新制作自己的容器使用Dockerfile文件

Dockerfile是使用源代碼構建docker的鏡像,編輯一個Dockerfile,而后根據此文件制作;

docker可以自動通過讀取Dockerfile中的指令,自動構建鏡像。

Dockerfile是一個文本文檔包含所有用戶的命令,可以在命令行上調用組建一個鏡像。

使用docker build命令的用戶可以讀取docker file中的連續指令,自動構建一個鏡像。

   

示例使用dockerfile文件制作nginx的鏡像:

#創建工作目錄
mkdir nginx

#進入nginx目錄,創建nginx測試頁,創建dockerfile文件

cd nginx/

vim index.html
<h1> nginx test page </h1>

vim dockerfile

#dockerfile 文件內容開始

FROM centos:latest #基准鏡像
MAINTAINER "Withdocker" #作者信息
WORKDIR /usr/local/src/ #工作目錄
ENV NG_VERSION nginx-1.16.0 #定義環境變量
RUN yum -y install epel-release #安裝epel倉庫
RUN yum -y install wget && wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz #下載nginx文件並解壓
#安裝編譯依賴包
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
RUN yum clean all #清理倉庫
RUN useradd -M -s /sbin/nologin nginx #創建nginx用戶
WORKDIR /usr/local/src/$NG_VERSION #切換工作目錄
#編譯安裝nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
ADD index.html /usr/local/nginx/html #復制測試頁面到容器中
VOLUME /usr/local/nginx/html #設置容器中要掛在到宿主機的目錄
ENV PATH /usr/local/nginx/sbin:$PATH #設置sbin環境變量
EXPOSE 80/tcp #暴露80端口
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
#ENTRYPOINTCMD連用時,CMD的命令是ENTRYPOINT命令的參數,兩者連用相當於nginx -g "daemon off;"而當一起連用的時候命令格式最好一致(這里選擇的都是json格式的是成功的,如果都是sh模式可以試一下)

#dockerfile 文件內容結束

#構建鏡像
docker build ./ -t mynginx

#指明構建的根目錄,有dockerfile的就是構建根目錄,-t指明tag標簽,執行該命令后程序會讀取並執行dockerfile文件內的所有命令。下圖為執行成功的結果截圖。

查看鏡像

docker images

#根據構建的鏡像運行容器
docker run --name mynginx -d -p 8123:80 mynginx

#查看容器
docker ps

#訪問nginx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM