Ubuntu系統(tǒng)下Docker鏡像構(gòu)建與容器管理的完整指南
一、安裝Docker
依次按照下面步驟即可完成docker的安裝。
1、更新軟件源
sudo apt update
2、安裝基本軟件
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
3、指定使用阿里云鏡像
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
4、安裝docker-ce
sudo apt-get install docker-ce -y
5、查看docker版本
docker version
6、配置可用鏡像源,創(chuàng)建daemon.json文件,切換到/etc/docker
cd /etc/docker
sudo touch daemon.json
7、編輯/etc/docker/daemon.json文件
sudo vim daemon.json
8、把下面的內(nèi)容復(fù)制到daemon.json文件中
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}9、重啟docker
systemctl daemon-reload systemctl restart docker
10、繼續(xù)驗證和部署
# 1. 拉取測試鏡像 docker pull hello-world
docker run hello-world
11、拉取nginx
# 1. 拉取 Nginx docker pull nginx # 2. 運行 Nginx 容器 docker run -d --name my-nginx -p 8080:80 nginx # 3. 查看運行狀態(tài) docker ps

12、拉取redis
docker run -d --name my-redis -p 6380:6379 redis
13、拉取mysql
docker run -d --name my-mysql -p 3366:3365 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
二、鏡像構(gòu)建
1. 什么是 Docker 鏡像
- 它是一個只讀的模板,包含了運行應(yīng)用所需的一切:代碼、依賴庫、配置文件、環(huán)境變量等。
- 可以把它想象成一個打包好的綠色軟件安裝包,拿到哪里都能直接運行,不用再裝依賴。
- 鏡像的底層是分層存儲:比如
nginx:alpine鏡像,底層是 Alpine Linux 系統(tǒng),上層是 Nginx 服務(wù),每一層都是只讀的,修改時只會在最上層添加新層,節(jié)省空間。
2. 鏡像構(gòu)建的兩種方式
方式 1:拉取官方鏡像(docker pull)
命令格式:
docker pull 鏡像名:版本 # 比如: docker pull nginx:alpine docker pull mysql:8.0 docker pull redis:alpine
原理:從 Docker Hub(官方鏡像倉庫)下載別人已經(jīng)構(gòu)建好的鏡像,直接用,不用自己寫配置。
配置的國內(nèi)鏡像源 ustc.edu.cn 就是用來加速下載的,面試可以說:“我配置了國內(nèi)鏡像源,解決了官方倉庫訪問慢的問題”。
方式 2:自定義構(gòu)建(docker build+ Dockerfile)
核心文件:Dockerfile(鏡像的構(gòu)建腳本)
一個完整的 Nginx 項目鏡像構(gòu)建流程:
1.準備項目文件:index.html(你的網(wǎng)頁代碼)
2.寫 Dockerfile:
# 1. 基礎(chǔ)鏡像:基于輕量版 Nginx 構(gòu)建 FROM nginx:alpine # 2. 復(fù)制本地文件到容器的 Nginx 目錄 COPY index.html /usr/share/nginx/html/index.html # 3. 聲明容器提供服務(wù)的端口 EXPOSE 80 # 4. 容器啟動時執(zhí)行的命令(讓 Nginx 前臺運行,容器不會退出) CMD ["nginx", "-g", "daemon off;"]
3.構(gòu)建鏡像:
docker build -t my-web-app:v1 .
我了解 Dockerfile 編寫,能將靜態(tài)項目打包成鏡像,實現(xiàn)一次構(gòu)建、隨處運行,解決了開發(fā)環(huán)境和生產(chǎn)環(huán)境不一致的問題。
二、容器啟動、端口映射與環(huán)境隔離
1. 容器是什么?和鏡像的關(guān)系?
- 容器是鏡像運行起來的實例,一個鏡像可以啟動無數(shù)個容器。
- 鏡像只讀,容器可寫:啟動容器時,Docker 會在鏡像的只讀層上添加一個可寫層,所有修改都發(fā)生在可寫層,不會影響鏡像本身。
- 容器和虛擬機的區(qū)別:
- 虛擬機:模擬一整套硬件,運行完整的操作系統(tǒng),占用資源多、啟動慢。
- Docker 容器:共享主機的內(nèi)核,只打包應(yīng)用和依賴,占用資源少、秒級啟動,這就是 “輕量級容器化” 的優(yōu)勢。
2. 容器啟動(docker run)
命令格式:
docker run [參數(shù)] 鏡像名
你必須掌握的 3 個核心參數(shù):
-d:后臺運行容器,不占用終端,比如docker run -d nginx:alpine--name:給容器起個名字,方便管理,比如docker run -d --name my-nginx nginx:alpine-e:設(shè)置環(huán)境變量,比如啟動 MySQL 時設(shè)置密碼:docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
3. 端口映射(-p)—— 外部訪問容器服務(wù)的關(guān)鍵
命令格式:
docker run -p 主機端口:容器端口 鏡像名 # 比如: docker run -d -p 8080:80 --name my-nginx nginx:alpine
含義:把主機的 8080 端口,映射到容器的 80 端口(Nginx 默認端口),外部訪問主機IP:8080 就能訪問容器里的 Nginx 服務(wù)。
我了解 Docker 端口映射原理,能將容器服務(wù)暴露到主機網(wǎng)絡(luò),實現(xiàn)外部訪問,同時通過不同主機端口區(qū)分多個同類型容器,避免端口沖突。
4. 環(huán)境隔離(Docker 的核心優(yōu)勢)
- 每個容器都有獨立的:
- 文件系統(tǒng):容器里的文件不會影響主機和其他容器
- 網(wǎng)絡(luò)棧:默認使用橋接網(wǎng)絡(luò),每個容器有獨立的 IP,互相隔離
- 進程空間:容器里的進程是主機進程的子進程,互相不干擾
- 作用:提升應(yīng)用部署的安全性,比如你在容器里裝的軟件,不會污染主機環(huán)境;Nginx 容器崩潰了,不會影響 MySQL 容器。
- 我了解 Docker 的環(huán)境隔離機制,容器之間相互隔離,互不影響,提升了應(yīng)用部署的安全性和穩(wěn)定性,也方便了多版本、多服務(wù)的并行部署。
三、快速部署 MySQL、Redis、Nginx 等中間件
1. Nginx 部署(Web 服務(wù)器)
# 拉取鏡像 docker pull nginx:alpine # 啟動容器,端口映射 8080:80 docker run -d -p 8080:80 --name my-nginx nginx:alpine
- 驗證:主機瀏覽器訪問
http://虛擬機IP:8080,能看到 Nginx 歡迎頁 - 我能通過 Docker 快速部署 Nginx 服務(wù),配置端口映射,實現(xiàn)靜態(tài)資源的訪問,也能通過掛載本地配置文件修改 Nginx 配置。
2. MySQL 部署(數(shù)據(jù)庫)
# 拉取鏡像 docker pull mysql:8.0 # 啟動容器,設(shè)置 root 密碼,端口映射 3306:3306 docker run -d -p 3306:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
驗證:用主機的數(shù)據(jù)庫工具(Navicat)連接 虛擬機IP:3306,用戶 root,密碼 123456
我能通過 Docker 快速部署 MySQL 服務(wù),設(shè)置 root 密碼,配置端口映射,實現(xiàn)外部客戶端連接,也了解數(shù)據(jù)卷掛載,將數(shù)據(jù)持久化到主機,避免容器刪除后數(shù)據(jù)丟失。
3. Redis 部署(緩存)
# 拉取鏡像 docker pull redis:alpine # 啟動容器,端口映射 6379:6379 docker run -d -p 6379:6379 --name my-redis redis:alpine
- 驗證:用 Redis 客戶端連接
虛擬機IP:6379,能正常讀寫數(shù)據(jù) - 我能通過 Docker 快速部署 Redis 緩存服務(wù),配置端口映射,實現(xiàn)外部客戶端連接,也了解 Redis 持久化配置。
四、容器生命周期管理
| 階段 | 命令 | 格式 | 作用 |
|---|---|---|---|
| 創(chuàng)建啟動 | docker run | docker run [參數(shù)] 鏡像名 | 創(chuàng)建并啟動容器 |
| 查看狀態(tài) | docker ps | docker ps | 查看正在運行的容器 |
docker ps -a | docker ps -a | 查看所有容器(包括已停止的) | |
| 運行中操作 | docker exec | docker exec -it 容器名 /bin/bash | 進入運行中的容器,調(diào)試命令 |
docker logs | docker logs 容器名 | 查看容器日志 | |
| 停止重啟 | docker stop | docker stop 容器名 | 優(yōu)雅停止容器 |
docker start | docker start 容器名 | 啟動已停止的容器 | |
docker restart | docker restart 容器名 | 重啟容器 | |
| 刪除清理 | docker rm | docker rm 容器名 | 刪除已停止的容器 |
docker rmi | docker rmi 鏡像名 | 刪除無用鏡像 |
我熟練掌握 Docker 容器的生命周期管理,能通過命令實現(xiàn)容器的創(chuàng)建、啟動、停止、重啟、刪除,也能通過 docker exec 進入容器調(diào)試,查看日志排查問題”。
五、將項目打包鏡像并發(fā)布運
- 準備項目文件:你的網(wǎng)頁代碼
index.html - 編寫
Dockerfile:定義鏡像的構(gòu)建規(guī)則 - 構(gòu)建鏡像:
docker build -t my-project:v1 . - 運行容器:
docker run -d -p 8080:80 my-project:v1 - 發(fā)布運行:可以把鏡像推送到私有倉庫,在其他服務(wù)器上拉取運行,實現(xiàn)一次構(gòu)建、隨處運行。
我了解 Docker 項目打包流程,能將靜態(tài)項目通過 Dockerfile 構(gòu)建成鏡像,實現(xiàn)應(yīng)用的容器化部署,解決了開發(fā)環(huán)境和生產(chǎn)環(huán)境不一致的問題,也方便了項目的持續(xù)集成與交付”。
六、高頻問題
Docker 鏡像和容器的區(qū)別?
- 鏡像:只讀模板,用來創(chuàng)建容器,多個容器可以共享同一個鏡像
- 容器:鏡像運行起來的實例,可寫,每個容器相互隔離
Docker 容器和虛擬機的區(qū)別?
- 虛擬機:模擬硬件,運行完整操作系統(tǒng),占用資源多、啟動慢
- Docker 容器:共享主機內(nèi)核,只打包應(yīng)用和依賴,輕量、秒級啟動,隔離性稍弱但足夠滿足業(yè)務(wù)需求
Docker 端口映射的原理?
Docker 會在主機上監(jiān)聽指定端口,把請求轉(zhuǎn)發(fā)到容器的對應(yīng)端口,外部通過主機端口訪問容器服務(wù)
到此這篇關(guān)于Ubuntu系統(tǒng)下Docker鏡像構(gòu)建與容器管理的完整指南的文章就介紹到這了,更多相關(guān)Docker鏡像構(gòu)建與容器管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker加載鏡像時報錯no space left on device的徹底解
本文詳細記錄了在部署FastDDS鏡像時遇到磁盤空間不足的問題,并介紹了從排查到徹底解決的完整過程,通過分析根分區(qū)空間占用情況,將Docker數(shù)據(jù)根目錄遷移到大分區(qū),并修改daemon.json文件中的data-root配置,最終成功解決了問題,需要的朋友可以參考下2025-11-11
Docker數(shù)據(jù)卷掛載及宿主機目錄掛載使用和區(qū)別
本文主要介紹了Docker數(shù)據(jù)卷掛載及宿主機目錄掛載使用和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2024-02-02
docker添加網(wǎng)橋并設(shè)置ip地址范圍操作
這篇文章主要介紹了docker添加網(wǎng)橋并設(shè)置ip地址范圍操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
docker搭建lnmp環(huán)境的實現(xiàn)步驟
DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一鍵安裝程序,本文就來介紹一下docker搭建lnmp環(huán)境的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下2024-07-07

