Docker 及 Docker Compose 日常操作(團隊培訓材料)
阿新 • • 發佈:2021-06-16
背景
質量團隊 Docker 日常操作培訓,提升團隊整體 Docker 容器水平。
注: 以下命令操作都是在 Centos 7
演示的
簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言
並遵從 Apache2.0
協議開源。
Docker Compose
是用於定義和執行多容器 Docker 應用程式的工具。
類似的還有 Containerd
和 Podman
。
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 常用命令
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)
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