docker命令小結

wsc449發表於2017-12-06

應用場景

docker使用的時候,有自己一套專業的命令模式,其中有映象,容器,倉庫等等,其中各種命令用法比較容易混淆,這裡粗略的整理一下。

1. 映象:

 # docker pull 映象名    (下載映象)

 # docker run -t -i 映象名 /bin/bash        (利用映象建立一個容器,在其中執行bash)

 # docker images (檢視映象,repository:倉庫,TAG:映象標籤,標記同一倉庫的不通映象,ID:映象唯一ID號)

 # docker tag 原倉庫名:原版本名TAG ubuntu:latest  (為映象新增新的標籤TAG)

 # docker inspect 映象名或映象ID     (獲取映象的詳細資訊)

 # docker search 映象名      (搜尋映象)

 # docker rmi 映象名    (刪除映象,如果在映象上層有容器執行,刪除失敗)

 # docker rmi -f 映象名    (強制刪除映象)

建立映象有三種方式:

 # docker commit -m "add a new file" -a "Docker Newbee" 容器名 新的映象名 (基於已有映象的容器建立)

 # cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04   (基於本地模板匯入)

 # docker save -o ubuntu_14.04.tar ubuntu:14.04    (存出本地映象到本地檔案ubuntu:14.04)
 # docker load --input ubuntu_14.04.tar   (載入映象)

 # docker push user/test:latest   (上傳本地映象到倉庫 docker tag test:latest user/test:latest)

2. 容器:

啟動容器有兩種方式:一種是基於映象新建一個容器並啟動,一種是將終止狀態的容器重新啟動

 # docker create -it ubuntu:latest   (建立容器,create新建的容器處於禁止狀態,docker start 容器名 來啟動)

 # docker run ubuntu /bin/echo `Hello World` (輸出一個‘Hello World’,之後容器自動終止)

 # docker run -t -i ubuntu:14.04 /bin/bash     (啟動一個bash終端,允許使用者進行互動)

 # docker run -d ubuntu /bin/sh   (使docker容器在後臺已守護狀態執行)

 # docker stop/stop/restart 容器ID

 # docker run -idt 映象名 ||  docker attach 容器名  (當多個視窗attach到同一個容器的時候,所有視窗會同步顯示)

 # docker exec -ti 容器ID /bin/bash   (進入到剛剛建立的容器中)

 # docker rm 容器id或者容器名    (刪除終止狀態的容器  -f強制)

 # docker rm `docker ps -a -q`     (刪除所有容器的命令)

 # docker export 容器id > test_for_run.tar    (匯出容器到一個tar檔案)

 # cat test_for_run.tar |docker import - test/ubuntu:v1.0  (匯入檔案,成為映象)

注:docker import 和docker load的區別:

使用docker load命令來匯入映象儲存檔案到本地的映象庫;使用docker import命令來匯入一個容器快照到本地映象庫。

3. 倉庫:

集中存放映象的地方,一個容器與之混淆的概念是註冊伺服器,實際上註冊伺服器是存放倉庫的具體伺服器,每個伺服器上可以有多個倉庫,每個倉庫下面有多個映象。

 # d1.dockerpoll.com/ubuntu   d1.dockerpoll.com是註冊伺服器地址,ubuntu是倉庫名

 # docker run -d -p 5000:5000 registry   (自動下載並啟動一個registry容器,建立本地的私有倉庫)

 # curl 127.0.0.1:5000/v1/search   (訪問私有倉庫中所包含的映象)

 # docker tag daocloud.io/library/mysql:latest 127.0.0.1:5000/test   (修改本地映象的tag)

 # docker push 127.0.0.1:5000/test    (上傳映象到私有倉庫)

 # docker pull 192.168.199.31:5000/test   (從私有倉庫上pull到在使用的客戶端)

 # tree /opt/data/registry/repositories/ (檢視映象的儲存目錄和檔案  tree /tmp/registry/repositories/    yum -y install tree)

 # http://192.168.199.31:5000/v1/search   (瀏覽器訪問私有倉庫的映象)

4. 資料管理:

使用者雜使用docker的過程中,需要能檢視容器內應用產生的資料,或者需要把容器內的資料進行備份,甚至多個容器之間進行資料的共享,這就涉及到容器的資料管理操作。管理資料的兩種方式:資料卷,資料卷容器。

