參考文章: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:///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;"] #當ENTRYPOINT和CMD連用時,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
|