Docker 是一個開源的應用容器引擎,基於 Go 語言 並聽從Apache2.0協議開源。node
全虛擬化的系統分配到的是獨有的一組資源,只有極少許的資源會共享,是有更強的隔離性,可是更加劇了(須要更加多的資源)。用Docker容器有弱些的隔離性,可是它們更加輕量,須要更少的資源,因此你能夠絕不費力地啓動上千個容器。python
基本上,Docker容器和全虛擬化VM有着本質上不一樣的目標mysql
虛擬機(VM)是對某種計算機操做系統的模擬,虛擬機的實現是基於計算機虛擬化的架構和指令,具體可能須要特定的硬件、軟件、或軟硬件同時的支持。linux
Docker是一個建立封裝好的隔離計算機環境,每一個封裝好的環境都被稱爲容器,並沒由傳統虛擬化中的Hypervisor層,由於docker是基於容器技術的輕量級虛擬機,相對於傳統的虛擬化技術,省去了Hypervisor的開銷,並且其虛擬化技術是基於cgroup和Namespace技術,處理邏輯與內核深度融合,nginx
由上圖可知,git
在功能上,docker經過Libcontainer實現對容器生命週期的管理,信息的設置和查詢,以及監控和通訊等功能,容器以鏡像爲基礎,同時又爲鏡像提供了一個標準的和隔離的執行環境。github
在概念上,容器很好的詮釋了docker集裝箱的理念,它能夠安裝任意的集裝和運輸方式,作任意的運行環境配置,web
在通訊上,docker並不會直接與內核交互,它是經過一個更底層的工具Libcontainer與內核交互的,Libcontainer是真正意義上容器引擎,它經過clone系統調用直接建立容器,經過pivot_root系統調用進入容器,且經過直接操做cgroupfs文件實現對資源的監控,而docker自己則側重於處理更上層的業務。redis
命名空間sql
Docker充分使用稱爲namespace的技術來提供分離的工做空間,咱們稱爲容器。當你運行一個容器,Docker爲這個容器創造一些列命名空間。
這個提供了一層分離:容器的每個方面運行在他本身的明明空間中,而且不能訪問其命名空間以外的數據。
Docker引擎在Linux中使用的命名空間有:
docker引擎是一個c/s結構的應用,主要組件見下圖:
容器的核心技術是cgroup+namespace,對於linux容器的最小組成,能夠由如下公式來表示
容器=cgroup+namespace+rootfs+容器引擎(用戶態工具)
cgroup:資源控制
namespace:訪問隔離
rootfs:文件系統隔離
容器引擎:生命週期控制
鏡像:Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。
容器:鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。
Dockerfile 是軟件的原材料,Docker 鏡像是軟件的交付品,而 Docker 容器則能夠認爲是軟件的運行態。從應用軟件的角度來看,Dockerfile、Docker 鏡像與 Docker 容器分別表明軟件的三個不一樣階段,Dockerfile 面向開發,Docker 鏡像成爲交付標準,Docker 容器則涉及部署與運維,三者缺一不可,協力充當 Docker 體系的基石。
簡單來說,Dockerfile構建出Docker鏡像,經過Docker鏡像運行Docker容器。
咱們能夠從Docker容器的角度,來反推三者的關係。首先能夠來看下圖:
一個容器包含一個操做系統,用戶文件和元數據。正如咱們看到的,每個容器都是從鏡像中被構建的。那個鏡像告訴Docker容器保存什麼數據,當容器發佈的時候運行什麼進程,還有其餘一些配置數據。Docker鏡像是隻讀的。當Docker從一個鏡像中運行一個容器的時候,他在鏡像的最頂層添加一個讀寫層(使用union文件系統),在該層中你的應用程序能夠運行。
不管是使用docker二進制仍是API,Docker客戶端告訴Docker守護程序來運行一個容器。
$ docker run -i -t ubuntu /bin/bash
Docker引擎客戶端使用帶有run選項的docker二進制運行一個新的容器。Docker客戶端須要告訴Docker守護進程運行容器的最低限度是:
如今你就擁有一個運行的容器了。如今你能夠管理你的容器,與你的應用交互,當結束的時候,能夠中止和移除你的容器。
宿主系統 vs 客戶系統
宿主系統:是直接安裝在計算機上的原生系統
客戶系統:是安裝在一個虛擬機上,或者宿主機一個分區上的系統
若是安裝在虛擬機上,二者可不一樣,若是安裝在一個分區上,二者必須一致。
Hypervisor:是一種計算機軟件,固件或硬件,用於建立並運行虛擬機的,一個系統若是安裝此服務,裏邊運行着一個或多個虛擬機,這個系統可被定義宿主機,各個虛擬機定義客戶機。
Dockerfile是自動構建docker鏡像的配置文件,Dockerfile中的命令很是相似linux shell下的命令 Dockerfile,可讓用戶自定義構建docker鏡像,支持以 # 開頭的註釋行 通常,Dockerfile分爲4部分 1.基礎鏡像(父鏡像)信息 2.維護者信息 3.鏡像操做命令 4.容器啓動命令
#第一行必須指令基於的基礎鏡像
From ubutu
#維護者信息
MAINTAINER docker_user docker_user@mail.com
#鏡像的操做指令
apt/sourcelist.list
RUN apt-get update && apt-get install -y ngnix
RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf
#容器啓動時執行指令
CMD /usr/sbin/ngnix
一、From指令 From 或者From :
DockerFile第一條必須爲From指令。若是同一個DockerFile建立多個鏡像時,可以使用多個From指令(每一個鏡像一次)
二、MAINTAINER 格式爲maintainer ,指定維護者的信息
三、RUN 格式爲Run 或者Run [「executable」 ,」Param1」, 「param2」] 前者在shell終端上運行,即/bin/sh -C,後者使用exec運行。例如:RUN [「/bin/bash」, 「-c」,」echo hello」] 每條run指令在當前基礎鏡像執行,而且提交新鏡像。當命令比較長時,可使用「/」換行。
四、CMD指令 支持三種格式: CMD [「executable」 ,」Param1」, 「param2」]使用exec執行,推薦 CMD command param1 param2,在/bin/sh上執行 CMD [「Param1」, 「param2」] 提供給ENTRYPOINT作默認參數。
每一個容器只能執行一條CMD命令,多個CMD命令時,只最後一條被執行。
五、EXPOSE
格式爲 EXPOSE […] 。
告訴Docker服務端容器暴露的端口號,供互聯繫統使用。在啓動Docker時,能夠經過-P,主機會自動分配一個端口號轉發到指定的端口。使用-P,則能夠具體指定哪一個本地端口映射過來
例如: EXPOSE 22 80 8443
六、ENV
格式爲 ENV 。 指定一個環境變量,會被後續 RUN 指令使用,並在容器運行時保持。
例如
9.3ENV PG_MAJOR
9.3.4ENV PG_VERSION
-SL//example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …RUN curlhttp:
local-$PG_MAJOR$PATHENV PATH /usr//postgres/bin:
七、ADD 格式爲 ADD 。
該命令將複製指定的 到容器中的 。 其中 能夠是Dockerfile所在目錄的一個相對路徑;也能夠是一個URL;還能夠是一個tar文件(自動解壓爲目錄)。則。
八、COPY
格式爲 COPY 。
複製本地主機的 (爲Dockerfile所在目錄的相對路徑)到容器中的 。
當使用本地目錄爲源目錄時,推薦使用 COPY 。
九、ENTRYPOINT
兩種格式:
ENTRYPOINT [「executable」, 「param1」, 「param2」] ENTRYPOINT command param1 param2 (shell中執行)。 配置容器啓動後執行的命令,而且不可被 docker run 提供的參數覆蓋。
每一個Dockerfile中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效。
十、VOLUME
格式爲 VOLUME [「/data」] 。
建立一個能夠從本地主機或其餘容器掛載的掛載點,通常用來存放數據庫和須要保持的數據等。
十一、USER
格式爲 USER daemon 。
指定運行容器時的用戶名或UID,後續的 RUN 也會使用指定用戶。
當服務不須要管理員權限時,能夠經過該命令指定運行用戶。而且能夠在以前建立所須要的用戶,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要臨時獲取管理員權限可使用 gosu ,而不推薦 sudo 。
十二、WORKDIR
格式爲 WORKDIR /path/to/workdir 。
爲後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工做目錄。
可使用多個 WORKDIR 指令,後續命令若是參數是相對路徑,則會基於以前命令指定的路徑。例如
WORKDIR /a WORKDIR b WORKDIR c RUN pwd 則最終路徑爲 /a/b/c 。
1三、ONBUILD
格式爲 ONBUILD [INSTRUCTION] 。
配置當所建立的鏡像做爲其它新建立鏡像的基礎鏡像時,所執行的操做指令。
例如,Dockerfile使用以下的內容建立了鏡像 image-A 。
[…] ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build –dir /app/src […] 若是基於A建立新的鏡像時,新的Dockerfile中使用 FROM image-A 指定基礎鏡像時,會自動執行 ONBUILD 指令內容,等價於在後面添加了兩條指令。
以上文件就是用來生成第一個docker鏡像的Dockerfile,經過docker build指令來生成docker鏡像 docker build -t hanxt/centos:7 .
若是Dockerfile在當前目錄下,輸入點.就能夠進行加載當前目錄下的Dockerfile 若是不在當前目錄下須要運行 docker build -t hanxt/centos:7 <Dockerfile_dir>
加載相對路徑下的Dockerfile
# canal
FROM tomcat
WORKDIR /home/software
ADD canal.zip /home/software/
RUN unzip -oq /home/software/canal.zip -d /opt/mateinfo/ \
&& rm -f /home/software/* \
&& rm -rf /opt/mateinfo/app \
&& chown -R mateinfo:inoc /opt/mateinfo \
&& chmod -R 700 /opt/mateinfo \
&& chmod -R 750 /opt/mateinfo/logs
EXPOSE 11111 12111
CMD ["/bin/bash"]
個人兩臺Ubuntu 14.04 的虛擬機ip:
Host1 : 10.211.55.3 網卡:eth0
Host2 :10.211.55.5 網卡 eth1
網關:10.211.55.1
對容器ip的劃分:
Host1: 10.211.55.64/26
地址範圍: 10.211.55.65~10.211.55.126
Host2: 10.211.55.128/26
地址範圍: 10.211.55.129~10.211.55.190
須要的操做:
如下,以Host1 爲例,Host2 上操做類似,只是網卡名字不同,我在這裏,沒有使用默認的docker0 網橋,而是新建了虛擬網橋
1. 分別在Docker主機上創建虛擬網橋:
Host1: $ sudo brctl addbr br0
2. 爲網橋分配一個同網段ip
Host1: $ sudo ifconfig br0 10.211.55.10 netmask 255.255.255.0
Host2: $ sudo ifconfig br0 10.211.55.20 netmask 255.255.255.0
3. 橋接本地網卡
Host1: $ sudo brctl addif br0 eth0
這裏,咱們就準備好了網橋設置
下面咱們來修改Docker的配置,使用咱們新建的網橋代替docker0:
1. 修改 /etc/default/docker文件
$sudo vim /etc/default/docker
2. 添加守護進程的啓動選項:
Host1: DOCKER_OPTS=" -b=br0 --fixed-cidr=‘10.211.55.64/26‘ "
Host2: DOCKER_OPTS=" -b=br1 --fixed-cidr=‘10.211.55.128/26‘ "
這裏,-b 用來指定容器鏈接的網橋名字
--fixed-cidr用來限定爲容器分配的IP地址範圍
3. 保存文件並重啓Docker服務
$ sudo service docker restart
下面,就能夠來驗證:
1.分別在兩個Host上啓動一個容器
$ docker run -it ubuntu /bin/bash
2.在容器中運行ping命令查看鏈接狀況
ovs: open vswitch是一個高質量的,多層虛擬交換機
操做步驟:
1.在虛擬機中創建ovs網橋
2.添加gre鏈接
3.配置docker容器虛擬網橋
4.爲虛擬網橋添加ovs接口
5.添加不一樣Docker容器網段路由
GRE:通用路由協議封裝
GRE隧道:隧道技術(Tunneling)是一種經過使用互聯網絡的基礎設施在網絡之間傳遞數據的方式。使用隧道傳遞的數據(或負載)能夠是不一樣協議的數據幀或包。隧道協議將其它協議的數據幀或包從新封裝而後經過隧道發送。新的幀頭提供路由信息,以便經過互聯網傳遞被封裝的負載數據。
$ ovs-vsctl show
$ ovs-vsctl add-br obr0
$ ovs-vsctl add-port obr0 gre0
$ ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.59.104
$ ovs-vsctl show
$ brctl addbr br0
$ ifconfig br0 192.168.1.1 netmask 255.255.255.0
$ brctl addif br0 obr0
$ brctl show
$ ip route add 192.168.2.0/24 via 192.168.59.104 dev eth0
weave
Docker的原生網絡支持很是有限,且沒有跨主機的集羣網絡方案。目前實現Docker網絡的開源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等,其中Weave被評價爲目前最靠譜的,那麼這裏就對Weave的基本原理及使用方法作個總結。
Weave: 是由Zett.io公司開發的,它可以建立一個虛擬網絡,用於鏈接部署在多臺主機上的Docker容器,這樣容器就像被接入了同一個網絡交換機,那些使用網絡的應用程序沒必要去配置端口映射和連接等信息。外部設備可以訪問Weave網絡上的應用程序容器所提供的服務,同時已有的內部系統也可以暴露到應用程序容器上。Weave可以穿透防火牆並運行在部分鏈接的網絡上,另外,Weave的通訊支持加密,因此用戶能夠從一個不受信任的網絡鏈接到主機。
安裝與啓動
$ wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
$ chmod a+x /usr/local/bin/weave
啓動weave路由器,這個路由器其實也是以容器的形式運行的。
$ weave launch
此時會發現有兩個網橋,一個是Docker默認生成的,另外一個是Weave生成的。
$ brctl show
$ docker ps
簡單使用
準備
1. host1: 10.0.2.6
2. host2: 10.0.2.8
3. host1上的應用容器1: 192.168.0.2/24 host1上的應用容器2: 192.168.1.2/24
4. host2上的應用容器1: 192.168.0.3/24
兩臺機上均安裝Docker及Weave,並均啓動好Weave路由容器。
在兩臺機上均啓動一個應用容器。能夠直接使用weave run命令,也能夠先使用docker run啓動好容器,而後使用weave attach命令給容器綁定IP地址。
$ weave run 192.168.0.2/24 -itd ubuntu bash
或者
$ docker run -itd ubuntu bash
$ weave attach 192.168.0.2/24 $ID
此時發現兩個容器之間是不通的,須要使用weave connect命令在兩臺weave的路由器之間創建鏈接。
$ weave connect 10.0.2.8
會發現,此時位於兩臺不一樣主機上的容器之間能夠相互ping通了。可是處於不一樣子網的兩個容器是不能互聯的,這樣咱們就可使用不一樣子網進行容器間的網絡隔離了。
咱們會發現,若是不使用Docker的原生網絡,在容器內部是不能訪問宿主機以及外部網絡的。此時咱們可使用weave expose 192.168.0.1/24來給weave網橋添加IP,以實現容器與宿主機網絡連通。可是,此時在容器內部依然不能訪問外部網絡。
咱們能夠同時使用Docker的原生網絡和weave網絡來實現容器互聯及容器訪問外網和端口映射。使用外部網絡及端口映射的時候就使用docker0網橋,須要容器互聯的時候就使用weave網橋。每一個容器分配兩個網卡。
其餘特性
1.常見API
詳細可見https://docs.docker.com/registry/spec/api/#detail
方法 |
路徑/v2/<name> |
實體 |
描述 |
實例 |
GET |
/v2/ |
Base |
檢查是否正常 |
curl –X GET http://localhost:5000/v2/ |
GET |
/tags/list |
Tags |
鏡像清單 |
|
GET |
/manifests/<referevce> |
Manifest |
清單內容 |
|
Put |
/manifests/<referevce> |
Manifest |
|
|
Delete |
/manifests/<referevce> |
Manifest |
|
|
GET |
/v2/_catalog |
Catalog |
列出存儲庫 |
|
2.部署私有倉庫
2.1使用docker-hub自帶鏡像registry
執行# docker run -d \
-e SETTINGS_FLAVOR=local \
-e STORAGE_PATH=/opt/docker-registry \
-e SEARCH_BACKEND=sqlalchemy \
-v /opt/docker-registry/:/var/lib/registry/ \
-p 5000:5000 \
registry
# curl -XGET http://registry:5000/v2/_catalog
# curl -XGET http://registry:5000/v2/image_name/tags/list
# curl -XGET http://100.90.61.14:5000/v2/_catalog
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.153:5000
2.2使用harbor作私有鏡像庫
1.列出本機的鏡像 docker images
刪除<none>懸掛鏡像, -q 列出id
# docker image –filter 「dangling=true」 –q | xargs docker rmi
docker images | awk '/^.*none.*/ { print $3 }'
docker rmi -f $(docker images | awk '/^.*none.*/ { print $3 }')
鏡像:Docker 鏡像是用於建立 Docker 容器的模板 容器:容器是獨立運行的一個或一組應用 倉庫:用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫
一個倉庫中包含多個鏡像,以鏡像爲模板可建立出多個容器,每一個容器是獨立運行的一個或者一組應用。 容器是鏡像的實例,鏡像是容器的模板 。
簡略:
容器生命週期:run、start/stop/restart、kill、rm、pause/unpause、create、exec
容器操做:ps、inspect、top、attach、events、logs、wait、export、port
容器rootfs:commit、cp、diff
鏡像倉庫:login/logout、pull、push、search
本地鏡像管理:images、rmi、tag、build、history、save、import
info|version:info、version 【docker info/vaersion分別查看系統信息和版本信息】
容器
增:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...] #建立一個新的容器但不啓動它
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] #建立一個新的容器並運行一個命令
進:
docker exec -ti <container name/id> #不會像attach方式由於退出,致使整個容器退出。
docker attach <container name/id> #進入虛擬機,若是從這個stdin中exit,會致使容器的中止。
開啓/中止/重啓
docker container start/stop/restart <hash>
docker container rm <hash> # 今後機器中移除指定的容器【刪除容器時,容器必須是中止狀態,不然會報以下錯誤】
刪:
docker container rm $(docker container ls -a -q) # 刪除全部容器 docker container kill <hash> # 強制關閉指定的容器
查:
docker container ls # 列出全部運行的容器
docker container ls -a # 列出全部的容器
docker ps # 查看咱們正在運行的容器
docker ps -l # 查詢最後一次建立的容器
docker logs <container id> # 查看容器內的標準輸出
docker logs <container name> # 查看容器內的標準輸出
docker port <container name/id> <port> # 查看容器端口的映射狀況
docker inspect <container id/name> #查看Docker的底層信息,它會返回一個 JSON 文件記錄着 Docker 容器的配置和狀態信息
鏡像
增:docker build -t friendlyname . # 使用此目錄的「Dockerfile」建立鏡像
docker push 192.168.1.52:5000/zabbix #提交鏡像到本地私有 docker pull ubuntu:13.10 # 下載ubuntu:13.10鏡像
刪:
\docker image rm <image id> # 從機器中移除指定鏡像
docker image rm $(docker image ls -a -q) # 從機器上移除全部鏡像
查:
docker image ls -a # 列出機器上全部鏡像
docker search httpd # 經過 docker search 命令搜索 httpd 來尋找適合咱們的鏡像
運:
docker run httpd # 使用鏡像倉庫
docker commit 將容器保存爲鏡像
導出鏡像
docker save -o image_name.tar image_name
查看docker網絡
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3f91f2097286 bridge bridge local
d7675dbd247c docker_gwbridge bridge local
5b36c7e947fd host host local
ims6qkpikafu ingress overlay swarm
85ba10e7ef79 none null local
建立一個docker網絡my-docker
docker network create -d bridge \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.100 \
--ip-range=192.168.0.0/24 \
my-docker
利用剛纔建立的網絡啓動一個容器
#docker run --network=my-docker --ip=192.168.0.5 -itd --name=con_name -h lb01 image_name
--network #指定容器網絡
--ip #設定容器ip地址
-h #給容器設置主機名
查看容器pid
#方法一:
docker top con_name
#方法二:
"cmsdev:v1.0"#基於當前目錄Dockerfile構建鏡像docker build -t=.
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
2.0:/etc/zabbixdocker cp hscf-zabbix-agent-/zabbix
format: docker commit containerId repo/image:version
7.hjl.hscf.com5000.0docker commitf7045d72b2c repo:/zabbix-server:v1
format: docker exec -it containerId/containerName bash
execdocker-it devdb bash
docker history imageId
docker'/^.*none.*/ { print $3 }'#查看全部包含none的鏡像images | awk
no#列出完整鏡像ID的鏡像docker images ---trunc
docker inspect imageid
dockerinfo
load.04docker< ubuntu_14.tar
.hscf.com5000docker login repo:
docker logs containerId
sudo#中止全部已退出的容器docker kill $(docker ps -q)
# 查看全部鏡像docker ps
trunc# 查看有完整容器ID的鏡像docker ps --no-
push.hscf.com5000.0dockerrepo:/cmsdev:v1
docker restart containerId或containerName
sudo-a# 刪除全部容器docker rm $(docker ps-q)
刪除全部包含 none的鏡像
-f'/^.*none.*/ { print $3 }'docker rmi$(docker images | awk)
包含環境變量、磁盤掛載、端口映射、docker連接的例子
---web-nginx-mysql\docker runname zabbix
--link-server-mysql-server\zabbix:zabbix
-e="Asia/Shanghai"\PHP_TZ
-vvar\/u01/SCFDOCKER/registry://lib/registry
-p800080\:
-d-web-nginx-mysqlzabbix/zabbix
stopdocker save 將鏡像保存爲壓縮包dockercontainerId
dockersave-oubuntu_14.04.tarubuntu:14.04
docker search 搜索鏡像
dockersearchcentos:latest
爲鏡像cmsdev:v1.0打一個tag
.0.hscf.com5000.0docker tag cmsdev:v1repo:/cmsdev:v1
-qdocker kill $(sudo docker ps)
-a-qdocker rm $(sudo docker ps)
-a-qdocker ps
"cmsdev:v1.0"docker build -t=
.0.hscf.com5000.0docker tag cmsdev:v1repo:/cmsdev:v1
push.hscf.com5000.0dockerrepo:/cmsdev:v1
docker'/^.*none.*/ { print $3 }'images | awk
'/^.*none.*/ { print $3 }'docker rmi -f $(docker images | awk)
.04.tar14.04docker save -o ubuntu_14ubuntu:
.04.tardocker load < ubuntu_14
200# 查看容器最後200行日誌docker logs --tail=containerId
-f# 動態查看日誌docker logscontainerId
nogrep# 獲取特定鏡像的容器ID全程docker ps ---trunc |cmsdev
#進入容器所在目錄cd /var/lib/docker/containers/containerFullId
log# 該文件就是容器的日誌文件contailerFullId-json.
docker cp 從容器複製一個文件或目錄到本地目錄或標準輸出
1. 配置docker daemon的參數,因爲每一個發行版的linux的init系統不用,因此使用通用的命令行方式重啓docker daemon
docker daemon --insecure-registry 192.168.6.65:5000 &
1..清理無用的docker容器命令
docker ps -aqf status=exited | xargs docker rm
2.清理無用鏡像的命令
docker images -qf dangling=true | xargs docker rmi
3.清理無用的docker掛載
docker volume rm $(docker volume ls -q -f dangling=true)
dockerignore使用
docker rm $(echo $(docker ps -q --no-trunc) $(dockerps -a -q--no-trunc) | sed 's|\s|\n|g' |sort | uniq -u)
刪除當前不在運行狀態的容器ID,也能夠把前面改爲docker rm
docker images -a -q --no-trunc 顯示當前倉庫中的鏡像與臨時鏡像的ID,不截斷輸出 做者:淹死的魚_hz 連接:https://www.jianshu.com/p/711bc4ffcecf 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
1. 在宿主機中查看 docker容器的ip地址
[root@hadoop mydockerbuild]# docker inspect docker_test1 --format '{{.NetworkSettings.IPAddress}}'
172.17.0.2
docker build 構建鏡像
Usage: docker [OPTIONS] COMMAND [arg...]
docker [ --help | -v | --version ]
A self-sufficient runtime for containers.
Options:
--config=~/.docker Location of client config files
-D, --debug Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help Print usage
-l, --log-level=info Set the logging level
--tls Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
docker --help
Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container, image or task
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry.
logout Log out from a Docker registry.
logs Fetch the logs of a container
network Manage Docker networks
node Manage Docker Swarm nodes
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
service Manage Docker services
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
swarm Manage Docker Swarm
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code