文章目錄
1 Docker 簡介
Docker 是一個開源的應用容器引擎,基於Go語言並遵從 Apache2.0 協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
- 官網:https://www.docker.com/
- 官方文檔: https://docs.docker.com/engine/
- 菜鳥教程: https://www.runoob.com/docker/docker-tutorial.html
1.1 Docker的優點
1.1.1 快速、一致的交付應用程序
Docker 允許開發人員使用您提供的應用程序或服務的本地容器在標準化環境中工作,從而簡化了開發的生命週期。
容器非常適合持續集成和持續交付(CI / CD)工作流程,請考慮以下示例方案:
- 您的開發人員在本地編寫代碼,並使用 Docker 容器與同事共享他們的工作。
- 他們使用 Docker 將其應用程序推送到測試環境中,並執行自動或手動測試。
- 當開發人員發現錯誤時,他們可以在開發環境中對其進行修復,然後將其重新部署到測試環境中,以進行測試和驗證。
- 測試完成後,將修補程序推送給生產環境,就像將更新的鏡像推送到生產環境一樣簡單。
1.1.2 響應式部署和擴展
Docker 是基於容器的平臺,允許高度可移植的工作負載。Docker 容器可以在開發人員的本機上,數據中心的物理或虛擬機上,雲服務上或混合環境中運行。
Docker 的可移植性和輕量級的特性,還可以使您輕鬆地完成動態管理的工作負擔,並根據業務需求指示,實時擴展或拆除應用程序和服務。
1.1.3 輕便高效
Docker 輕巧快速。它爲基於虛擬機管理程序的虛擬機提供了可行、經濟、高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker 非常適合於高密度環境以及中小型部署,而您可以用更少的資源做更多的事情。
1.2 Docker架構
1.2.1 Image 鏡像
Docker 鏡像(Image),就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
1.2.2 Container 容器
鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。
1.2.3 Repository 倉庫
倉庫可看成一個代碼控制中心,用來保存鏡像。類似於Maven的倉庫。
2 Docker安裝
2.1 CentOS安裝
2.1.1 一鍵安裝
# 官方腳本(使用阿里鏡像):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 國內daocloud一鍵安裝:
curl -sSL https://get.daocloud.io/docker | sh
2.1.2 手動安裝
# 如果有舊版本,先卸載
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 設置yum阿里鏡像
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝,先更新yum倉庫
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 安裝,如果提示您接受 GPG 密鑰,請選是。
sudo yum install docker-ce docker-ce-cli containerd.io
# 啓動
sudo systemctl start docker
# 測試是否可用
sudo docker run hello-world
2.2 Ubuntu安裝
2.2.1 一鍵安裝
# 官方腳本(使用阿里鏡像):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 國內daocloud一鍵安裝:
curl -sSL https://get.daocloud.io/docker | sh
2.2.2 手動安裝
# 如果有舊版本,先卸載
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt包索引
sudo apt-get update
# 安裝apt依賴包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 設置穩定版倉庫
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 更新apt包索引
sudo apt-get update
# 安裝最新版本的 Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 測試是否可用
sudo docker run hello-world
2.3 阿里鏡像加速
3 Docker常用命令
3.1 Image 相關命令
3.1.1 搜索鏡像
也可以從官方倉庫網頁搜:https://hub.docker.com/
# 返回值說明:
# NAME: 鏡像倉庫源的名稱
# DESCRIPTION: 鏡像的描述
# OFFICIAL: 是否 docker 官方發佈
# stars: 類似 Github 裏面的 star,表示點贊、喜歡的意思。
# AUTOMATED: 自動構建。
docker search ubuntu
3.1.2 拉取鏡像
# 下載鏡像
docker pull ubuntu:13.10
# 查看鏡像信息
## 返回值說明:
## REPOSITORY:鏡像的倉庫源
## TAG:鏡像的標籤
## IMAGE ID:鏡像ID
## REATED:鏡像創建時間
## SIZE:鏡像大小
docker images
3.1.3 運行鏡像
在Docker中,有兩種方式可以指定某個鏡像:
REPOSITORY:TAG
IMAGE ID
,當引用IMAGE ID
時可以使用簡寫,即只輸入IMAGE ID
前兩位數即可。如果存在多個鏡像簡寫的值一致,則使用簡寫時會報錯。
# -t: 終端
# -i: 交互式操作
# -d: 後臺運行,多個參數可以在一起寫: -itd
# -p: 端口映射,80:8080表示宿主機的80端口映射容器的8080端口。
# 即訪問宿主機80端口相當於訪問容器8080端口。該參數可重複使用進行多端口映射。
# --name , test爲自定義容器名
# /bin/bash:放在鏡像名後的是命令,這裏我們希望有個交互式 Shell,因此用的是 /bin/bash。
# 如果用/bin/bash報錯,則用/bin/sh
docker run -t -i -d --name test openjdk:11 /bin/bash
# 以下命令效果相同
# 這裏的 f5 就是這個鏡像的IMAGE ID:f5de33dc9079的簡寫
docker run -itd f5 /bin/bash
docker run -tid f5de33dc9079 /bin/bash
3.1.4 刪除鏡像
docker rmi openjdk
3.1.5 重命名鏡像
如果下載的鏡像名稱太長,我們可以通過docker tag
命令重新給鏡像打個標籤(有重命名的效果,但不是真正的重命名)。
docker tag
命令本文先不進行詳細介紹了,有興趣的小夥伴可以訪問文章開頭的官網或者菜鳥教程學習哦~
docker tag openjdk:11 myjdk:1
3.2 Container 相關命令
在Docker中,我們有兩種方式可以指定某個容器:
NAME
,容器名,啓動鏡像時指定。IMAGE ID
,當引用IMAGE ID
時可以使用簡寫,即只輸入IMAGE ID
前兩位數即可。如果存在多個容器簡寫的值一致,則使用簡寫時會報錯。
3.2.1 查看容器
# 默認只查看運行中的
docker ps
# 查看所有
docker ps -a
3.2.2 啓動/停止容器
# 啓動
docker start test
# 重啓
docker restart 242480ce4d72
# 停止
docker stop 24
3.2.3 刪除容器
docker rm test
3.2.4 進入容器
進入容器就相當於進入一個Linux系統一樣,只是爲了讓鏡像更輕便,這些Linux系統的工具會非常少,只有最基礎的命令,絕大部分連vi
命令都沒有,需要手動安裝。
而根據鏡像所選的基礎系統不同,安裝工具也不同:
· 基於Ubuntu系統的通過apt
命令安裝。
· 基於RedHad系統的通過yum
命令安裝。
進入容器後,如果需要退出容器,輸入 exit 回車即可
# -t: 終端
# -i: 交互式操作
# /bin/bash:放在鏡像名後的是命令,這裏我們希望有個交互式 Shell,因此用的是 /bin/bash。
## 如果用/bin/bash報錯,則用/bin/sh
docker exec -it myubuntu /bin/bash
3.2.5 查看容器日誌
使用docker logs
查看容器日誌。
# -f 動態加載,即有新日誌時會實時加載出來
# --tail 100 只加載最後100行
# | grep **** 搜索指定字符並輸出其所在行
# > temp.txt Linux中 '>' 代表輸出, '<'代表輸入
# 這裏的意思就是將輸出的值存入當前目錄的temp.txt文件中
# 以上所有選項按需選擇即可
docker logs -f --tail 100 myubuntu | grep 博主真帥 > temp.txt
3.2.6 查看容器信息
如果需要檢查容器的配置文件,尤其是當容器啓動失敗時,我們可以通過使用docker inspect
命令查看容器信息,找到該容器在宿主機中的路徑。
在下圖中,通過docker inspect myubuntu | grep Dir
命令可以找到紅框中的值:/var/lib/docker/overlay2/eaafdf5cb63f8180ab5e26036d6e3acc2ab518ad8ca9a0d597dd106712878557即容器所在的路徑。有些容器中並沒有merged目錄,因此我們cd
到其父目錄下肯定是可以的。
# 輸出`myybuntu`容器的詳細信息
docker inspect myubuntu
# | grep Dir 只輸出包含'Dir'字符的行
docker inspect myubuntu | grep Dir
3.2.7 查看容器運行情況
# 查看所有已啓動的容器的資源消耗情況
docker stats
# 查看指定容器的資源消耗情況
docker stats myubuntu
# 查看指定容器的進程信息
docker top myubuntu
# 查看所有容器的進程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
4 Docker 安裝常見應用
4.1 Docker 安裝 Mysql
官網倉庫:https://hub.docker.com/_/mysql?tab=tags
需要提一下的是,如果是有一定數據量或壓力的生產環境,最好還是不要用Docker運行Mysql,畢竟中間有個Docker,所以性能方面肯定是沒有直接安裝在服務器上的好。在本地或者測試環境就無所謂了。
# 不指定TAG時,默認下載最新版
docker pull mysql
# 指定標籤
docker pull mysql:8.0.20
# 搜索可用版本
docker search mysql
# 運行鏡像
# -e 自定義參數, 這些參數在上述官網中有詳細描述
# MYSQL_ROOT_PASSWORD=123456:設置 MySQL 服務 root 用戶的密碼。
docker run -itd --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
# 查看是否運行成功
docker ps
4.2 Docker 安裝 Redis
安裝步驟與安裝Mysql大同小異
# 不指定TAG時,默認下載最新版
docker pull redis
# 指定標籤
docker pull redis:6.0.5
# 搜索可用版本
docker search redis
# 運行鏡像
docker run -itd --name redis6 -p 6379:6379 redis
# 查看是否運行成功
docker ps
5 總結
本文簡單介紹了Docker的基本使用,後面有時間再整理Dockerfile
和Docker Compose
相關的知識點。
相對於文章開頭對Docker架構/優點等文字性的描述,相信大家在實際操作後對Docker會有更深刻的認識。
如果本文對你有所幫助,記得雙擊麼麼噠~