Docker使用入門

簡介

Docker 是一個開源的應用容器引擎,具有部署簡易、沙箱隔離、輕量、可移植等特點,以管理應用程式相同的方式來管理基礎架構,達到快速交付和部署程式碼的目的。

安裝://docs.docker.com/engine/install/ubuntu/
阿里雲鏡像加速://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:按依賴關係順序停止服務