1. 程式人生 > 其它 >Docker 及 Docker Compose 日常操作(團隊培訓材料)

Docker 及 Docker Compose 日常操作(團隊培訓材料)

背景

質量團隊 Docker 日常操作培訓,提升團隊整體 Docker 容器水平。

注: 以下命令操作都是在 Centos 7 演示的

簡介

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。

Docker Compose 是用於定義和執行多容器 Docker 應用程式的工具。

類似的還有 ContainerdPodman

Docker 思想

  • 集裝箱
  • 標準化: 運輸方式、儲存方式、API介面
  • 隔離、安全

Docker 的優點

  • 快速,且一致的執行環境
  • 彈性伸縮,快速擴充套件
  • 隔離性
  • 遷移方便,天熱的便於持續交付和部署

Docker 核心概念

  • 映象(Image):Docker 映象(Image),就相當於是一個 root 檔案系統。比如官方映象 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 檔案系統。
  • 容器(Container):映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。
  • 倉庫(Repository):倉庫可看成一個程式碼控制中心,用來儲存映象。官方公開映象倉庫為:Docker Hub,也可用 Harbor、Nexus 等搭建私有 Docker 映象倉庫。

安裝

# 解除安裝舊 docker 和 docker-compose
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  docker-compose
                  
# 配置 docker-ce 的 yum 源(阿里雲)
$ cat << EOF > /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

# 安裝 docker 和 docker-compose
$ sudo yum install -y docker-ce docker-ce-cli containerd.io bash-completion docker-compose

# 配置 docker 自動提示
$ cp /usr/share/bash-completion/completions/docker /etc/bash_completion.d/

# 配置開機啟動
$ sudo systemctl enable --now docker

# 檢視狀態、啟停、重啟 docker
$ sudo systemctl [status|start|stop|restart] docker

# 檢視安裝版本
$ docker --version
Docker version 20.10.6, build 370c289
$ docker-compose --version
docker-compose version 1.18.0, build 8dd22a9

Docker 配置

Docker 國內映象加速

# 設定國內映象加速
$ cat << EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    # Docker 中國區官方映象
    "https://registry.docker-cn.com",
    # 網易
    "https://hub-mirror.c.163.com/",
    # 中科大
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

# 重啟生效
$ systemctl restart docker

# 檢視映象加速設定
$ docker info | grep "Registry Mirrors" -A 3

Docker 使用場景

Docker 安裝 Mysql 5.7

Docker 常用命令

Docker 映象日常操作

# 搜尋映象,也可在 docker hub web 檢視
$ docker search mysql

# 下載映象,預設版本為:latest
$ docker pull mysql
$ docker pull mysql:5.7

# 檢視映象
$ docker images

# 檢視所有映象(-a, --all),僅列出映象 id(-q, --quiet)
$ docker images -aq

# 顯示映象構建歷史
$ docker history mysql

# 顯示完整映象構建命令,且格式化輸出
$ docker history mysql --format "table {{.ID}}\t{{.CreatedBy}}" --no-trunc

# 刪除映象
$ docker rmi mysql

# 命名 tag
$ docker tag mysql:5.7 daodaotest/mysql:5.7

# 登入、退出倉庫
$ docker login
$ docker logout

# 上傳映象
$ docker push daodaotest/mysql:5.7

# 匯出、匯入映象
$ docker save -o mysql57.tar mysql:5.7
$ docker load < mysql57.tar

Docker 容器日常操作

# 互動式啟動容器
$ docker run -it busybox /bin/sh

# 啟動容器執行命令,退出後自動刪除容器
$ docker run --rm busybox sh -c 'echo "1+1" | bc'

# 啟動 Mysql 容器示例
$ docker run -d -p 3306:3306 --name mysql \
-v /home/mysql/mysql/conf:/etc/mysql \
-v /home/mysql/mysql/logs:/var/log/mysql \
-v /home/mysql/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=daodaotest \
mysql:5.7

引數說明:

  • -i:標準輸入給容器
  • -t:分配一個虛擬終端
  • --rm:退出後自動刪除容器,臨時測試時多用
  • -d:後臺執行容器,並返回容器 ID
  • -p:指定埠對映,格式為:主機(宿主)埠:容器埠
  • --name:容器名稱,此處為mysql
  • -v:宿主機和容器的目錄對映關係,“:” 前為宿主機目錄
  • -e:配置資訊,此處配置 Mysql 的 root 密碼
# 顯示啟動狀態容器
$ docker ps

# 顯示最後建立容器
$ docker ps -l

# 顯示所有容器
$ docker ps -a

# 啟動、停止、重啟容器
$ docker [stop|start|restart] mysql

# 啟動容器
$ docker start mysql

# 檢視容器詳細資訊
$ docker inspect mysql

# 格式化輸出特定資訊
$ ocker inspect mysql -f '{{ .NetworkSettings.IPAddress }}'

# 檢視容器變化
$ docker diff mysql

# 檢視容器中程序
$ docker top mysql

# 檢視容器 log,實時輸出(-f)
$ docker logs mysql
$ docker logs -f mysql

# 連線到容器
$ docker attach mysql

# 容器裡執行命令
$ docker exec -it mysql uname -a

Docker Volume 日常操作

# 檢視 volume 相關幫助
$ docker volume

# 建立 volume
$ docker volume create daodaotest

# 檢視所有 volume
$ docker volume ls

# 檢視 volume 詳細資訊
$ docker volume inspect daodaotest

# 刪除 volume
$ docker volume rm daodaotest

# 慎用,清除本地所有 volume
$ docker volume prune

Docker 常用批量操作

# 批量強制停止所有容器
$ docker kill $(docker ps -aq)

# 批量強制刪除所有容器
$ docker kill $(docker ps -aq) && docker rm $(docker ps -aq)

# 批量刪除tag 為 <none> 的所有映象
$ docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

# 批量刪除所有映象
$ docker rmi $(docker images -aq)

Dockerfile 使用場景

基於 AdoptOpenjdk 官方 Dockerfile 製作 jre8 映象(修改字符集和時區)

Docker 倉庫搭建(Harbor)

Harbor 2.2.0 搭建與使用

Docker Compose 使用場景

Docker Compose 方式安裝 SonarQube 8.3.1

Docker Compose 日常操作

與 Docker 命令類似,僅列出常用命令。

# 構建並後臺啟動容器
$ docker-compose up -d

# 檢視執行容器
$ docker-compose ps

# 動態檢視日誌
$ docker-compose logs -f

# 啟動、停止、強制停止、重啟
$ docker-compose [start|stop|kill|restart]

# 刪除已經停止的容器
$ docker-compose rm

# 停止並刪除執行的容器
$ docker-compose down