簡介
Docker 是一個開源的應用容器引擎,具有部署簡易、沙箱隔離、輕量、可移植等特點,以管理應用程式相同的方式來管理基礎架構,達到快速交付和部署程式碼的目的。
安裝:https://docs.docker.com/engine/install/ubuntu/
阿里雲映象加速:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
Docker 架構
- 映象(Image):將軟體環境打包好的模板,用來建立容器
- 容器(Container):容器是映象執行時的實體,可以被建立、啟動、停止、刪除等,容器與容器之間相互隔離
- Docker daemon:Docker守護程式
- Docker Client:Docker命令列工具,與Docker daemon進行通訊並返回結果給使用者
- 倉庫(Repository):用來儲存映象
常用命令
1、下載映象
docker pull 映象名:TAG
# Tag表示版本,有些映象的版本顯示latest,為最新版本
2、檢視映象
docker images
# 檢視本地所有映象
3、刪除映象
docker rmi -f 映象ID或者映象名:TAG
# 刪除指定本地映象
# -f 表示強制刪除
4、執行
docker run --name 容器名 -i -t -p 主機埠:容器埠 -d -v 主機目錄:容器目錄:ro 映象ID或映象名:TAG
# --name 指定容器名,可自定義,不指定自動命名
# -i 以互動模式執行容器
# -t 分配一個偽終端,即命令列,通常-it組合來使用
# -p 指定對映埠,講主機埠對映到容器內的埠
# -d 後臺執行容器
# -v 指定掛載主機目錄到容器目錄,預設為rw讀寫模式,ro表示只讀
例-執行redis:
docker run -p 6379:6379 --name redis -v /docker/redis/data:/data -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
5、容器列表
docker ps -a -q
# docker ps檢視正在執行的容器
# -a 檢視所有容器(執行中、未執行)
# -q 只檢視容器的ID
6、啟動/停止容器
docker start 容器ID或容器名
docker stop 容器ID或容器名
7、刪除容器
docker rm -f 容器ID或容器名
# -f 表示強制刪除
8、檢視日誌
docker logs 容器ID或容器名
9、進入容器
docker exec -it 容器ID或者容器名 /bin/bash
# 進入正在執行的容器並且開啟互動模式終端
# /bin/bash是固有寫法,作用是因為docker後臺必須執行一個程式,否則容器就會退出,在這裡表示啟動容器後啟動bash。
# 也可以用docker exec在執行中的容器執行命令
Dockerfile
Dockerfile 是一個用來構建映象的文字檔案,文字內容包含了一條條構建映象所需的指令和說明。
Dockerfile常用指令
命令 | 用途 |
---|---|
FROM | 基礎映象檔案 |
RUN | 構建映象階段執行命令 |
ADD <src> <dest> | 新增檔案,從src目錄複製檔案到容器的dest,其中src可以是Dockerfile所在目錄的相對路徑,也可以是一個URL,還可以是一個壓縮包 |
COPY | 拷貝檔案,和ADD命令類似,但不支援URL和壓縮包 |
CMD | 容器啟動後執行命令 |
EXPOSE | 宣告容器在執行時對外提供的服務埠 |
WORKDIR | 指定容器工作路徑 |
ENV | 指定環境變數 |
ENTRYPOINT | 容器入口,CMD指令的目的一樣,都是指定Docker容器啟動時執行的命令,可多次設定,但只有最後一個有效 |
USER | 用於設定啟動映象時的使用者或者UID,寫在該指令後的 RUN、CMD以及ENTRYPOINT指令都將使用該使用者執行命令 |
VOLUME | 指定掛載點,該指令使容器中的一個目錄具有持久化儲存的功能,該 目錄可被容器本身使用,也可共享給其他容器。當容器中的應用有持 久化資料的需求時可以在 Dockerfile中使用該指令。格式為: VOLUME["/data"] |
RUN命令在image檔案的構建階段執行,執行結果都會打包進入image檔案;CMD命令則是在容器啟動後執行。另外,一個Dockerfile可以包含多個RUN命令,但是隻能有一個CMD命令。
指定了CMD命令以後,docker container run命令就不能附加命令了(比如前面的/bin/bash),否則它會覆蓋CMD命令。
構建映象
在 Dockerfile 檔案的存放目錄下,執行構建動作
docker build -t 映象名:TAG .
# 最後一個.表示上下文路徑,該路徑下的檔案會被一起打包
Docker Compose
Docker Compose可以輕鬆、高效地管理容器,通過docker-compose.yml定義和執行多容器的Docker應用。
docker-compose.yml常用指令
- image:指定映象名或者映象id
- build:指定Dockerfile檔案的路徑
- external_links:連結到docker-compose.yml外部的容器
- ports:暴露埠資訊
- expose:暴露埠
- volumes:卷掛載路徑
- environment:環境變數
- net:設定網路模式
使用Docker Compose
docker-compose up
:以依賴性順序啟動服務docker-compose stop
:按依賴關係順序停止服務