Docker使用入門

及第發表於2021-07-07

簡介

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:按依賴關係順序停止服務

相關文章