1.在容器內建立資料卷,把本地的目錄或檔案掛載到容器內的資料卷中

2.使用資料卷容器在容器和主機、容器和容器之間共享資料,並實現資料的備份和恢復。

5. 資料卷:

 # sudo docker run -d -P --name web -v /webapp training/webapp python app.py (使用training/webapp映象建立web容器,並建立一個資料卷掛載到容器的/webapp目錄)

 # sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py (掛載主機的/src/webapp目錄到容器的/opt/webapp目錄做為資料卷)

 # sudo docekr run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash (從主機掛載單個檔案到容器中做為資料卷)

資料卷容器:(其實就是一個普通的容器,專門提供資料卷供其他容器掛載使用)

 # docker run -it -v /dbdata --name dbdata ubuntu (建立一個資料卷容器dbdata,在其中建立一個資料卷掛載到/dbdata)

 # docker run -it --volumes-from dbdata --name db1 ubuntu   (容器db1和db2都掛載到了同一個資料捲到相同的/databata目錄)

 # docker run -it --volumes-from dbdata --name db2 ubuntu

6. 網路基礎配置:

docker提供了對映容器埠到宿主機和容器關聯機制來為容器提供網路服務,使用埠對映機制來將容器內的應用服務提供給外部網路,通過容器互聯讓多個容器之間進行快捷的網路通訊。

容器與外部網路:

 # docker run -d -P training/webapp python app.py

容器與容器間:

 # docker run -d --name db training/postgres

 # docker run -d -P --name web --link db:db training/webapp python app.py

7. 使用dockerfile建立映象

包含四個部分:基礎映象資訊,維護者資訊,映象操作指令和容器啟動時執行指令

FROM MAINTAINER RUN  CMD  EXPOSE  ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR ONBUILD

建立映象:

 # docker build -t build_repo/first_image /tmp/docker_builder/  (dockerfile所在路徑/tmp/docker_builder,生成的映象標籤為build_repo/first_image)

 # docker run -ti -d -v /usr/local/src:/usr/local/src centos /bin/bash

 # docker run -d -ti –name tomcat01 docker.io/tomcat

 # docker run -ti docker.io/nginx /bin/bash


 # docker build -t="xubin/jweb" .       

docker build -t xubin/jweb  .

1,建立專案:https://github.com/changedi/mydocker

2,編輯 Dockerfile:https://github.com/changedi/mydocker/blob/master/Dockerfile

3,在本地專案中執行 docker build <image_name> .,build一個自定義名字的映象

4,啟動這個映象容器:docker run -d -p 80:80 <image_name>

這樣,這個映象就好了,服務也起來了,後續可以通過docker ps來檢視啟動的映象,通過docker stop來停止容器。
 # docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

 # tar -zxf /mnt/software/jdk-7u67-linux-x64.tar.gz -C .

 # mv jdk1.7.0_67/ jdk/

 # tar -zxf /mnt/software/apache-tomcat-7.0.55.tar.gz -C .

 # mv apache-tomcat-7.0.55/ tomcat/

首先,編輯.bashrc檔案

 # vi ~/.bashrc

然後,在該檔案末尾新增如下配置:

 # export JAVA_HOME=/opt/jdk export PATH=$PATH:$JAVA_HOME

最後,需要使用source命令,讓環境變數生效:

 # source ~/.bashrc

編寫執行指令碼

我們需要編寫一個執行指令碼,當啟動容器時,執行該指令碼,啟動 Tomcat,具體過程如下:

首先,建立執行指令碼:

 # vi /root/run.sh

然後,編輯指令碼內容如下:

 # !/bin/bash source ~/.bashrc sh /opt/tomcat/bin/catalina.sh run

注意:這裡必須先載入環境變數,然後使用 Tomcat 的執行指令碼來啟動 Tomcat 服務。

最後,為執行指令碼新增執行許可權:

 # chmod u+x /root/run.sh

退出容器

當以上步驟全部完成後,可使用exit命令,退出容器。

隨後,可使用如下命令檢視正在執行的容器:

 # docker ps

使用以下命令,根據某個“容器 ID”來建立一個新的“映象”:

 # docker commit 57c312bbaad1 huangyong/javaweb:0.1

 # docker run -d -p 58080:8080 --name javaweb huangyong/javaweb:0.1 /root/run.sh


相關文章