ref: The Doocker Book
Docker
Ch 2 安裝Docker
容器是直接運行操作系統內核之上的用戶空間。
Docker核心組件:
- Docker客戶端、服務器端,也成為Docker引擎;
- Docker鏡像;
- Registry;
- Docker容器。
Docker用Registry來保存用戶構建的鏡像。
Registry分為:1. 公共;2. 私有。
Mac OS X Docker安裝說明:
ref: https://docs.docker.com/docker-for-mac/
按照Docker官網安裝Docker.app后需要設置PATH環境變量否則無法找到
docker
命令;
設置方法:
vim ~/.bash_profile
. .bash_profile
export PATH=/Applications/Docker.app/Contents/Resources/bin:$PATH
Ch 3 Docker入門
Docker命令
- 容器管理
含義 | 命令 |
---|---|
創建容器 | docker run --name your_container_name -i -t ubuntu /bin/bash |
啟動容器 | docker start your_container_id_or_name |
重啟容器 | docker restart your_container_id_or_name |
關閉容器 | docker stop your_container_id_or_name |
刪除容器 | docker rm your_container_id_or_name |
附著會話 | docker attach your_container_id_or_name |
強制退出容器 | docker kill your_container_id_or_name |
查看詳細容器配置 | docker inspect your_container_id_or_name |
查看容器安裝信息 | docker info |
查看正在運行的容器 | docker ps |
查看所有容器 | docker ps -a |
查看容器正在運行的進程 | $ docker top your_container_id_or_name |
查看容器端口映射 | docker port |
查看容器日志 | docker logs |
- 創建守護式容器
docker run --name deamon_container_test -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done"
- 查看容器日志
docker logs --tail 100 your_container_name
- 鏡像管理
含義 | 命令 |
---|---|
查看鏡像 | docker images |
搜索 | docker search image_name |
構建鏡像 | docker build -t your_image dockerfile_dir |
刪除鏡像 | docker rmi images_id |
推送鏡像 | docker push images_id |
- Docker Networking管理
含義 | 命令 |
---|---|
創建網絡 | docker network create |
Ch 4 構建鏡像
Docker構建鏡像的方式:
$ docker commit
$ docker build
- Dockerfile基于DSL(Domain Specific Language) 語法的指令來構建一個Docker鏡像;
- 一旦有Dockerfile就可以使用
$ docker build
命令基于該Dockerfile中的指令構建一個新的鏡像;
Dockerfile語法結構:
# 我是注釋
COMMAND arguments
- 命令必須大寫
- 命令后跟參數
- Dockerfile中的指令會嚴格按照書序從上到下執行,所以應該合理安排指令順序;
Dcokerfile 執行流程;
- Docker從基礎鏡像運行一個容器;
- 執行一條指令,對容器做出修改;
- 執行類似
$ docker commit
的操作,提交一個新的鏡像層; - Docker在基于剛提交的鏡像運行一個新容器;
- 執行Dockerfile中的下一條指令,知道所有指令都執行完畢。
Dockerfile 指令
命令 | 含義 |
---|---|
FROM | 指定基礎鏡像 |
CMD | 指定一個容器啟動時要運行的命令,注意:$ docker run 命令可以覆蓋CMD命令,CMD命令只能指定一條,如果指定多條則最后一條生效 |
RUN | 指定鏡像被構建時運行的命令 |
ENTRYPOINT | 與CMD指令類似,但$ docker run 命令行指定的任何參數都會被當做參數再次傳遞給ENTRYPOINT指令中指定的指令 |
WORKDIR | ENTRYPOINT或CMD命令運行的工作目錄 |
ENV | 在鏡像構建過程中設置環境變量 |
USER | 指定運行鏡像的用戶,默認:root |
VOLUME | 向基于鏡像創建的容器添加卷 |
ADD | 用來指定將構建環境下的文件和目錄復制到鏡像中 |
COPY | 復制文件,類似ADD但不會自動提取和解壓 |
LABEL | 為Docker鏡像添加元數據 |
ONBUILD | 能為鏡像添加觸發器 |
- 從新鏡像啟動容器
$ docker run -d -p 80 --name web-server jackycser/web-server nginx -g "deamon off;"
- 自動構建
在GitHub或BitBucket倉庫中包含Dockerfile文件并將倉庫連接到Docker Hub即可。
Ch 5 使用Docker測試靜態網站
卷:是在一個或者多個容器內被選定的目錄,可以繞過分層的聯合文件系統(Union File System),為Docker提供持久數據或者共享數據。
這意味著對卷的修改會直接生效,并繞過鏡像。
當提交或者創建鏡像時,卷不被包含在鏡像里。
- Docker Networking
Docker Networking:容器之間的連接用網絡建立
5.3 Docker 用于持續集成
Ch 6 使用Docker構建服務
6.2 使用Docker構建一個Java應用服務
Ch 7 Docker 編配和服務發現
Docker編配:
服務的自動配置、協作和管理服務的過程。
在Docker的世界里,編配用來表述一組實踐過程,這個過程會管理運行在多個Docker容器里的應用,而這些Docker容器有可能運行在多個宿主主機上。
- Docker Compose:用一個YAML文件定義一組要啟動的容器,以及容器運行時的屬性,Docker Compose 稱這些容器為“服務”:
容器通過某些方法并指定一些運行時的屬性來和其他容器產生交互。
- 編配工具功能:
- 調度和集群管理
- 服務發現
- Compose
含義 | 命令 |
---|---|
啟動 | docker-compose up |
查看日志 | docker-compose logs |
停止 | docker-compose stop |
查看進程 | docker-compose ps |
刪除服務 | docker-compose rm |
7.3 Docker Swarm
Docker Swarm是一個原生的Docker集群管理工具。
- Swarm 將一組Docker主機作為一個虛擬的Docker主機來管理。
Ch 8 使用Docker API
在Docker 生態系統中一共有3種API:
- Registry API:提供了與來存儲Docker 鏡像的 Docker Registry 集成的功能;
- Docker Hub API:提供了與Docker Hub集成的功能;
- Docker Remote API:提供了與Docker 守護進程進行集成的功能。
所有這3種API都是RESTful風格的。
- Docker Remote API 也提供了所有在命令行中能使用的對容器的所有操作。