windows下docker的安裝與鏡像的制作提交


前言:

    作為一個開發人員,每每在更換電腦或重裝系統時,要重新安裝開發工具搭建開發環境。所以有的人會封裝一下系統(這里指windows),將平時用到的環境和工具全安裝在里面,改改OEM,以后換了電腦就直接拿封裝的系統安裝就方便很多。
    同樣但也不一樣的,在開發完的應用程序在需要更換IDC或者部署分布式時。針對應用又要重新搭建環境,安裝軟件依賴等等。所以這時候可以將應用軟件以及環境依賴一並作為docker鏡像,部署的時候直接拉取鏡像,啟動后為容器就可以正常運行了。

 

Docker簡介:

    Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

 

Docker與虛擬機的區別:

    上面系統封裝與鏡像制作,我說過兩者有相同但也一點不同。所以就以我的理解簡單介紹一下Docker與虛擬機的區別。網上也有很多詳細介紹兩者架構的原理及原理圖,這里就略過原理直接說差異。

使用場景:Docker適合隔離應用,虛擬機能隔離用戶(更能隔離應用),因為有獨立完整的操作系統。

技術方面:虛擬機是通過虛擬化硬件並CPU要支持虛擬化技術,Docker容器只是在宿主操作系統上開啟了Docker引擎,比如一個CentOS鏡像是一套文件系統,引擎將容器放入到一個進程中並相互隔離。各個容器共用同一套操作系統資源,不需要虛擬化硬件,啟動快速。

 

Docker的安裝:

    在windows下有兩個工具, docker toolbox 針對win7, win8,工具集合了Virtual Box(虛擬機軟件),Kitematic(docker圖形化軟件),和其他幾個命令終端工具。針對win10的是  Docker for Windows Installer 。

    安裝完畢后點擊Docker Quickstart啟動 Docker Toolbox 終端。命令執行會先在Virtualbox創建一個名字為default的CentOS虛擬機並安裝了Docker。CentOS默認賬號docker, 密碼tcuser,Ip在啟動toolbox時在命令板上顯示,可以通過Xshell連接。

 

鏡像下載&容器使用

    最簡單的就是打開Kitematic工具,網絡正常時會展示主流的鏡像,選擇其中一個點擊“create”就會下載並在左側欄啟動容器。容器的啟動和停止重啟在圖形化界面中也很方便地操作。下面就下載PHP和 Nginx並運行在瀏覽器打開。

 

1. nginx,php容器設置與使用

server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root /var/www; index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?/$1 last; } } location ~ \.php { root /var/www; fastcgi_pass 192.168.99.100:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /var/www/index.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 192.168.99.100:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } 

 

2. 鏡像的制作

鏡像制作就需要使用 Dockerfile ,類似PHP項目中的composer.json,用於構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

這里僅講解如何運行 Dockerfile 文件來定制一個鏡像,具體 Dockerfile 文件內指令詳解,將在下一節中介紹,這里你只要知道構建的流程即可。

(1)、下面以定制一個 nginx 鏡像(構建好的鏡像內會有一個 /usr/share/nginx/html/index.html 文件)

在一個空目錄下,新建一個名為 Dockerfile 文件,並在文件內添加以下內容:

FROM nginx
RUN echo '這是一個本地構建的nginx鏡像' > /usr/share/nginx/html/index.html

(2)、FROM 和 RUN 指令的作用

FROM:定制的鏡像都是基於 FROM 的鏡像,這里的 nginx 就是定制需要的基礎鏡像。后續的操作都是基於 nginx。

RUN:用於執行后面跟着的命令行命令。有以下倆種格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同於,在終端操作的 shell 命令。

exec 格式:

RUN ["可執行文件", "參數1", "參數2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等價於 RUN ./test.php dev offline

注意:Dockerfile 的指令每執行一次都會在 docker 上新建一層。所以過多無意義的層,會造成鏡像膨脹過大。例如:

FROM centos
RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz 以上執行會創建 3 層鏡像。可簡化為以下格式: FROM centos RUN yum install wget \     && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \     && tar -xvf redis.tar.gz 如上,以 && 符號連接命令,這樣執行后,只會創建 1 層鏡像。

在 Dockerfile 文件的存放目錄下,執行構建動作。

以下示例,通過目錄下的 Dockerfile 構建一個 nginx:test(鏡像名稱:鏡像標簽)。

注:最后的 . 代表本次執行的上下文路徑,下一節會介紹。

$ docker build   -t  nginx:test .

以上顯示,說明已經構建成功。

$ docker build   -t  nginx:test .
 

鏡像上傳到遠程鏡像庫

1. 首先在docker hub官網注冊一個賬號,然后可以正在登陸,Kitematic 也可以登陸試試。

 

2.  打開docker cli命令面板,輸入docker login,輸入docker hub賬號密碼后,顯示login success后,就可以准備自己本地的鏡像文件了。

 

3.  docker images查看本地的所有鏡像文件,記住鏡像完整名稱,然后給要提交的鏡像加標簽,這時會生成兩個鏡像ID一樣的鏡像文件。然后通過docker push 完整的鏡像文件:包括標簽名,最后就可以推送到自己的鏡像庫了。

 

上傳至阿里雲鏡像庫

1. 首先有阿里雲賬戶,登錄成功后開通"容器鏡像服務",設置賬號密碼,並建立空間和倉庫,點擊管理可以看到登錄,拉取,推送的命令。

2. 同樣的方式打開docker cli命令面板或者xshell連接docker中登錄阿里鏡像賬號,同樣的方式找到本地做好的鏡像然后推送。

 

3. 拉取docker hub和阿里鏡像都通過 docker pull 完整的鏡像名,就可以拉取到本地,然后通過docker images查看。

 


免責聲明!

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



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