1. 程式人生 > 實用技巧 >zookeeper原理之Leader選舉完成之後的處理邏輯

zookeeper原理之Leader選舉完成之後的處理邏輯

本文轉自本人部落格

Docker 架構

  • 映象(Image):Docker 映象(Image),就相當於是一個 root 檔案系統。比如官方映象 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 檔案系統。
  • 容器(Container):映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。
  • 倉庫(Repository):倉庫可看成一個程式碼控制中心,用來儲存映象。

可以這麼認為

  • 集裝箱(映象): 會將所有需要的內容放到不同的集裝箱,誰需要這些環境就直接拿走(pull)這個集裝箱就可以了,而docker有一個大碼頭,所有的集裝箱都放在這裡(中央倉庫
    )
  • 隔離性: Docker在執行集裝箱內內容時,會在Linux的核心中,單獨開閉一片空間,這片空間不會影響到其他應用程式,一定程度上增加了安全性
  • 容器:執行起來的映象

Docker 安裝

烏班圖系統可使用以下命令一鍵安裝

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或者使用daocloud一鍵安裝

curl -sSL https://get.daocloud.io/docker | sh

安裝成功之後,手動啟動,設定為開機自啟,並測試一下Docker

# 啟動Docker服務
systemctl start docker
# 設定開機自動啟動
systemctl enable docker
# 測試
docker run hello-world

Docker 映象加速

安裝完之後建議換源,否則從中央倉庫拖容器的時候巨慢無比,建議使用阿里雲的Docker映象加速

阿里雲映象獲取地址:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
登陸後,左側選單選中映象加速器就可以看到你的專屬地址了:
https://********.mirror.aliyuncs.com

獲取連結之後,在/etc/docker/daemon.json中寫入如下內容(如果檔案不存在請新建該檔案):

{"registry-mirrors":["https://********.mirror.aliyuncs.com"]}

修改之後重啟服務

sudo systemctl daemon-reload
sudo systemctl restart docker

此外,可以嘗試使用國內的一些倉庫,本人常用的是

http://hub.daocloud.io/

映象的操作

拉取映象

從中央倉庫拉取映象到本地

docker pull 映象名稱[:tag]

# 如: docker pull daocloud.io/library/nginx:latest
#     docker pull php:5.6-fpm

檢視本地映象

檢視本地以及安裝過的映象資訊,包含標識,名稱,版本,更新時間,大小

docker images

刪除本地映象

映象會佔用磁碟空間,可以手動刪除

docker rmi 映象的標識

映象的匯入和匯出

# 將本地的映象匯出
docker save -o 匯出的路徑 映象id
# 載入本地的映象檔案
docker load -i 映象檔案
# 修改映象名稱
docker tag 映象id 新映象名稱:版本

容器的操作

執行容器

執行容器需要制定具體映象,如果就像不存在則直接下載

# 簡易操作
docker run 映象的標識|映象名稱[:tag]

# 常見引數
docker run -d -p 宿主機埠:容器埠 --name 容器名稱 映象的標識|映象名稱[:tag]
# -d: 標識後臺執行容器
# -p 宿主機埠:容器埠: 為了對映當前Linux的埠和容器的埠
# --name 容器名稱: 指定容器的名稱

檢視正在執行的容器

docker ps [-qa]
# -a: 檢視全部的容器,包括沒有執行的
# -q: 只檢視容器的標識

檢視容器日誌

docker logs -f 容器id
# -f: 可以滾動檢視日誌的最後幾行

進入容器內部

# 可以進入容器內部進行操作
docker exec -it 容器id bash

複製內容到容器

# 講宿主機的檔案複製到容器內部的指定目錄
docker cp 檔名稱 容器id:容器內部路徑

重啟&啟動&停止&刪除容器

# 重新啟動容器
docker restart 容器id

# 啟動停止執行的容器
docker start 容器id

# 停止指定的容器(得先停止容器再刪除)
docker stop 容器id
# 停止全部容器
docker stop $(docker ps -qa)

# 刪除指定的容器
docker rm 容器id
# 停止全部容器
docker rm $(docker ps -qa)

資料卷

資料卷: 講宿主機的一個目錄對映到容器的一個目錄中

可以在宿主機中操作目錄中的內容,那麼容器內部對映的檔案,也會跟著一起改變

建立資料卷

# 建立資料卷之後,預設會存放在一個目錄下 /var/lib/docker/volumes/
docker volume create 資料卷名稱

檢視全部資料卷

