Docker詳細使用
文章目錄
- Docker詳細使用
- 使用場景
- docker安裝
- 常用命令
- 幫助啟動類命令
- 鏡像命令
- 網絡命令
- 容器命令
- compose(服務編排)
- 功能列表
- 存儲(掛載本地)
- 介紹
- 使用
- ?錄掛載
- 卷映射
- 網絡
- 介紹
- 使用
- Dockerfile
- Compose
- 介紹
- 使用
使用場景
以下場景使用的命令如果不知參數什么意思可以在下面【功能列表】中查詢
docker安裝
https://docs.docker.com/engine/install/
常用命令
幫助啟動類命令
說明 | 命令 |
---|---|
啟動docker | systemctl start docker |
停止docker | systemctl stop docker |
重啟docker | systemctl restart docker |
查看docker狀態 | systemctl status docker |
開機啟動 | systemctl enable docker |
查看docker概要信息 | docker info |
查看docker總體幫助文檔 | docker --help |
查看docker命令幫助文檔 | docker 具體命令 --help |
鏡像命令
說明 | 命令 |
---|---|
列出本地主機上的鏡像 | docker images |
搜索鏡像 | docker search {鏡像名字} |
下載鏡像 | docker pull {鏡像名字:版本} |
刪除鏡像 | docker rmi -f {鏡像ID} |
網絡命令
說明 | 命令 |
---|---|
查看網絡 | docker network ls |
查看網絡源數據 | docker network inspect {網絡名字} |
刪除網絡 | docker network rm {網絡名字} |
創建網絡(默認創建的是bridge模式) | docker network create {網絡名字} |
容器命令
說明 | 命令 |
---|---|
列出當前所有正在運行的容器 | docker ps |
列出當前所有的容器(包含歷史) | docker ps -a |
新建+啟動容器 | docker run(詳細命令看下面) |
啟動已停止運行的容器 | docker start {容器ID或者容器名} |
停止容器 | docker stop {容器ID或者容器名} |
強制停止容器 | docker kill {容器ID或容器名} |
重啟容器 | docker restart {容器ID或者容器名} |
刪除已停止的容器 | docker rm {容器ID} |
查看容器日志 | docker logs {容器ID} |
查看容器內運行的進程 | docker top {容器ID} |
查看容器內部細節 | docker inspect {容器ID} |
進入正在運行的容器并以命令行交互 | docker exec -it {容器ID} /bin/b}ash |
從容器內拷貝文件到主機上 | docker cp {容器ID:容器內路徑} {主機路徑} |
從主機上拷貝文件到容器內 | docker cp {主機路徑} {容器ID:容器內路徑} |
新建+啟動容器
# -i:以交互模式運行容器,通常與 -t 同時使用;
# -t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
# -d:后臺執行
# -p:指定端口映射
# --network:網絡名,必須是已存在的,如果不存在需要先創建網絡(詳細可參考下面網絡章節)
# -v 卷映射,將容器數據映射到本地(詳細可參考下面存儲(掛載本地)章節)
# --name:容器名
docker run -it -d \
-p {對外端口:程序端口} \
-v {本地目錄或卷目錄:容器程序目錄} \
--network {網絡名} \
--name={容器新名字} \
{容器名}# 例子
docker run -it -d \
-p 9789:80 \
-v /sensorsdata/main/packages/test/nocobase:/app/nocobase \
--network my-bridge-network \
--name=ubp_dev_c140_new_name \
ubp_dev_140
compose(服務編排)
以下命令需要在【docker-compose.yml】文件目錄下執行
說明 | 命令 |
---|---|
啟動所有docker-compose服務并后臺運行 | docker compose up -d |
停止并刪除容器、網絡、卷、鏡像 | docker compose down |
進入容器實例內部 | docker compose exec {docker-compose.yml文件中寫的服務id} /bin/bash |
展示當前docker-compose編排過的運行的所有容器 | docker compose ps |
展示當前docker-compose編排過的容器進程 | docker compose top |
查看容器輸出日志 | docker compose logs yml里面的服務id |
檢查配置 | docker compose config |
檢查配置,有問題才有輸出 | docker compose config -q |
重啟服務 | docker compose restart |
啟動服務 | docker compose start |
停止服務 | docker compose stop |
功能列表
存儲(掛載本地)
映射,容器內的數據備份+持久化到本地主機目錄
介紹
- 分為目錄掛載和卷映射
- 相同點
- 都是將容器里的目錄掛載到本地目錄
- 當被掛載的本地目錄存在時使用本地目錄下的內容,如果本地目錄不存在則自動創建目錄
- 不同點
- 目錄掛載:本地掛載目錄不存時會自動創建,**
不會
**將容器的掛載目錄內容拷貝到本地 - 卷映射:本地掛載目錄不存時會自動創建,**
會
**將容器的掛載目錄內容拷貝到本地
- 目錄掛載:本地掛載目錄不存時會自動創建,**
使用
?錄掛載
# -v :掛載
# 將docker容器的【/usr/share/nginx/html】目錄掛載到本地【/tmp/nghtml】目錄
-v /tmp/nghtml:/usr/share/nginx/html
卷映射
# -v :掛載
# 將docker容器的【/etc/nginx】目錄卷映射到【ngconf】卷中
-v ngconf:/etc/nginx# 查看docker所有的卷
docker volume ls# 查看這個卷掛載的詳細信息(卷名稱、卷掛載的本地目錄)
# {VOLUME NAME}:卷名
docker volume inspect {VOLUME NAME}
網絡
介紹
作用
- 容器間的互聯和通信以及端口映射
- 容器IP變動時候可以通過服務名直接網絡通信而不受到影響
模式介紹
- bridge模式:讓主機和容器之間可以通過網橋相互通信
- 使用–network bridge指定,默認使用docker0
- host模式:直接使用宿主機的 IP 地址與外界進行通信,不再需要額外進行NAT 轉換
- 使用–network host指定
- none模式:不為Docker容器進行任何網絡配置
- 使用–network none指定
- container模式:新創建的容器不會創建自己的網卡,配置自己的IP
- 使用–network container:NAME或者容器ID指定
使用
- bridge模式:使用–network bridge
- host模式:使用–network host
- none模式:使用–network none
- container模式:使用–network container:NAME或者容器ID
Dockerfile
Dockerfile是用來構建Docker鏡像的文本文件,是由一條條構建鏡像所需的指令和參數構成的腳本。
https://docs.docker.com/reference/dockerfile/
Compose
https://docs.docker.com/reference/compose-file/
介紹
- 實現對Docker容器集群的快速編排
- Compose允許用戶通過一個單獨的docker-compose.yml模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)
- 可以很容易地用一個配置文件定義一個多容器的應用,然后使用一條指令安裝這個應用的所有依賴,完成構建。Docker-Compose 解決了容器與容器之間如何管理編排的問題。
使用
步驟
- 編寫docker-compose.yml文件
- 在docker-compose.yml文件目錄下 啟動并運行整個應用程序,完成一鍵部署上線:
docker-compose up -d
docker-compose.yml例子(mysql、redis)
services:mysql:image: mysql:8.0container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_DATABASE: my_databaseMYSQL_USER: userMYSQL_PASSWORD: user_passwordTZ: Asia/Shanghaiports:- "3306:3306"volumes:- mysql_data:/var/lib/mysql- ./mysql-init:/docker-entrypoint-initdb.dnetworks:- app-networkhealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]interval: 10stimeout: 5sretries: 5restart: unless-stoppedredis:image: redis:7.0container_name: rediscommand: redis-server --requirepass redis_passwordports:- "6379:6379"volumes:- redis_data:/datanetworks:- app-networkhealthcheck:test: ["CMD", "redis-cli", "ping"]interval: 10stimeout: 5sretries: 5restart: unless-stoppedvolumes:mysql_data:name: mysql_dataredis_data:name: redis_datanetworks:app-network:driver: bridge