大家好,我是小白说搅。上文中給白白們講解了docker的入門知識炸枣,今天講解一下docker的干活,常規(guī)以及高級用法吧弄唧。
下面以自定義啟動一臺nginx server為例為大家延時一下docker的魅力吧~
一适肠、鏡像使用
鏡像是 Docker 的三大組件之一。
Docker 運行容器前需要本地存在對應的鏡像候引,如果鏡像不存在本地侯养,Docker 會從鏡像倉庫下載(默認是 Docker Hub 公共注冊服務器中的倉庫),我們也可以搭建一個本地的鏡像倉庫比如docker registry或者harbor等澄干。
默認社區(qū)docker hub已經(jīng)提供了很豐富的鏡像逛揩,比如直接docker pull nginx 即可,這里以自定義diy一下nginx鏡像為例嘗試一下吧麸俘。
下載鏡像
#docker pull centos:7
使用Dockerfile自定義build鏡像
#vim nginx.dockerfile
FROM centos:7
#使用aliyun repo源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install nginx
#定義向外暴露的端口號,多個端口用空格做間隔,啟動容器的時候"-p"需要使用此端向外端映射.
EXPOSE 80/tcp 443/tcp
#定義前臺運行的命令,每個Docker只能有一條辩稽,如果定義了多條"CMD"指令那么最后一條CMD指令會覆蓋之前的(即只有最后一條CMD被執(zhí)行).
CMD [ "nginx", "-g", "daemon off;" ]
#docker build -t mynginx:latest -f nginx.dockerfile .
二、數(shù)據(jù)存儲
通常情況下从媚,我們是不會在容器中存儲數(shù)據(jù)的逞泄。我們會掛載一個主機的文件夾作為數(shù)據(jù)卷到容器中去,該數(shù)據(jù)卷可以被許多需要訪問的容器訪問得到拜效。數(shù)據(jù)卷可以將本地的磁盤數(shù)據(jù)和docker容器鏈接起來喷众,使用容器的應用加載本地的數(shù)據(jù),這樣就很方便我們的開發(fā)紧憾。而且可以保持數(shù)據(jù)持久化到千,當將容器刪除時,數(shù)據(jù)不會丟失赴穗。父阻,同時也增強來應用的可移植性(不改變?nèi)萜髋渲茫?/p>
Docker內(nèi)部以及容器之間管理數(shù)據(jù)愈涩,在容器中管理數(shù)據(jù)主要有兩種方式(掛載宿主機目錄或掛載docker volume的方式):
-v=[]:? ? ? ? ? ? ? ? ?Create a bind mount with: [host-dir]:[container-dir]:[rw|ro].
? ? ? ? ? ? ? ? ? ? ? ?If "container-dir" is missing, then docker creates a new volume.
--volumes-from="":? ? ?Mount all volumes from the given container(s)
創(chuàng)建volume
#docker volume create data
掛載volume使用
#docker **** -v data:/usr/share/nginx/html *****
三、網(wǎng)絡相關
安裝Docker時加矛,它會自動創(chuàng)建三個網(wǎng)絡履婉,bridge(創(chuàng)建容器默認連接到此網(wǎng)絡)、 none 斟览、host
我們在使用docker run創(chuàng)建Docker容器時毁腿,可以用 --net 選項指定容器的網(wǎng)絡模式,Docker可以有以下4種網(wǎng)絡模式:
????host模式:使用 --net=host 指定苛茂。
????none模式:使用 --net=none 指定已烤。
????bridge模式:使用 --net=bridge 指定,默認設置妓羊。
????container模式:使用 --net=container:NAME_or_ID 指定胯究。
四、資源限制
默認情況下躁绸,容器是沒有資源限制的裕循,它會盡可能地使用宿主機能夠分配給它的資源。Docker提供了一種控制分配多少量的內(nèi)存净刮、CPU或阻塞I/O給一個容器的方式剥哑,即通過在docker run或docker create命令時設置運行時配置的標志。
1. 限制內(nèi)存使用
在Docker中可以強行限制容器的資源使用的限制淹父,即只允許容器使用不超過給定數(shù)量的系統(tǒng)內(nèi)存或其他軟限制株婴。下面介紹幾個最常用的選項,我們可以在docker run或docker create創(chuàng)建容器時指定暑认,用以限制容器的資源使用限制困介。
2. 限制CPU使用
默認情況下,每個容器對主機CPU周期的訪問權限是不受限制的蘸际。我們可以設置各種約束來限制給定容器訪問主機的CPU周期逻翁。大多數(shù)用戶使用和配置CFS調(diào)度程序(默認)或?qū)崟r調(diào)度程序。下面介紹幾個常用的選項捡鱼,用于配置默認的CFS調(diào)度程序,以限制容器對于CPU的使用酷愧。
五驾诈、示例
使用制作的nginx 鏡像,對外提供WEB服務吧~
創(chuàng)建volume用于保存網(wǎng)頁數(shù)據(jù)
#docker volume create nginx_code
#echo 'my web' > /var/lib/docker/volumes/nginx_code/_data/index.html
使用默認網(wǎng)絡溶浴,并轉(zhuǎn)發(fā)80端口到宿主機80端口乍迄,-d 后臺運行
#docker run -d -it --net=bridge? --name=volume-nginx -p 80:80 -v nginx_code:/usr/share/nginx/html mynginx:latest
瀏覽器訪問看看吧