docker筆記

什麼是docker

Docker 屬於 Linux 容器(三大特色:啓動快、資源佔用少、體積小)的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。 Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行同樣。有了 Docker,就不用擔憂環境問題。 整體來講,Docker 的接口至關簡單,用戶能夠方便地建立和使用容器,把本身的應用放入容器。容器還能夠進行版本管理、複製、分享、修改,就像管理普通的代碼同樣python

 

docker用途

docker主要用途,目前分爲三大類:linux

一、提供一次性的環境。好比,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。git

二、提供彈性的雲服務。由於 Docker 容器能夠隨開隨關,很適合動態擴容和縮容。github

三、組建微服務架構。經過多個容器,一臺機器能夠跑多個服務,所以在本機就能夠模擬出微服務架構。web

 

docker安裝

mac下:https://download.docker.com/mac/stable/Docker.dmg 下載安裝便可 安裝完後運行,終端能夠經過docker info看是否安裝成功正則表達式

linux下:yum install -y docker-engineredis

運行 docker info 查看是否安裝成功docker

 

docker經常使用命令

鏡像類shell

  • docker build --rm=true . 構建鏡像
  • docker pull ${IMAGE} 安裝鏡像
  • docker images 顯示已經安裝的鏡像
  • docker images --no-trunc 顯示已經安裝鏡像的詳細內容
  • docker rmi ${IMAGE_ID} 刪除指定鏡像
  • docker rmi $(docker images | grep "^" | awk "{print $3}") 刪除全部沒有標籤的鏡像
  • docker rm $(docker ps -aq) 刪除全部的鏡像
  • docker rmi $(docker images --quiet --filter "dangling=true") 刪除未使用的鏡像

容器類flask

  • docker run 運行容器
  • docker ps 顯示正在運行的容器
  • docker ps -a 顯示全部的容器
  • docker stop ${CID} 中止指定容器
  • docker stop docker ps -q 中止全部正在運行的容器
  • docker ps -a --filter "exited=1" 顯示全部退出狀態爲1的容器
  • docker rm ${CID} 刪除指定容器
  • docker ps -a | grep wildfly | awk '{print $1}' | xargs docker rm -f 使用正則表達式刪除容器
  • docker rm -f $(docker ps -a | grep Exit | awk '{ print $1 }') 刪除全部退出的容器
  • docker rm $(docker ps -aq) 刪除全部的容器
  • docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID} 顯示指定容器的IP
  • docker attach ${CID} 進入容器
  • docker exec -it ${CID} bash 進入容器打開一個shell
  • docker ps | grep wildfly | awk '{print $1}' 經過正則表達式查找容器的鏡像ID  

其中attach進入容器,退出後容器也會退出,而exec只是退出當前shell,容器不會退出。

 

docker-compose

Docker Compose是一個用來定義和運行復雜應用的Docker工具。一個使用Docker容器的應用,一般由多個容器組成。使用Docker Compose再也不須要使用shell腳原本啓動容器。 
Compose 經過一個配置文件來管理多個Docker容器,在配置文件中,全部的容器經過services來定義,而後使用docker-compose腳原本啓動,中止和重啓應用,和應用中的服務以及全部依賴服務的容器,很是適合組合使用多個容器進行開發的場景。

安裝:

sudo pip install docker-compose

主要配置兩個文件Dockerfile和docker-compose.yml。dockerfile 用來定義容器, docker-compose.yml 用於把多個容器鏈接到一塊兒同時運行。

簡單案例:使用docker-compose構建一個flask web應用

首先新建一個web目錄,建立app.py文件,內容以下:

from flask import Flask
from redis import Redis app = Flask(__name__) redis = Redis(host="redis",port=6379) @app.route("/") def hello(): count = redis.incr('hits') return 'hello world! {}'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0",debug=True)

編寫Dockerfile文件

FROM python:3.6-alpine
ADD . /code WORKDIR /code RUN pip install redis flask CMD ["python","app.py"]

容器構建完畢,如何鏈接這些容器,由docker-compose.yml文件定義

version: '2‘
services:
    web:
        build: .
        ports:
            - "6379:6379"
    redis:
        images: "redis:alpine"

至此配置文件已寫好,而後執行

docker-compose build #構建
docker-compose up -d #後臺運行服務

docker-compose搭建服務真的很方便,搭建其餘服務能夠參照上述配置,仿造着寫就熟悉了。好比https://github.com/vulhub/vulhub 這個docker漏洞靶場環境,能夠參考和理解裏面的配置文件,不懂的參數多谷歌百度,摸索幾回就會用了。

相關文章
相關標籤/搜索