docker的第一階段總結

2022-02-06 運維軍團

官方鏡像基本上都默認是 UTC 時區。docker實例裡面的系統時間和物理機是一樣的,而且無法修改,最多只可以修改時區,通常為了解決時區問題,要在創建(運行)容器的時候加上(例如中國上海時區)

37   -e TZ=Asia/Shanghai

或者掛載宿主機的 " /etc/localtime" 文件來保持時區一致,時間無法直接修改,但是可以用libfaketime這個庫來欺騙修改下時間。

庫地址: https://github.com/wolfcw/libfaketime/

簡單編譯之後,把libfaketime.so.1文件複製到docker實例,然後運行以下命令:

38   export LD_PRELOAD=/libfaketime.so.1 FAKETIME="+100"

即可達到和真實時間偏差快100秒的效果。

docker實例默認使用的是私有的網段,需要訪問裡面服務時候通過映射埠出來,但是如果想讓實例使用物理IP,比如我們辦公網想當做虛擬機來使用,就可以用macvlan網絡來實現。

39   docker network create -d macvlan  --subnet=172.16.0.0/19 --gateway=172.16.0.1 -o parent=eth0 gitlab-net40   --subnet: 指定網段(宿主機)41   --gateway: 指定網關(宿主機)42   parent: 註定父網卡(宿主機)

接下來創建容器指定網絡即可

43   docker run --net=gitlab-net --ip=172.16.0.170  -dt --name test centos:7

--net 指定使用的網絡,--ip 用於指定網段內 IP;啟動後只需要在容器內啟動程序測試即可,注意centos6上面的不支持指定IP。

針對網絡這塊,如果集群同默認那樣直接用nat的方式應用到線上,必然是個大問題,因為我們現在openstack的雲平臺就碰到了包量的問題,現在是用sr-iov技術來臨時解決。

針對私有倉庫的管理可以使用vmware提供的harbor來做,安裝也是很docker化,下載源碼之後利用docker-compose編排工具進行全自動化編排,因為裡面包含各個需要互聯的docker實例,所以需要docker-compose.yml這個配置文件來進行編排自動化管理。

需要可以在內部團隊共享鏡像的當然得用私有倉庫,雖然harbor有基本的功能,但是用起來感覺還是有些薄弱。界面如下:

命令行用起來的話需要下載harbor客戶端才方便,可以下載python版本的harborclient,安裝好之後配置HARBOR_URL、HARBOR_USERNAME、HARBOR_PASSWORD變量即可進行常規的鏡像倉庫搜索操作。

harbor命令如果有No module named 'requests.packages.urllib3'報錯可以通過執行pip install requests urllib3 --force –upgrade升級python庫修復。

docker提供了很多api,所以有很多個圖形化的東西來管理,但是簡單易用的web界面暫時是推薦用portainer。

支持常見的一些操作和性能監控。而且支持本地或者遠程docker管理,只需要docker在啟動時候添加埠監聽就可以了。

比如可以在這個web裡面創建數據卷、網絡、然後對各個docker實例進行操作和查看詳細信息,比較強大。

這裡有個有趣的現象,一些常見的docker工具本身也是個docker鏡像,比如這個portainer和之前的harbor倉庫,是不需要進行特殊的搭建配置,直接pull搜索下載下來啟動就可以了,雖然有些便捷,不需要解決額外的依賴(傻瓜化),如果按照傳統IT人員的思路,估計會有點懵。

docker的安全性相對openstack來說要弱一些,因為和宿主機共用的內核,所以宿主機的內核提權漏洞是可以在docker實例裡面測試並進行逃逸影響到宿主機,不單是內核漏洞,普通的docker實例互通的安全隱患也會比vmware之類的大一些。

資源限制這塊,docker也可以做,但是默認沒做,默認是儘量使用宿主機的資源,所以可以df看到磁碟大小是宿主機的磁碟之類的,也可能某個實例佔用大額的cpu和內存讓其餘的實例感覺到卡頓。事實上可以通過cpuset、memory和dm.basesize等參數來進行調控。

還一個就是宿主機的iptables內容得注意不可以隨意修改,會影響到docker的網絡通訊,如果不小心覆蓋了docker生成的規則之後怎麼恢復也暫時沒有很好的辦法。

