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

