docker詳解
本文包含
Docker命令
、Dockerfile
、docker-compose
、k8s
容器、映象、倉庫
- 映象就是一個只讀模板,映象可以用來建立Docker容器,一個映象可以建立很多容器。
- Docker利用容器獨立執行一個或一組應用,容器是用映象建立的執行例項。可以被啟動、開始、停止、刪除。
- 可以把容器看做是一個簡易版的LInux環境
- 倉庫是存放映象的地方
映象加速
點選這裡獲取阿里雲docker加速器
至於如何使用, 可以看網站的教程
常用命令
幫助命令
docker version
獲取docker版本docker info
docker資訊,如多少個映象,記憶體等資訊。docker --help
幫助資訊
映象命令
docker images
列出本機上的映象
-a
列出本地所有的映象(含中間對映層) (重要)
-q
只顯示映象ID (重要)
--digests
顯示映象的摘要資訊
--no-trunc
顯示完整的映象資訊docker search 某個XXX映象的名字
去www.dockerhub.com
搜尋
--no-trun
顯示完整的映象描述
-s
列出收藏數不小於指定值的映象(重要)
--automated
只列出 automated build型別的映象docker pull 某個映象的名字
下載映象
指定tag:docker pull 映象名字[:TAG]
,預設最新(latest
docker rmi 某個XXX映象的名字ID
刪除映象
刪除單個docker rmi -f 映象ID
刪除多個docker rmi -f 映象名1:TAG 映象名2:TAG
刪除全部docker rmi -f ${docker images -qa}
docker history 映象id
列出映象的構建歷史
容器命令
有映象才能建立容器,這是根本前提(下載一個Centos映象演示)
執行容器docker run
建立並執行一個容器(本地沒有映象時,將從雲端下載)
docker run的流程:
命令: docker run [OPTIONS] IMAGE [COMMAND][ARG]
引數
--name="容器新名字"
:為容器指定一個名稱-d
:後臺執行容器,並返回容器ID, 也即啟動守護式容器-i
:以互動模式執行容器,通常與-t同時使用-t
:為容器重新分配一個偽輸入終端,通常與-i同時使用-P
:隨機埠對映(大寫)-p
:指定埠對映,有以下四種格式:ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
例子:
$docker run -d -p 8080:8080 tomcat
檢視容器 docker ps
列出當前所有正在執行的容器
命令: docker ps [OPTIONS]
引數
-a
:列出當前所有正在執行的容器+歷史上執行過的-|
:顯示最近一個建立的容器-n n
:顯示最近n個建立的容器-q
:靜默模式,只顯示容器ID--no-trunc
:不截斷輸出
例子:
$docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp mynginx
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql
$docker ps -n 3
CONTAINER ID IMAGE COMMAND CREATED
09b93464c2f7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
b8573233d675 nginx:latest "/bin/bash" 2 days ago ...
b1a0703e41e7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
退出容器
在容器中的兩種退出方式:
exit
容器停止退出ctrl+P+Q
容器不停止退出
啟動/停止/重啟容器
啟動已經存在的容器: docker start 容器ID或容器name
重啟已經存在的容器: docker restart 容器ID或容器name
停止已經存在的容器: docker stop 容器ID或容器name
強制停止容器: docker kill 容器ID或容器簽名
例子:
$docker start container
$docker stop container
$docker restart container
刪除容器docker rm
可以刪除多個容器
命令: docker rm 容器ID [OPTIONS]
引數
f
: 通過SIGKILL訊號強制刪除一個執行中的容器l
: 移除容器間的網路連線,而非容器本身v
: 刪除與容器關聯的卷
一次性刪除所有容器:
$docker rm -f $(docker ps -a -q)`
容器日誌docker logs
檢視容器日誌
命令: docker logs 容器ID [OPTIONS]
引數
-t
是加入時間戳-f
跟隨最新的日誌列印--tail
數字顯示最後多少條--since
:顯示某個開始時間的所有日誌
$docker logs -f mynginx
192.168.239.1 - - [10/Jul/2021:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows ....
$docker logs --since="2021-10-01" --tail=10 mynginx
# 檢視容器mynginx從2021年10月1日後的最新10條日誌。
容器內程序docker top
檢視容器中執行的程序資訊,支援 ps 命令引數。
命令: docker top 容器ID
$docker top mymysql
容器內元資料docker inspect
命令: docker inspect 容器ID
獲取容器/映象的元資料
$docker inspect mysql:5.6
在外部操作容器
一次性執行, 命令: docker exec -it 容器ID bashShell
互動執行 (連線到正在執行中的容器), 命令: docker attach 容器ID
複製檔案 (從容器內拷貝檔案到主機上), 命令: docker cp 容器ID:容器內路徑 目的主機路徑
建立新映象docker commit
提交容器副本使之稱為一個新的映象
命令: docker commit
格式: docker commit -m="提交的描述資訊" -a="作者" 容器ID 要建立的目標映象名:[標籤名]
關於Docker的一些概念
Docker映象
映象是一種輕量級、可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含執行某個軟體所需的有內容,包括程式碼、執行時、庫、環境變數和配置檔案
docker底層
docker底層是UnionFS
UnionFS(聯合檔案系統): 是一種分層、輕量級並且高效能的檔案系統,它支援對檔案系統的修作為一 次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬檔案系統下(unite several directories into a singlevirtualfilesystem)。
Union檔案系統是Docker映象的基礎。映象可以通過分層來進行繼承,基於基礎映象(沒有父映象)可以製作各種具.體的應用映象。
特性: 一次同時載入多個檔案系統,但從外面看起來,只能看到一個檔案系統,聯合載入會把各層檔案系統疊加起來,這樣最終的文 件系統會包含所有底層的檔案和目錄
載入原理
Docker映象載入原理: docker的映象實際上由一層一層的檔案系統組成,這種層級的檔案系統UnionFS。
botfs(boot file system)主要包含bootloader和kernel, bootloader主 要是引導載入kernel
Linux剛啟動時會載入bootfs檔案系統,在Docker映象的最底層是bootfs。這一-層與我們典型的Linux/Unix系統是一樣的,包含boot載入器和核心。
當boot載入完成之 後整個核心就都在記憶體中了,此時記憶體的使用權己由bootfs轉交給核心,此時系統也會解除安裝bootfs。
rootfs (root file system),在bootfs之 上。 包含的就是典型Linux系統中的/dev, /proc, /bin, /etc等標準目錄和檔案。
rootfs就是各種不同的作業系統發行版,比如Ubuntu,Centos等等。
問: 平時我們安裝的虛擬機器的Centos都是好幾個G ,為什麼docker這裡才要200m?
對於一個精簡的OS, rootfs可 以很小,只需要包括最基本的命令、工具和程式庫就可以了,因為底層直接用Host的kernel, 只需要提供rootfs就行了。
由此可見對於不同的linux發行版, bootfs基本是一致的, rootfs會有差別,因此不同的發行版可以公用bootfs。
優點
主要優點: 使用分層結構
為什麼Docker想要採用這種分層結構?
最大的一個好處就是-共享資源 比如:有多個映象都從相同的base映象構建而來,
那麼宿主機只需在磁碟上儲存一份base映象, 同時記憶體中也只需載入一份base映象,就可以為所有容器服務了。
而且映象的每一層都可以被共享。
特點
Docker映象都是隻讀的,當容器啟動時,一個新的可寫層被載入到映象的頂部,這一層通常被稱為容器層,容器層之下都叫映象層
容器資料卷
是什麼
一句話:有點類似我們Redis裡面的rdb和aof檔案,做宿主機與容器之間的資料同步
特點:
- 資料卷可在容器之間共享或重用資料
- 卷中的更改可以直接生效
- 資料卷中的更改不會包含在映象的更新中
- 資料卷的生命週期一直持續到沒有容器使用它為止
使用
使用
-v
指定資料卷
- 不帶許可權(即擁有 讀寫 許可權):
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 映象名
- 帶許可權(ro: 只讀):
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 映象名
使用
docker inspect 容器ID
命令可以清楚看到綁定了哪些資料卷,以及資料卷的許可權。
使用dockerfile構建內建資料卷
即不需要手動指定
VOLUME
指令來給映象新增一個或多個數據卷. 語法參考Dockerfile章節
宿主機對應地址通過
docker inspect
命令檢視。
若Docker掛載主機目錄Docker訪問出現
cannot open directory . Permission denied
解決辦法:在掛載目錄後多加一個--privileged=true
引數即可
資料卷容器
命名的容器掛載資料卷,其它容器通過掛載這個(父容器)實現資料共享,掛載資料卷的容器,稱之為資料卷容器.
即多個容器之間資料共享
使用方法:
- 建立容器a
- 建立容器b,指定引數
--volumes -from a
- 這樣就實現資料同步了
容器之間配置資訊的傳遞,資料卷的生命週期一直持續到沒有容器使用它為止
Dockerfile
Dockerfile是用來構建Docker映象的構建檔案,由一系列命令和引數構成的指令碼
構建三步驟
- 編寫Dockerfile檔案
- docker build
- docker run
編寫Dockerfile
Dockerfile內容基礎知識
- 每條保留字指令都必須為大寫字母且後面要跟隨至少一個引數
- 指令按照從.上到下,順序執行
-
表示註釋
- 每條指令都會建立一個新的映象層,並對映象進行提交
Docker執行Dockerfile的大致流程
- docker 從基礎映象執行一個容器
- 執行一-條指令並對容器作出修改
- 執行類似docker commit的操作提交- -個新的映象層
- docker再基 於剛提交的映象執行一一個新容器
- 執行dockerfile中的 下一條指令直到所有指令都執行完成
Dockerfile常用指令
點選這裡檢視: Dockerfile命令詳解(超全版本)
簡潔版如下:
指令 | 說明 |
---|---|
FROM |
基礎映象,當前新映象基於哪個映象 |
MAINTAINER |
映象維護者的姓名和郵箱地址 |
RUN |
容器構建時需要執行的命令 |
EXPOSE |
當前容器對外暴露的埠 |
WORKDIR |
指定建立容器後,終端預設登入進來的工作目錄 |
ENV |
用來在構建映象過程中設定環境變數 |
ADD |
將宿主機目錄下的檔案拷貝進映象,會自動處理URL和解壓tar壓縮包 |
COPY |
類似ADD,拷貝檔案和目錄到映象中,但不會自動解壓 |
VOLUME |
容器資料卷,用於資料儲存和持久化工作 |
CMD |
容器啟動時執行的命令,多個時,最後一個生效. 會被docker run 後面的引數替換(假如指定的話) |
ENTRYPOINT |
容器啟動時執行的命令. docker run 後面命令會將成為ENTRYPOINT 的引數,然後拼接成新的命令 |
ONBUILD |
當構建一個被繼承的Dockerfile時執行命令,父映象被子映象繼承後父映象的ONBUILD 會被觸發 |
例子
# myproject/Dockerfile
# 建立 python3.9 環境
FROM python:3.9
# 映象作者
MAINTAINER lczmx
# 設定 python 環境變數
ENV PYTHONUNBUFFERED 1
# 替換pip源為國內源
COPY pip.conf /root/.pip/pip.conf
# 建立 myproject 資料夾
RUN mkdir -p /var/www/html/myproject
# 將 myproject 資料夾為工作目錄
WORKDIR /var/www/html/myproject
# 將當前目錄加入到工作目錄中(. 表示當前目錄)
ADD . /var/www/html/myproject
# 更新pip版本
RUN /usr/local/bin/python -m pip install --upgrade pip
# 利用 pip 安裝依賴
RUN pip install -r requirements.txt
# 執行命令 python main.py
ENTRYPOINT ["python", "main.py"]
docker compose
docker-compose是一種容器編排技術
安裝/解除安裝docker-compose
安裝
-
方法一
- 安裝
國內映象安裝:
$curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
從github上安裝
$curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
需要安裝不同的版本時, 替換URL的版本即可, 點選這裡檢視可用releases
- 新增許可權
$sudo chmod +x /usr/local/bin/docker-compose
- 使用
$docker-compose version docker-compose version 1.27.4, build 40524192 docker-py version: 4.3.1 CPython version: 3.7.7 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
- 安裝
-
方法二
使用pip安裝$pip install docker-compose
檢驗使用
$docker-compose version docker-compose version 1.27.4, build 40524192 docker-py version: 4.3.1 CPython version: 3.7.7 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
解除安裝
如果基於 curl 安裝,通過以下命令解除安裝Docker Compose
:
$sudo rm /usr/local/bin/docker-compose
如果基於 pip 安裝,通過以下命令解除安裝Docker Compose
:
pip uninstall docker-compose
使用步驟
- 定義
dockerfile
- 定義
docker-compose.yaml
- 執行
docker-compose up
命令或docker-compose up --build
命令
docker-compose.yaml
規則
也可以把檔案命名為
docker-compose.yml
docker-compose.yaml
檔案的所有指令見: docker compose官方文件,全部配置都可以在這裡找到
上面連結的譯文見: docker-compose 編排指南 (v3.8)
yaml
檔案的編寫規則見: YAML 入門教程
version
指定
docker-compose
的版本 (1.x
/2.x
/3.x
), 點選這裡檢視版本區別
version: "3"
相當於version: "3.0"
version: '3.8'
services
服務配置
注意:services
需要結合其他指令
version: '3.8'
services:
webapp:
webapp
指的是一個應用
-
build
指定
Dockerfile
所在資料夾的路徑,Compose
將會利用它自動構建映象version: '3.8' services: webapp: build: ./dir
build
指令可以進一步拆分:context
、dockerfile
和args
version: '3.8' services: webapp: build: context: ./dir # 指定資料夾路徑 可以是包含 Dockerfile 的目錄路徑,也可以是 git 儲存庫的url dockerfile: Dockerfile-alternate # 指定 Dockerfile 檔名 args: # 為Dockerfile中的變數賦值 buildno: 1
cache_from
version: '3.8' services: webapp: build: context: . cache_from: # 指定構建映象時使用的快取 - alpine:latest - corp/web_app:3.14
labels
version: '3.8' services: webapp: build: context: . labels: # 通過標籤向生成的映象新增元資料 com.example.description: "Accounting webapp" com.example.department: "Finance" com.example.label-with-empty-value: ""
network
version: '3.8' services: webapp: build: context: . network: host # 設定構建期間 run 指令要連結的網路 # 可以設定為 none 禁用網路
sim_size
version: '3.8' services: webapp: build: context: . shm_size: '2gb' # 設定所構建容器的/dev/shm分割槽大小
target
version: '3.8' services: webapp: build: context: . target: prod # 按照在 Dockerfile 中定義的方式構建指定的階段
-
image
指定要從哪個映象啟動容器。
如果映象在本地不存在,也沒有指定了build
,Compose 將會嘗試拉取這個映象。image: ubuntu image: example-registry.com:4000/postgresql image: a4bc65fd
假如
build
與image
同時存在,Compose
會使用在image
中指定的名字和標籤來命名最終構建的映象build: ./dir image: webapp:tag
這將從
./dir
構建, 生成名為webapp
, 標籤為tag
的映象 -
command
覆蓋容器啟動後預設執行的命令
command: echo "hello world"
-
entrypoint
重寫預設入口點
entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]
-
environment
設定環境變數
environment: RACK_ENV: development SESSION_SECRET: environment: - RACK_ENV=development - SESSION_SECRET
-
expose
暴露容器內部埠,
注意不是將內部埠對映到本地埠expose: - "3000" - "8000"
-
ports
暴露埠資訊。
使用 HOST:CONTAINER 格式,或者僅指定容器埠(宿主機將隨機選擇埠)都可以。ports: - "3000" - "3000-3005" - "8000:8000" - "9090-9091:8080-8081" - "49100:22" - "127.0.0.1:8001:8001" - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp" - "12400-12500:1240"
-
working_dir
指定容器中工作目錄
working_dir: /code
-
container_name
指定容器名稱。預設將會使用
專案名稱_服務名稱_序號
這樣的格式。container_name: project-web-container
-
user
指定容器中執行應用的使用者名稱
user: nginx
-
depends_on
指定服務之間的依賴關係,以便按順序啟動服務。
version: '3.8' services: web: build: . depends_on: # 先啟動 redis db 再啟動 web - db - redis redis: image: redis db: image: postgres
-
secrets
利用docker儲存敏感資料, 然後在應用中使用
例如 mysql 服務密碼注意: 需要通過提示, 執行:
docker swarm init
或docker swarm join
-
建立祕鑰
直接建立:$printf "some string that is your secret value" | docker secret create my_secret -
從檔案中建立:
$docker secret create my_db_pass db_pass.txt
若以檔案建立, 請確保檔案是否安全, 或建立完後刪除檔案
使用命令:docker secret ls
可以檢視祕鑰 -
在
docker-compose
中使用secret
version: '3' secrets: db_user: external: true db_password: external: true
db_user
和db_password
是docker secret
的名字,external
表示使用外部的docker secret
中的祕鑰 -
在應用中使用
需要在應用內部指定使用了那些祕鑰version: '3' volumes: mysql-data: services: mysql: image: mysql secrets: - db_password secrets: db_password: external: true
-
在容器中訪問祕鑰
祕鑰檔案會掛載到容器中的/run/secret/
目錄, 故可以通過/run/secret/<secret-name>
的形式訪問祕鑰
也就是說, 可以將/run/secret/<secret-name>
作為環境變數的形式傳入到程式中version: '3' volumes: mysql-data: services: mysql: image: mysql secrets: - db_password environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password MYSQL_DATABASE: test_database volumes: - mysql-data:/var/lib/mysql secrets: db_password: external: true
也可不用
docker secret
, 直接將檔案讀入version: '3' volumes: mysql-data: services: mysql: image: mysql secrets: - db_password environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password MYSQL_DATABASE: test_database volumes: - mysql-data:/var/lib/mysql secrets: db_password: file: ./db_password.txt
那些程式是否可以通過環境變數指定祕鑰, 請查詢對應程式的文件
-
-
dns
自定義 DNS 伺服器,可以是單個值或列表
dns: 8.8.8.8 dns: - 8.8.8.8 - 114.114.114.114
-
extra_hosts
新增主機名對映
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
-
devices
指定裝置對映關係
devices: - "/dev/ttyUSB0:/dev/ttyUSB0"
-
其他
domainname: your_website.com # 容器中搜索域名 hostname: test # 容器中主機名 mac_address: 08-00-27-00-0C-0A # 容器mac 地址 privileged: true # 允許容器中執行一些特權命令。 # 指定容器退出後的重啟策略為始終重啟。 restart: always # 生產環境推薦配置為 always
networks
network_mode 設定網路模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
networks 配置容器連線的網路
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
volumes
資料卷所掛載路徑設定。
可以設定為宿主機路徑(HOST:CONTAINER
)或者資料卷名稱(VOLUME:CONTAINER
),並且可以設定訪問模式 (HOST:CONTAINER:ro
)。
自定義資料卷,位於宿主機/var/lib/docker/volumes
內
version: "3"
services:
my_sql:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql # 資料卷名稱
- cache/:/tmp/cache # 宿主機路徑
- ~/configs:/etc/configs/:ro # 宿主機路徑
volumes:
mysql_data: # 位於宿主機/var/lib/docker/volumes內
讀取變數
Compose 模板檔案支援動態讀取主機的系統環境變數和當前目錄下的 .env
檔案 中的變數
使用類似shell的方式
環境變數
version: "3"
services:
db:
image: "mongo:${MONGO_VERSION}"
使用.env檔案
# 支援註釋
MONGO_VERSION=3.6
例子
docker-compose命令
命令格式: docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
命令選項:
-f, --file FILE
指定模板檔案,預設為docker-compose.yml
,可以指定多個檔案-p, --project-name NAME
指定專案名稱,預設使用所在目錄名--verbose
輸出更多除錯資訊-v, --version
列印版本並退出-H, --host HOST
指定連線到哪個守護程序
執行命令的的環境
檔案結構:
-- test
|-- docker-compose.yaml
`-- db_password.txt
docker-compose.yaml
:
version: '3'
volumes:
mysql-data:
services:
mysql:
image: mysql
ports:
- 3306:3306
secrets:
- db_password
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
MYSQL_DATABASE: test_database
volumes:
- mysql-data:/var/lib/mysql
secrets:
db_password:
file: ./db_password.txt
db_password.txt
:
123456789
檢視版本version
檢視版本資訊。
$docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
構建並啟動服務up
自動構建,(重新)建立服務
啟動服務並在控制檯聚合顯示每個容器的日誌
命令選項:
-d
在後臺執行服務容器--no-color
不使用顏色來區分不同的服務的控制檯輸出--no-deps
不啟動服務所連結的容器--force-recreate
強制重新建立容器,不能與--no-recreate
同時使用--no-recreate
如果容器已經存在了,則不重新建立,不能與--force-recreate
同時使用--no-build
不自動構建缺失的服務映象--no-start
僅建立服務但不啟動-t, --timeout TIMEOUT
在附加或容器已執行時,超時(預設為 10 秒)關閉容器-V, --renew-anon-volumes
重新建立匿名卷,而不是從以前的容器中檢索資料--remove-orphans
刪除未在 Compose 檔案中定義的服務的容器--scale SERVICE=NUM
設定為服務執行的容器數量。會覆蓋 Compose 檔案中的scale
設定
$docker-compose up -d
Pulling mysql (mysql:)...
latest: Pulling from library/mysql
ffbb094f4f9e: Pull complete
df186527fc46: Pull complete
fa362a6aa7bd: Pull complete
5af7cb1a200e: Pull complete
949da226cc6d: Pull complete
bce007079ee9: Pull complete
eab9f076e5a3: Pull complete
8a57a7529e8d: Pull complete
b1ccc6ed6fc7: Pull complete
b4af75e64169: Pull complete
3aed6a9cd681: Pull complete
23390142f76f: Pull complete
Digest: sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727
Status: Downloaded newer image for mysql:latest
Creating test_mysql_1 ... done
使用:
docker-compose up --build
對已經構建的容器進行重新構建
停止服務down
停止容器並移除由up
命令建立的容器、網路、卷和映象。 定義為external
的網路和卷不會被移除。
$docker-compose down
Stopping test_mysql_1 ... done
WARNING: Found orphan containers (test_redis_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Removing test_mysql_1 ... done
Removing network test_default
進入容器exec
進入指定的容器, 進行互動式操作
$docker-compose exec mysql /bin/bash
$mysql -uroot -p123456789
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
列出服務ps
列出專案中的所有容器
$docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------
test_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
檢視程序top
檢視各個服務內正在執行的程序。
$docker-compose top
test_mysql_1
UID PID PPID C STIME TTY TIME CMD
-------------------------------------------------------------
polkitd 26429 26410 1 17:11 ? 00:00:02 mysqld
停止服務kill
強制停止執行中的服務容器
格式為docker-compose kill [options] [SERVICE...]
支援通過-s
引數來指定要傳送的訊號
$docker-compose kill mysql
Killing test_mysql_1 ... done
啟動服務start
啟動用於服務的現有容器
$docker-compose start mysql
Starting mysql ... done
停止服務stop
停止已經處於執行狀態的容器,但不刪除它
$docker-compose stop mysql
Stopping test_mysql_1 ... done
執行容器run
針對服務執行一次性命令
命令選項:
-d
後臺執行容器--name NAME
為容器指定一個名字--entrypoint CMD
覆蓋預設的容器啟動指令。-e KEY=VA
設定環境變數值,可多次使用選項來設定多個環境變數-u, --user=""
指定執行容器的使用者名稱或者uid--no-deps
不自動啟動關聯的服務容器--rm
執行命令後自動刪除容器,d
模式下將忽略-p, --publish=[]
對映容器埠到本地主機--service-ports
配置服務埠並對映到本地主機-T
不分配偽 tty,意味著依賴 tty 的指令將無法執行
$docker-compose run
刪除容器rm
刪除停止的容器
預設情況下,不刪除附加到容器的匿名卷。您可以使用
-v
覆蓋它
$docker-compose rm mysql
暫停和取消暫停服務pause
/unpause
暫停正在執行的容器,可通過unpause
取消暫停
格式為: docker-compose pause [SERVICE...]
暫停:
$docker-compose pause
Pausing test_mysql_1 ... done
檢視狀態:
$docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
test_mysql_1 docker-entrypoint.sh mysqld Paused 3306/tcp, 33060/tcp
取消暫停:
$docker-compose unpause
Unpausing test_mysql_1 ... done
重啟服務restart
重啟專案中的服務
$docker-compose restart
Restarting test_mysql_1 ... done
構建服務build
構建(重新構建)並標記服務
格式: docker-compose build [options] [SERVICE...]
不指定sevice時, 為全部服務
檢驗配置config
驗證並檢視 Compose 檔案
$docker-compose config
secrets:
my_secret:
file: /opt/script-docker/test/my_secret.txt
services:
mysql:
environment:
MYSQL_DATABASE: test_database
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
image: mysql
secrets:
- source: my_secret
volumes:
- mysql-data:/var/lib/mysql:rw
version: '3'
volumes:
mysql-data: {}
監測時間events
監測專案中容器事件
使用--json
標誌時,每行將列印一個json
物件
$docker-compose events
檢視幫助help
顯示命令的幫助和用法說明
$docker-compose help
檢視日誌logs
檢視服務的日誌輸出
格式為docker-compose logs [options] [SERVICE...]
選項:
--no-color
# 關閉不同服務用不同顏色顯示的功能-f, --follow
# 實時監控日誌-t, --timestamps
# 顯示時間戳--tail="all"
# 顯示所有日誌
檢視埠port
列印某個容器所對映的公共埠
格式為docker-compose port [options] SERVICE PRIVATE_PORT
$docker-compose port mysql 3306
0.0.0.0:3306
列出映象images
列出 Compose 檔案中包含的映象
$docker-compose images
Container Repository Tag Image Id Size
------------------------------------------------------------
test_mysql_1 mysql latest bbf6571db497 515.6 MB
拉取映象pull
拉取服務依賴的映象
可通過--ignore-pull-failures
引數忽略拉取映象過程中的錯誤
$docker-compose pull
推送映象push
推送服務所依賴的映象到映象倉庫。
$docker-compose push
Kubernetes
TODO: 待補充
推薦閱讀: 《Docker必知必會系列》
本文來自部落格園,作者:忞翛,轉載請註明原文連結:https://www.cnblogs.com/lczmx/p/15646377.html