Docker快速入門到實(shí)踐

Docker是什么

Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。

Docker組件(C/S)

? ? Docker Client:Docker的客戶端

? ? Docker Server:Docker daemon的主要組成部分,接收用戶通過Docker Client發(fā)送的請(qǐng)求,并按照相應(yīng)的路由規(guī)則實(shí)現(xiàn)路由分發(fā)。

? ? Docker鏡像:Docker鏡像運(yùn)行之后變成容器。(docker run)

? ? Docker Registry:Registry是Docker鏡像的中央存儲(chǔ)倉庫(pull/push)

? ? 整個(gè)流程:獲取鏡像->根據(jù)鏡像創(chuàng)建容器->在容器內(nèi)創(chuàng)建各種服務(wù)[可以分多個(gè)容器創(chuàng)建]

Docker For Windows安裝

? ? 系統(tǒng)要求:支持虛擬化且WIN10? 10586版本以上且必須先安裝hyper-v

? ? hyper-v屬系統(tǒng)自帶,開啟功能點(diǎn)電腦右下腳-》所有設(shè)置-》應(yīng)用和功能-》程序和功能-》啟用/關(guān)閉windows功能,開啟后需重啟

? ? 需要注意的是,Hyper-v和主流的虛擬機(jī)軟件vmware、virtualbox會(huì)有沖突,所以如果要玩docker,最好放棄vmware和virtualbox

? ? 安裝好Hyper-v后,前去http://www.docker.com/ 下載docker for windows安裝包后進(jìn)行安裝

? ? 安裝好后主設(shè)置界面如下:

鏡像

? ? 下載鏡像

? ? 可以使用docker pull命令來從倉庫獲取所需要的鏡像

? ? 下面的例子將從Docker Hub倉庫下載一個(gè)ubuntu16.04操作系統(tǒng)的鏡像

? ? docker pull ubuntu:16.04 [在國內(nèi)由于網(wǎng)絡(luò)問題這會(huì)很慢或根本下不下來]

? ? 此時(shí)最好換國內(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移除容器]

容器

? ? 與前臺(tái)進(jìn)行交互的容器

? ? 以進(jìn)程方式運(yùn)行在后臺(tái)的容器

? ? 基于鏡像運(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)建一個(gè)docker容器,有時(shí)候會(huì)附帶不少的參數(shù)

? ? 比如:

? ? docker run -d -p 22 -p 8080:8080 ruifengyun/ubunt-redis "redis-server redis.conf && /usr/sbin/sshd -D"

? ? 會(huì)發(fā)現(xiàn)很是麻煩,這個(gè)時(shí)候咱們可以創(chuàng)建編輯一個(gè)dockerfile文件,生成新的image,然后從這個(gè)新的鏡像創(chuàng)建容器,容器里面相關(guān)聯(lián)的啟動(dòng)項(xiàng)和端口,目錄都是提前定義好的

? ? 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)建容器后,會(huì)運(yùn)行的命令

? ? EXPOSE 是暴露的端口

? ? MAINTAINER 通知的郵件

? ? ADD? ? 相當(dāng)于把主機(jī)的start.sh腳本傳遞給了容器里面

? ? VOLUME? 是本地的路徑的映射

? ? WORKDIR 是執(zhí)行的路徑,也就是cmd entrypoint執(zhí)行的路徑

? ? docker build -t beyound/mysql ./

Docker openresty-php7鏡像制作實(shí)戰(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)行

? ? 保存對(duì)容器的修改[提交為鏡像]

? ? 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

? ? 過程略

? ? 此步最終實(shí)現(xiàn)

? ? /etc/init.d/php-fpm stop|start|restart|reload

? ? 系列命令

? ? 指定ip開容器,并且和內(nèi)網(wǎng)在同一個(gè)網(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ī)集群實(shí)戰(zhàn)? [docker對(duì)外以端口的形式暴露]

? ? ? ? ? ? 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

? ? ? ? ? ? 如上面的后臺(tái)方式啟動(dòng)后,可以使用 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容