相關焦點

  • Docker 入門教程
    \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \需要說明的是,國內連接 Docker 的官方倉庫很慢,還會斷線,需要將默認倉庫改成國內的鏡像網站,具體的修改方法在下一篇文章的第一節。有需要的朋友,可以先看一下。首先,運行下面的命令,將 image 文件從倉庫抓取到本地。
  • Docker學習筆記-基礎命令三
    rm批量刪除docker rmi $(docker images -f "xxxx=xxx" -q)清理未使用的鏡像 dockerdocker stop containerdocker rm container刪除所有已停止的容器docker rm $(docker ps -a -q)鏡像構建 docker image build [OPTIONS] PATH | URL | -OPTIONS說明名字,簡寫默認描述
  • Docker(二):Dockerfile 使用介紹
    為了提高構建性能,可以通過 .dockerignore文件排除上下文目錄下不需要的文件和目錄。在 Docker 構建鏡像的第一步,docker CLI 會先在上下文目錄中尋找 .dockerignore文件,根據 .dockerignore 文件排除上下文目錄中的部分文件和目錄,然後把剩下的文件和目錄傳遞給 Docker 服務。
  • 雲計算核心技術Docker教程:Docker Swarm 使用
    進入管理節點,執行:docker info 可以查看當前集群的信息。docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com查看 helloworld 服務運行在哪個節點上,可以看到目前是在 swarm-worker1 節點:
  • 雲計算核心技術Docker教程:rm/rmi命令詳解
    在docker客戶端命令行中我們可以使用rm刪除一個或多個容器,使用rmi刪除本地一個或多少鏡像。示例:docker rm :刪除一個或多個容器。例如,強制刪除容器 db01、db02,命令如下:$ docker rm -f db01 db02移除容器 nginx01 對容器 db01 的連接,連接名 db:$ docker rm -l db刪除容器
  • docker下高並發和高可用之docker swarm使用
    ,操作步驟參考Linux下安裝和使用Docker安裝完,使用命令sudo systemctl start docker啟動docker,再通過命令docker version查看docker版本信息利用docker swarm 命令來指定其中一臺虛擬機為docker的Manager管理機docker swarm init --advertise-addr
  • 如何使用 Docker 高效部署 Node 應用 - 51CTO.COM
    再稍微複雜一點點的 Node 應用可以查看山月的項目 whoami[5]: 一個最簡化的 serverless 與 dockerize 示例。藉助鏡像的「多階段構建」可以高效利用空間。Go App 與 FE App 的構建也遵循此規則。 多階段構建 Go 應用[6] 多階段構建前端應用[7]在構建 Node 應用鏡像時,第一層鏡像用以構造 node_modules。
  • docker 佔用空間太大
    大家在使用docker過程中,有沒有遇到過/var/lib/docker/overlay2這個文件夾佔用空間特別大,使用得越久,這個文件越大,有的人可能達到100G
  • Docker-compose實戰
    各位小夥伴們,我們前面的篇文章分享了、docker的基礎知識點、如何編寫一個Dockerfile、docker網絡是怎麼回事、如何編寫docker-compose.yml文件。已經為本文做好了充分的鋪墊。那麼這邊文章就和小夥本們分享如何將你自己的微服務項目進行服務的編排。
  • Docker 容器的網絡
    在任何完成安裝的 Docker 中將會自動包含有下面 3 個網絡驅動,你可以通過下面的命令來列表出來:$ docker network lsNETWORK ID NAME DRIVER18a2866682b8
  • 優化Docker 鏡像小技巧
    Docker構建是通過使用Docker CLI工具中的docker build命令觸發。docker build命令根據Dockerfile文件中指定的指令構建Docker鏡像。Dockerfile是一個文本文檔,其中包含用戶組裝鏡像所有的有序命令。Docker鏡像由只讀層組成。每層代表一個Dockerfile指令。這些層是堆疊在一起的,每個層都是上一層的增量。我認為這些層是緩存的一種形式。
  • Docker清理的常用方法
    你可以通過設置一個自定義--subnet子網來解決問題,例如:docker network create dada --subnet 192.167.11.0/24但無論如何,本文的重點是清理docker rm -v $(docker ps --all --quiet
  • 【泡泡Docker樂園】手把手帶你走進Docker世界
    Ubuntu系統官方鏡像:https://hub.docker.com/_/ubuntu?退出container後我們可以通過docker ps -a命令來查看所有的container。可以看到我們的container仍在運行,且有著唯一的container id。
  • 雲計算核心技術Docker教程:docker-compose build/pull命令介紹
    在下載安裝Docker Compose後通過創建 Dockerfile 文件就可以使用Docker Compose命令構建和啟動應用了,本文主要介紹docker-compose命令格式:docker-compose pull [options] [SERVICE...]拉取服務依賴的鏡像。
  • 2016年第一本Docker書
    一年前,The Docker Book中文版出版,這是第一本Docker中文技術書,於是中文版取名為《第一本Docker書》。
  • 雲計算核心技術Docker教程:Docker 守護進程dockerd的LCOW選項
    例C:\> dockerd --storage-opt lcow.kirdpath=c:\path\to\fileslcow.kernel指定位於lcow.kirdpath路徑中的內核文件的文件名。默認為bootx64.efi。
  • 雲計算核心技術Docker教程:Docker Compose指定單個compose文件
    docker-compose可以使用該-f標誌通過命令行或通過在外殼程序或環境文件中設置COMPOSE_FILE環境變量來指定不在當前目錄中的Compose文件的路徑。
  • 雲計算核心技術Docker教程:docker-compose命令up,run以及start...
    通常,您需要docker-compose up。使用up啟動或重新啟動所有定義的服務docker-compose.yml。該docker-compose up命令匯總每個容器的輸出(本質上是docker-compose logs -f)。當命令退出時,所有容器都將停止。
  • Docker 容器化部署技術
    1、查看Docker命令的幫助信息docker --help  #docker全部命令幫助信息docker command --help  #docker具體命令commad的幫助信息2、查看docker
  • 雲計算核心技術Docker教程:Docker Compose的restart和rm命令詳解
    Docker-Compose restart命令可以重新啟動所有已停止並正在運行的服務,Docker-Compose rm命令可以刪除已經停止的容器,如果服務在運行,需要先docker-compose stop 停止容器。