# 檢視全部資料卷資訊

docker volume ls

檢視資料卷詳情

# 檢視資料卷的詳細資訊,可以查詢到存放的路徑,建立時間等等

docker volume inspect 資料卷名稱

刪除資料卷

# 刪除指定的資料卷

docker volume rm 資料卷名稱

容器對映資料卷

對映有兩種方式:

通過資料卷名稱對映,如果資料卷不存在。Docker會幫你自動建立,會將容器內部自帶的檔案,儲存在預設的存放路徑中。
通過路徑對映資料卷,直接指定一個路徑作為資料卷的存放位置。但是這個路徑下是空的。

# 通過資料卷名稱對映
docker run  -v 資料卷名稱:容器內部的路徑 映象id
# 通過路徑對映資料卷
docker run -v 路徑:容器內部的 映象id

Dockerfile

我們可以通過建立Dockerfile來自定義建立映象

from : 指定當前自定義映象依賴的環境
copy : 講相對路徑下的內容複製到自定義映象中
workdir : 宣告映象的預設工作目錄
run : 執行的命令,可以編寫多個
cmd : 需要執行的命令(在workdir下執行,cmd可以寫多個,只以最後一個為準
EXPOSE [埠號] :對映到宿主機的埠,這個命令主要體現在啟動容器時所執行的命令,

下面以AntSword-Labs\bypass_disable_functions\1為例

# 拉取apache映象
FROM php:5.6.11-apache         

# 複製檔案到容器內部
COPY src/shell.php /var/www/html/index.php
COPY src/shell.php /var/www/html/ant.php

COPY src/php.ini /usr/local/etc/php/php.ini


COPY src/start.sh /start.sh

# 執行系統命令
RUN set -x \
  && chmod +x /start.sh \
  && chown -R www-data:www-data /var/www/html

# 對映80埠
EXPOSE 80
# 執行命令檔案
ENTRYPOINT [ "/start.sh" ]

通過dockerfile製作映象

編寫完Dockerfile後需要通過命令將其製作為映象,並且要在Dockerfile的當前目錄下,之後即可在映象中檢視相關資訊,注意最後的 .

# 製作映象
docker build -t 映象名稱[:tag] .

Docker-compose

可以通過Docker-Compose編寫映象引數,而且Docker-Compose可以幫助我們批量的管理容器,這些資訊只需要通過一個docker-compose.yml去維護

Docekr-compose的安裝

推薦使用pip一鍵式操作

pip install docker-compose

安裝完成之後嘗試輸入

docker-compose -version

# 出現類似以下資訊即為安裝成功
# docker-compose version 1.26.2, build unknown

Docker-Compose管理容器

這裡以AntSword-Labs\bypass_disable_functions\1為例

version: '2'    # 說明yml檔案的版本號,一般使用2或3
services:       # yml檔案的主體,定義服務配置
  web:          # 服務名稱,可自定義
    build:      # 構建自定義映象
      context: ./    # 指定fockerfile的所在路徑
      dockerfile: Dockerfile    # 指定Dockerfile檔名稱
    image: antswordproject/antsword-labs:bypass_disable_functions_1   # 指定檔案路徑
    ports:
      - "18080:80"    # 對映埠,相當於之前的-p

再來一個mysql的yml

version: '3.1'
services:
  mysql:           # 服務的名稱
    restart: always   # 代表只要docker啟動,那麼這個容器就跟著一起啟動
    image: daocloud.io/library/mysql:5.7.4  # 指定映象路徑
    container_name: mysql  # 指定容器名稱
    ports:
      - 3306:3306   #  指定埠號的對映
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT使用者登入密碼
      TZ: Asia/Shanghai        # 指定時區(TimeZone)
    volumes:
     - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql   # 對映資料卷

使用docker-compose命令管理容器

在使用docker-compose的命令時,預設會在當前目錄下找docker-compose.yml檔案

# 1.基於docker-compose.yml啟動管理的容器
docker-compose up -d

# 如果自定義映象不存在,會幫助我們構建出自定義映象,如果自定義映象存在,則直接執行這個映象,如果需要重構
# 重新構建自定義映象
docker-compose build
# 運行當前內容,並重新構建
docker-compose up -d --build

# 2.關閉並刪除容器
docker-compose down

# 3.開啟|關閉|重啟已經存在的由docker-compose維護的容器
docker-compose start|stop|restart

# 4.檢視由docker-compose管理的容器
docker-compose ps

# 5.檢視日誌
docker-compose logs -f