相信你對封面圖上的「Docker 鯨魚」圖標并不陌生 —— 它正是解決「開發環境能跑,生產環境崩了」的容器化神器!Docker 通過打包應用與依賴到輕量容器,實現了「一次構建,到處運行」,徹底消除環境不一致的痛點。本文從 Docker 核心概念(鏡像 / 容器 / 倉庫)講起,手把手教你安裝配置、構建自定義鏡像、Docker Compose 編排多容器,最后附上 SpringBoot 項目容器化部署的完整實戰,讓運維小白也能快速上手容器技術!
為什么使用docker
之前都是用Linux+centos(Iso鏡像)得到一個可以使用的linux系統
然后配置數據庫 ,nginx 等
這種方式部署慢,成本高,造成了資源的浪費,并且難于遷移和擴展
并且之前的虛擬化技術(vmware,kvm)的目標都是一臺完整的計算機
而我們的需求僅僅是想使用多個應用程序,讓他們相互獨立,而不是得到一臺完整的系統
docker使用容器技術對進程進行封裝隔離
Docker 簡介
Docker 是一種容器化技術,允許開發者將應用程序及其依賴打包到一個輕量級、可移植的容器中。容器與虛擬機不同,它直接運行在宿主機的操作系統上,共享系統內核,因此更加高效和快速。
安裝 Docker
-
Windows/macOS:
- 下載 Docker Desktop(官網鏈接),安裝后啟動。
- 確保啟用 WSL 2(Windows)或 HyperKit(macOS)。
-
Linux(Ubuntu):
sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker
- 驗證安裝:
docker --version
。
- 驗證安裝:
基本概念
- 鏡像(Image):只讀模板,用于創建容器。
- 容器(Container):鏡像的運行實例,包含應用程序和運行環境。
- Dockerfile:文本文件,定義如何構建鏡像。
舉例:程序員在寫好代碼之后,要交給測試人員代碼,此時測試人員沒有環境和依賴,所以程序員會開發dockerfile腳本,完成的效果就是將代碼,依賴和環境全部打包為一個鏡像文件(image),測試人員直接運行這個鏡像就可以運行
容器
1. 容器內沒有自己的內核,也沒有對硬件進行虛擬,Docker引擎容器僅包含應用程序及其依賴項,他在主機操作系統的用戶控件中作為一個獨立的進程運行,與其他容器共享內核,因此容器中的程序直接運行在宿主機上,能夠使用宿主機最大的硬件資源
2.?一個宿主機可以啟動100+的容器數量,并且啟動一個容器的時間只需要1S
拉取第一個容器
- 拉取官方測試鏡像:
docker pull hello-world
- 運行容器:
docker run hello-world
- 輸出
Hello from Docker!
表示成功。
- 輸出
構建自定義鏡像
- 創建
Dockerfile
文件:FROM alpine:latest CMD echo "Hello, Docker!"
- 構建鏡像:
docker build -t my-image .
- 運行容器:
docker run my-image
管理容器和鏡像
- 查看運行中的容器:
docker ps
- 查看所有容器:
docker ps -a
- 停止容器:
docker stop <容器ID>
- 刪除容器:
docker rm <容器ID>
- 列出鏡像:
docker images
- 刪除鏡像:
docker rmi <鏡像名>
數據持久化(卷掛載)
- 將主機目錄掛載到容器:
docker run -v /host/path:/container/path my-image
網絡配置
- 映射容器端口到主機:
docker run -p 8080:80 nginx
- 訪問
http://localhost:8080
可看到 Nginx 默認頁面。
- 訪問
常用命令速查
命令 | 功能 | 示例 |
---|---|---|
docker run | 啟動一個新的容器并運行命令 | docker run -d ubuntu |
docker ps | 列出當前正在運行的容器 | docker ps |
docker ps -a | 列出所有容器(包括已停止的容器) | docker ps -a |
docker search | 尋找鏡像 | docker search 鏡像名 |
docker build | 使用 Dockerfile 構建鏡像 | docker build -t my-image . |
docker images | 列出本地存儲的所有鏡像 | docker images |
docker pull | 從 Docker 倉庫拉取鏡像 | docker pull ubuntu |
docker push | 將鏡像推送到 Docker 倉庫 | docker push my-image |
docker stop | 停止一個或多個容器 | docker stop container_name |
docker start | 啟動已停止的容器 | docker start container_name |
docker restart | 重啟一個容器 | docker restart container_name |
docker rmi | 刪除一個或多個鏡像 | docker rmi my-image |
docker logs | 查看容器的日志 | docker logs container_name |
docker version | 顯示 Docker 客戶端和守護進程的版本信息 | docker version |
docker? pause | 暫停容器中的所有進程 | docker pause my_container |
docker create? | 創建一個新的容易,但不會啟動它 | docker create ubuntu |
docker run -it | 啟動一個容器并進入終端 | docker run -it ubuntu bash |
| 要退出終端,直接輸入?exit: ubuntu 鏡像。 | /bin/bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash。 |
docker exec -it | 進入在后臺運行的容器 | docker exec -it ubuntu bash |