docker快速上手

docker安裝

安裝請參考docker官網(wǎng):https://docs.docker.com/engine/installation/linux/ubuntulinux/

容器相關命令

  • docker啟動、重啟、關閉
sudo docker start | restart | stop
  • 查看docker程序是否正常工作
sudo docker info
  • 創(chuàng)建一個交互式shell容器,并為容器命名,名字可以包含字符:a-z,A-Z,0-9,下劃線,圓點,橫線。用正則表示[a-zA-Z0-9_.-]
sudo docker run --name first_container -it ubuntu /bin/bash
  • 查看當前系統(tǒng)中的容器列表
docker ps -a
docker ps -a -l #列出最后一次運行的容器
  • 重新啟動已經(jīng)停止的容器
sudo docker start first_container
sudo docker start container_id #也可以用從其id啟動
sudo docker start container_name #重新啟動一個容器
  • 創(chuàng)建守護式容器,使用-d參數(shù),docker容器會在后臺運行
sudo docker run --name container_name -d ubuntu /bin/bash
  • 停止守護進程
sudo docker stop container_name
  • 獲取守護式容器日志
sudo docker logs container_name
sudo docker logs -f container_name #監(jiān)控docker日志
sudo docker logs --tail 10 container_name #獲取日志最后10行
sudo docker logs --tail 0 -f container_name #跟蹤某個容器的最新日志而不必讀取日志文件
sudo docker logs -ft container_name #-t標志為每條日志加上時間戳,方便調(diào)試
  • 查看容器內(nèi)的進程
sudo docker top container_name
  • 自動重啟容器
sudo cocker run --restart=always --name container_name -d ubutu

--restart:always,on-failure
--restat=on-failure:5,自動嘗試重啟五次

  • 查看容器
sudo docker inspect container_name

docker inspect命令會對容器進行詳細的檢查,然后返回其配置信息,包括名稱、命令、網(wǎng)絡配置的數(shù)據(jù),也可以用-f或者--format標志來選定查看結果。

sudo docker inspect --format='{{.State.Running}}' container_name
#查看多個容器
sudo docker inspect --format='{{.Name}} {{.State.Running}}' container_name_1 container_name_2

/var/lib/docker目錄存放著docker鏡像、容器以及容器的配置,所有的容器都保存在/var/lib/docker/containers目錄下

  • 刪除容器
sudo docker rm container_name | container_id

運行的docker容器是無法刪除的,必須先通過docker stop或者docker kill命令停止容器,才能刪除。

  • 刪除全部容器(-a標志代表列出所有容器,-q表示只需要返回容器的ID。)
sudo docker rm `docker ps -a -q`

鏡像相關命令

  • 列出docker鏡像
sudo docker images

本地鏡像都保存在dockers宿主機的/var/lib/docker目錄下。鏡像從倉庫下載,鏡像保存在倉庫中,而倉庫存在于Registry中,默認的Registry是由Docker公司運營的公共Registry服務,及Docker Hub

  • 拉取ubuntu鏡像
docker pull ubuntu #拉取鏡像
docker pull ubuntu:14.04 #拉去tag為14.04的鏡像

指定倉庫的標簽是一個好習慣,這樣可以準確的制定容器來源于哪里。
Docker Hub有兩種倉庫:用戶倉庫和頂層倉庫,用戶倉庫的鏡像由Docker用戶創(chuàng)建,頂層倉庫由Docker內(nèi)部人來管理。

  • 查看鏡像
sudo docker images container_name
  • 查找鏡像
