Docker使用入門
- 2021 年 7 月 7 日
- 筆記
簡介
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
:按依賴關係順序停止服務