經過上一篇【Docker篇一】瞭解到Docker的三大核心概念:鏡像、容器、倉庫,以及鏡像下載上傳導入和導出操做,容器的建立以及啓動,導入和導出。
本篇將從以下三個方面詳解如何靈活的構建本身的容器,實現這些容器中數據的遷移,以及怎麼樣實現從網絡中訪問容器中的數據。html
命令格式:docker commit [選項] 容器ID/名稱 倉庫名稱[標籤] 經常使用選項: -m:說明信息 -a:做者信息 -p:生成過程當中中止容器的運行
docker images
docker create -it 11426a19f1a2 /bin/bash
docker ps -a
docker start 4212c3d37718
docker commit -m "new" -a "test" 4212c3d37718 httpd:testweb
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - zhangsan:newdocker
基礎鏡像信息
維護者信息
鏡像操做指令
容器啓動時執行指令apache
如上圖所示,編寫Dockerfile時,有嚴格的格式須要遵循,第一行必須是FROM指令說明所基於的鏡像名稱,以後使用MAINTAINER指令說明維護該鏡像的用戶信息,而後是鏡像操做相關指令,如RUN,每運行一條指令,都會給基礎鏡像添加新的一層,最後使用CMD指令,來指定啓動容器時要運行的命令操做。json
mkdir apache
cd apach
vim Dockerfile //注意名稱必須是Dockerfilevim
#基於的基礎鏡像,若本地沒有就會自動下載 FROM centos #維護鏡像的用戶信息 MAINTAINER The porject <cloud-ops@centos.org> #鏡像操做指令安裝apache軟件 RUN yum -y update //初始化yum倉庫 RUN yum -y install httpd #開啓 80 端口 EXPOSE 80 #複製網站首頁文件,將本地與Dockerfile同級目錄下的index.html文件放入容器對應路徑下,需手動建立 ADD index.html /var/www/html/index.html #將執行腳本複製到鏡像中,此腳本爲啓動服務腳本,不存在,須要本身建立 ADD run.sh /run.sh RUN chmod 755 /run.sh #啓動容器時執行腳本 CMD ["/run.sh"]
echo "NEVER SAY NEVER !" > index.htmlcentos
vim run.sh緩存
#!/bin/bash rm -rf /run/httpd/* //初始化容器httpd服務,清楚緩存 exec /usr/sbin/apachectl -D FOREGROUND //啓動容器中httpd服務
docker build -t httpd:centos . //注意末尾有"."bash
docker run -d -p 1216:80 httpd:centos //鏡像名稱與標籤同在生成鏡像時設定服務器
WARNING:IPv4 forwarding is disabled.Networking will not work.
sysctl -w net.ipv4.ip_forward=1
當使用docker push命令上傳時,默認上傳到官方公共倉庫,對於一些公共倉庫裏面的鏡像沒法瞭解詳細狀況下,咱們們須要創建私有倉庫,方便咱們選擇更加合適本身的容器鏡像。
docker pull registry
Using default tag: latest latest: Pulling from library/registry 4064ffdc82fe: Pull complete c12c92d1c5a2: Pull complete 4fbc9b6835cc: Pull complete 765973b0f65f: Pull complete 3968771a7c3a: Pull complete Digest: sha256:51bb55f23ef7e25ac9b8313b139a8dd45baa832943c8ad8f7da2ddad6355b3c8 Status: Downloaded newer image for registry:latest
vim /etc/docker/deamon.json
{ "insecure-registries":["192.168.144.111:5000"]} //指定私有倉庫地址和端口號
systemctl status docker.service
docker create -it registry /bin/bash //爲registry鏡像建立容器
docker ps -a
docker start a1a68e5b9b6f //啓動registry鏡像容器
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
docker tag zhangsan:new 192.168.144.111:5000/zhangsan
docker push 192.168.144.111:5000/zhangsan
curl -XGET http://192.168.144.111:5000/v2/_catalog
爲了方便查看容器內產生的數據或者將多個容器中的數據實現共享,就涉及到容器的數據管理操做,管理Docker容器中數據主要有兩種方式,數據卷和數據卷容器。
在docker run 命令中使用-v選項能夠在容器內建立數據,屢次使用,可建立多個數據卷,使用--name選項能夠給容器建立一個友好的自定義名稱。
docker run -v /var/www:/data1 --name web1 -it centos /bin/bash
[root@202dd484fd62 /]# cd /data1/
[root@202dd484fd62 data1]# touch test123
[root@localhost ~]# ls /var/www/
若是須要在容器之間共享一些數據,最簡單的方法就是使用數據卷容器,數據卷容器就是一個普通的容器,專門提供數據卷給其餘容器掛載使用,使用方法以下:
首先須要建立一個容器做爲數據卷容器,以後在其餘容器建立使用時用--volumes-from掛載數據卷容器中的數據卷使用。
docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
docker run -it --volumes-from web100 --name db1 centos /bin/bash
docker run -d -P httpd:centos
docker run -d -p 49280:80 httpd:centos
docker ps -a
6d461287c25d httpd:centos "/run.sh" 7 seconds ago Up 7 seconds 0.0.0.0:49280->80/tcp zen_swanson
docker run -P --name web1 -it httpd:centos /bin/bash
docker run -P --name web2 --link web1:web1 -it httpd:centos /bin/bash