sudo docker search container_name
  • 構建鏡像
    1. 創(chuàng)建Docker Hub賬號
    2. 登陸Docker Hub
    sudo docker login
    
    1. 用docker的commit命令創(chuàng)建鏡像
      基于ubuntu鏡像創(chuàng)建一個新鏡像
    #創(chuàng)建一個要進行修改的定制容器
    sudo docker run -i -t ubuntu /bin/bash
    #安裝apache軟件包
    apt-get -yqq update
    apt-get -y install apache2
    #退出當前容器
    #提交定制容器
    sudo docker commit 4aab3ce3cb86 jamtur01/appache2
    #檢查新創(chuàng)建的鏡像
    sudo docker images jamtur01/apache2
    #在提交鏡像時指定更多的數(shù)據(jù)(包括標簽)來詳細描述所做的修改
    sudo docker commit -m="A new custom image" --author="James Turnbull" 4aab3ce3cb76 jamtur01/apache2:webserver
    #使用docker inspect查看新創(chuàng)建的鏡像詳細信息
    sudo docker inspect jamtur01/apache2:webserver
    #從提交的鏡像運行一個新容器
    sudo docker run -t -i jamtur01/apache2:webserver /bin/bash
    
  • 用dockerfile構建鏡像
    并不推薦使用docker commit的方法來構建鏡像,相反推薦使用Dockerfile的定義文件和docker build命令來構建鏡像。Dockerfile使用基于DLS語法的指令來構建一個Docker鏡像,之后使用docker build命令基于該dockerfile中的指令構建一個新的鏡像。步驟:(我們將創(chuàng)建一個包含簡單web服務器的docker鏡像)
    1. 創(chuàng)建一個目錄并在里面創(chuàng)建初始化的Dockerfile
    mkdir static_web
    cd static_web
    touch Dockerfile
    
    1. dockerfile文件內(nèi)容
    #第一個Dockerfile
    #Version:0.0.1
    FROM ubuntu:14.04
    MAINTAINER James Turnbull "james@example.com"
    RUN apt-get update
    RUN apt-get install -y nginx
    RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
    expose 80
    
    1. dockerfile指令解釋
      Docker大體按照如下流程執(zhí)行Dockerfile中的指令
      • Docker從基礎鏡像運行一個容器。
      • 執(zhí)行一條指令,對容器做出修改。
      • 執(zhí)行類似docker commit的操作,提交一個新的鏡像層。
      • Docker在基于剛提交的鏡像運行一個新容器。
      • 執(zhí)行Dockerfile中的下一條指令,直到所有指令都執(zhí)行完畢。
    2. 基于dockerfile鏡像構建新鏡像
      執(zhí)行docker build命令時,dockerfile中的指令都會被執(zhí)行并且被提交,并且在該命令成功結束后返回一個新鏡像。
    #運行Dockerfile
    cd static_web
    sudo docker build  -t="jamtur01/static_web" .
    
    使用docker build命令來構建新鏡像,通過-t為新鏡像設置了倉庫和名稱。在本例倉庫為jamtur01,鏡像名為static_web。建議為自己的鏡像設置合適的名字以方便追蹤和管理。也可以設置標簽,如:
    sudo docker build -t="jamtur01/static_web:v1" .
    
      上面告訴docker到本地目錄中去找Dockerfile文件,也可以指定一個Git倉庫的源地址來指定Dockerfile的位置。
    
    sudo docker build -t="jamtur01/static_web:v1 git@github.com:jamtur01/docker-static_web
    
  • 忽略dockerfile的構建緩存
sudo docker build --no-cache -t="jamtur01/static_web"
  • 查看新鏡像
sudo docker images jamtur01/static_web
  • 查看鏡像如何構建出來的
sudo docker history22d47c8cb3jkk
  • 從新鏡像啟動一個容器
sudo docker run -d -p 80 --name static_web jamtur01/static_web nginx -g "daemon off;"

-d:說明在后臺運行
-p:控制docker在運行時應該公開哪些網(wǎng)絡端口給宿主機,-p還可以靈活的管理容器和宿主機之間的端口映射關系

sudo docker run -d -p 80:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
sudo docker run -d -p 8080:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
#端口限制在特定的IP上
sudo docker run -d -p 127.0.0.1:8080:80 --name static_web jamtur01/static_web nginx -g "daemon off;"

-P:可以用來對外公開在Dockerfile中EXPOSE指令中設置的所有端口

sudo docker run -d -P --name static_web jamtur01/static_web nginx -g "daemon off;"

運行一個容器時,Docker可以通過兩種方法來在宿主機上分配端口。
* Docker可以在宿主機上隨機選擇一個位于49153~65535的一個比較大的端口好來映射到容器中的80端口上。
* 可以在Docker宿主機中指定一個具體的端口好來映射到容器中的80端口上。

  • 查看docker端口映射情況
sudo docker ps -l
##指定要查看映射情況的容器ID和容器的端口號
sudo docker port container_id 80
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容