Docker是什么
Docker 是一個開源的應(yīng)用容器引擎盹愚,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中伤柄,然后發(fā)布到任何流行的 Linux 機(jī)器上哪雕,也可以實現(xiàn)虛擬化郭赐。容器是完全使用沙箱機(jī)制,相互之間不會有任何接口宙帝。
Docker組件(C/S)
? ? Docker Client:Docker的客戶端
? ? Docker Server:Docker daemon的主要組成部分丧凤,接收用戶通過Docker Client發(fā)送的請求,并按照相應(yīng)的路由規(guī)則實現(xiàn)路由分發(fā)步脓。
? ? Docker鏡像:Docker鏡像運(yùn)行之后變成容器愿待。(docker run)
? ? Docker Registry:Registry是Docker鏡像的中央存儲倉庫(pull/push)
? ? 整個流程:獲取鏡像->根據(jù)鏡像創(chuàng)建容器->在容器內(nèi)創(chuàng)建各種服務(wù)[可以分多個容器創(chuàng)建]
Docker For Windows安裝
? ? 系統(tǒng)要求:支持虛擬化且WIN10? 10586版本以上且必須先安裝hyper-v
? ? hyper-v屬系統(tǒng)自帶浩螺,開啟功能點電腦右下腳-》所有設(shè)置-》應(yīng)用和功能-》程序和功能-》啟用/關(guān)閉windows功能,開啟后需重啟
? ? 需要注意的是仍侥,Hyper-v和主流的虛擬機(jī)軟件vmware要出、virtualbox會有沖突,所以如果要玩docker农渊,最好放棄vmware和virtualbox
? ? 安裝好Hyper-v后患蹂,前去http://www.docker.com/ 下載docker for windows安裝包后進(jìn)行安裝
? ? 安裝好后主設(shè)置界面如下:
鏡像
? ? 下載鏡像
? ? 可以使用docker pull命令來從倉庫獲取所需要的鏡像
? ? 下面的例子將從Docker Hub倉庫下載一個ubuntu16.04操作系統(tǒng)的鏡像
? ? docker pull ubuntu:16.04 [在國內(nèi)由于網(wǎng)絡(luò)問題這會很慢或根本下不下來]
? ? 此時最好換國內(nèi)鏡像或采用加速器,國內(nèi)的daoclud.io提供專業(yè)的免費(fèi)解決方案砸紊,如下圖传于,更換加速器[http://f71fa5d4.m.daocloud.io],即可保證下載速度
? ? 然后重新下載鏡像
? ? docker pull daocloud.io/ubuntu:16.04
? ? 查看鏡像
? ? docker images
移除鏡像
? ? docker rmi容器ID[如鏡像有被容器使用則需先用docker rm移除容器]
容器
? ? 與前臺進(jìn)行交互的容器
? ? 以進(jìn)程方式運(yùn)行在后臺的容器
? ? 基于鏡像運(yùn)行容器
? ? docker run -t -i daocloud.io/ubuntu /bin/bash
? ? docker ps -a ?列出所有容器
? ? docker logs ?顯示容器的標(biāo)準(zhǔn)輸出
? ? docker stop 停止容器
使用Dockerfile創(chuàng)建鏡像并運(yùn)行容器
? ? 簡單的說:以前docker run創(chuàng)建一個docker容器批糟,有時候會附帶不少的參數(shù)
? ? 比如:
? ? docker run -d -p 22 -p 8080:8080 ruifengyun/ubunt-redis "redis-server redis.conf && /usr/sbin/sshd -D"
? ? 會發(fā)現(xiàn)很是麻煩格了,這個時候咱們可以創(chuàng)建編輯一個dockerfile文件看铆,生成新的image徽鼎,然后從這個新的鏡像創(chuàng)建容器,容器里面相關(guān)聯(lián)的啟動項和端口弹惦,目錄都是提前定義好的
? ? cat Dockerfile
? ?```
? ? FROM daocloud.io/mysql
? ? # Write Permission
? ? RUN usermod -u 1000 mysql && chown mysql.mysql /var/run/mysqld/
? ? EXPOSE 3306
? ? VOLUME ["/opt"]
? ? ```
? ? FROM? 是作為基礎(chǔ)的鏡像
? ? RUN? ? 可以理解為在FROM下來的鏡像做一些環(huán)境的部署
? ? CMD? ? 是創(chuàng)建容器后否淤,會運(yùn)行的命令
? ? EXPOSE 是暴露的端口
? ? MAINTAINER 通知的郵件
? ? ADD? ? 相當(dāng)于把主機(jī)的start.sh腳本傳遞給了容器里面
? ? VOLUME? 是本地的路徑的映射
? ? WORKDIR 是執(zhí)行的路徑,也就是cmd entrypoint執(zhí)行的路徑
? ? docker build -t beyound/mysql ./
Docker openresty-php7鏡像制作實戰(zhàn)[openresty+php7環(huán)境]
? ??下載官方centos鏡像 [基于官方docker centos7鏡像]
? ? docker pull daocloud.io/library/centos
? ? docker images
? ? docker run -t -v E:/FangCloudSync:/data -i daocloud.io/centos /bin/bash? #-v表示掛載目錄棠隐,需在docker設(shè)置里掛載盤符才可正確運(yùn)行
? ? 保存對容器的修改[提交為鏡像]
? ? docker commit ca01 openresty-php7
? ? 下次可以命令 docker run -t -v E:/FangCloudSync:/data -i openresty-php7 /bin/bash 初始化并進(jìn)入容器
? ? 進(jìn)入已存在的容器
? ? docker start 4a78a7c12bbf
? ? docker attach 4a78a7c12bbf
? ? 導(dǎo)出和導(dǎo)入鏡像
? ? 導(dǎo)出:docker save -o openresty-php7.tar openresty-php7
? ? 導(dǎo)入:docker load < openresty-php7.tar
? ? 安裝openresty及php7
? ? 過程略
? ? 此步最終實現(xiàn)
? ? /etc/init.d/php-fpm stop|start|restart|reload
? ? 系列命令
? ? 指定ip開容器石抡,并且和內(nèi)網(wǎng)在同一個網(wǎng)段
? ? 1.創(chuàng)建docker的網(wǎng)絡(luò)
? ? ? ? docker network create --subnet=172.10.0.0/16 shadownet
? ? 2.容器內(nèi)打開包轉(zhuǎn)發(fā)
? ? ? ? echo 1 > /proc/sys/net/ipv4/ip_forward
? ? 3.開服務(wù)器測試
? ? ? ? docker run -itd --net shadownet --ip 172.10.89.3 --name web --hostname nginx openresty-php7 /bin/bash
? ? 4.docker下nginx + php多機(jī)集群實戰(zhàn)? [docker對外以端口的形式暴露]
? ? ? ? ? ? nginx:docker run -p 80:80 -itd --net shadownet --ip 172.10.89.3 --name web --hostname nginx -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/web/web.sh
? ? ? ? ? ? php1:docker run -itd --net shadownet --ip 172.10.89.4 --name php1 --hostname php1 -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/php/php.sh
? ? ? ? ? ? php2:docker run -itd --net shadownet --ip 172.10.89.5 --name php2 --hostname php2 -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/php/php.sh
? ? ? ? ? ? php3:docker run -itd --net shadownet --ip 172.10.89.6 --name php3 --hostname php3 -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/php/php.sh
? ? ? ? ? ? 如上面的后臺方式啟動后,可以使用 docker exec -it web bash進(jìn)入系統(tǒng)
? ? ? ? ? ? [windows下:winpty docker exec -it web bash]
? ? Tips:[Docker為什么剛運(yùn)行就退出了?]
? ? http://blog.csdn.net/meegomeego/article/details/50707532
? ? 因而此處/data/Work/Docker/php/php.sh寫法如下
? ? 主機(jī)IP在哪:
? ? 本文涉及的openresty-php7鏡像包下載地址:
? ? ? ? ? ? ? ? ? ?鏈接:http://pan.baidu.com/s/1dFjHV3r 密碼:zm1f