容器架構上
- 1. 什么是==容器==
- 2. 容器 vs 虛擬機(化) :star::star:
- 3. Docker極速上手指南
- 1)使用rpm包安裝docker
- 2) docker下載鏡像加速的配置
- 3) 載入鏡像大禮包(老師資料包中有)
- 4. Docker使用案例
- 1) 案例01::star::star::star::star::star:啟動nginx:1.24鏡像并通過宿主機8848端口訪問
- 2) 案例02: :star:docker run背后原理
- 3) 案例03::star::star::star::star::star:查看容器
- 4)案例04::star::star::star::star::star:刪除容器
- 5) 案例05:啟動數據庫容器
- 6) 案例06: :star::star::star::star::star:進入運行中的容器
- 7) 案例07: 容器的自啟動
- 8)案例08:查看鏡像
- 9) 案例09:拉取鏡像
- 10)案例10:刪除鏡像
- 11)案例11:啟動系統鏡像
- 12) 小結
- 5. Docker初步自定義鏡像
- 1)啟動ngx容器
- 2) 連接到容器中
- 3)進行測試
- 4)保存鏡像
- 5)根據新的鏡像創建容器并測試
1. 什么是容器
- 容器是隔離的環境中運行的一個進程,如果進程結束,容器就會停止.
- 細致:容器的隔離環境,擁有自己的ip地址,系統文件,主機名,進程管理,相當于一個mini的操作系統.
2. 容器 vs 虛擬機(化) ????
虛擬機(虛擬化) | 容器 | |
---|---|---|
優點 | 1. 使用簡單 2. 也有成熟管理工具,vmware esxi,KVM,Openstack 3. 可以隨意定制. 4. 啟動虛擬機要經歷完整的Linux啟動流程 | 1. 快速部署(擴容,彈性伸縮) 2. 大部分環境都有現成鏡像 3. 讓我們不再關注系統基礎設施,把關注點放在配置,升級,優化 4. 不依賴硬件 5. 啟動容器秒級. 6. 相當于一個進程 |
缺點 | 1. 需要硬件支持虛擬化技術(VT-X) 2. 資源利用率不高 3. 同一臺虛擬跑多個服務,可能有沖突 4. 占用資源較多. 5. 不滿足目前升級,快速擴容,快速部署,回滾不方便. | 1. 使用較為復雜 2. 共享linux系統內核,推薦使用較新linux內核. |
3. Docker極速上手指南
Linux內核: 3.10以上. 如果舊的內核需要升級內核才能使用.
- 安裝docker環境,docker-ce(開源) docker-ee(企業版)
docker環境 | ip | 配置 |
---|---|---|
oldboy-docker | 10.0.0.62/172.16.1.62 | 2c4G(至少1c2G) |
1)使用rpm包安裝docker
-
解壓oldboyedu_docker_24_rpms.tar.gz(老師資料包中):
tar xf oldboyedu_docker_24_rpms.tar.gz
-
進入目錄并安裝rpm包
cd docker_24_rpms/ yum localinstall -y *.rpm
-
檢查是否安裝成功
rpm -qa |grep docker docker-compose-plugin-2.19.1-1.el7.x86_64 docker-ce-cli-24.0.4-1.el7.x86_64 docker-buildx-plugin-0.11.1-1.el7.x86_64 docker-ce-rootless-extras-24.0.4-1.el7.x86_64 docker-ce-24.0.4-1.el7.x86_64
- 【后面工作中可以用】配置docker源(用于安裝docker)
#1.安裝相關依賴.
sudo yum install -y yum-utils#2.下載官方的docker yum源文件
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#3.替換yum源地址
sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo#4.安裝docker-ce
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin#5.啟動
systemctl enable --now docker #6.檢查
docker version 檢查
2) docker下載鏡像加速的配置
我們使用docker的時候需要下載很多docker的鏡像.為了加速下載,需要配置docker加速.
-
docker下載鏡像加速
阿里云,騰訊云有加速用的地址.
-
阿里云為例,說明如何獲取加速用的地址
- 創建目錄:
sudo mkdir -p /etc/docker
- 修改配置docker下載鏡像的加速地址(/etc/docker/daemon.json docker服務端的配置文件.)
sudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"] } EOF
- 開機自啟動與重啟
sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl enable docker
3) 載入鏡像大禮包(老師資料包中有)
#解壓大禮包的oldboyedu_useful_docker_images_v2.tar.gz
tar xf oldboyedu_useful_docker_images_v2.tar.gz#批量導入
cd oldboyedu_useful_docker_images/
for n in `ls` ;
do docker load -i $n
done
4. Docker使用案例
1) 案例01:??????????啟動nginx:1.24鏡像并通過宿主機8848端口訪問
- 使用本地已有的鏡像(nginx:1.24),如果沒有則從遠程下載。
- 運行鏡像(進程,容器)
- 設置訪問的端口8848(宿主機)訪問容器中的80端口。
- 瀏覽器訪問10.0.0.62:8848 訪問容器的80端口。
docker run -d -p 8848:80 --name nginx_v1 nginx:1.24
6f34a5df3a4049423c18ca606bbd3ae05caca4b111804d7aee598c842bd3056dss -lntup|grep 8848
tcp LISTEN 0 128 *:8848 *:* users:(("docker-proxy",pid=3680,fd=4))
tcp LISTEN 0 128 [::]:8848 [::]:* users:(("docker-proxy",pid=3686,fd=4))
- 瀏覽器訪問:http://10.0.0.62:8848
- 命令與參數
命令 作用 docker run 運行容器 -d 后臺運行 – name 指定名字,容器名字不能沖突。如果不指定就會隨機分配名字 - p 端口映射 宿主機端口,指定用容器和宿主機的端口進行關聯
2) 案例02: ??docker run背后原理
3) 案例03:??????????查看容器
docker ps #只顯示運行中的容器。docker ps -a #查看所有狀態的容器關閉,退出,。。。。
- 啟動mysql:8.0-debian
#1 啟動mysql 8.0容器
docker run -d --name mysql_8.0 -p 13306:3306 mysql:8.0-debian
7d2dc00806dd9ea73638c8ff49a333c408a50c0eab2435b424f5763a102f73ae#2 查看運行中容器,發現沒有mysql-8.0容器 docker ps |grep mysql #3. 查看所有狀態的容器 發現mysql-8.0是exit退出狀態。
docker ps -a
4)案例04:??????????刪除容器
docker rm 容器名字或id #刪除已經關閉,退出,非運行容器。
docker rm -f #強制刪除,刪除運行中的容器。docker rm -f mysql_8.0
5) 案例05:啟動數據庫容器
- 數據庫容器需要額外的參數(變量)。
- 需要通過-e參數設置MYSQL_ROOT_PASSWORD
#1. 啟動數據庫容器
docker run -d -p 13306:3306 --name mysql_8.0_v2 -e MYSQL_ROOT_PASSWORD=1 mysql:8.0-debian #2. 檢查容器狀態
docker ps |grep mysql #3. 如果沒有則通過ps -a 查看
docker ps -a |grep mysql
6) 案例06: ??????????進入運行中的容器
- 溫馨提示:進入到運行中的容器。
#連接進入mysql容器
docker exec -it mysql_8.0_v2 /bin/bash#連接進入nginx容器
docker exec -it nginx_v1 /bin/bash
可以修改首頁文件然后訪問測試。
連接后可以執行:
du -sh /
和cat /etc/os-release
查看一些容器信息。
- 小結:
- 核心掌握如何進入運行中的容器。
- exec
- -it 交互模式分配終端(命令行)
- /bin/bash進不去可以改為/bin/sh
7) 案例07: 容器的自啟動
重啟docker服務后容器都是退出狀態(關閉)
通過docker start 一個一個啟動容器。
docker start nginx_v3 docker run 的時候加上--restart=always,設置容器什么時候自動運行。
docker run -d -p 8850:80 --restart=always --name nginx_v4 nginx:1.24
通過systemctl restart docker 測試
8)案例08:查看鏡像
docker images === docker image ls
9) 案例09:拉取鏡像
- 從鏡像倉庫中下載鏡像。
docker pull nginx:alpinedocker images |grep nginx
nginx 1.24 b6c621311b44 5 weeks ago 142MB
nginx 1.24-alpine 55ba84d7d539 8 weeks ago 41.1MB
nginx alpine cc44224bfe20 19 months ago 23.5MB
nginx latest 605c77e624dd 19 months ago 141MB
10)案例10:刪除鏡像
docker rmi openjdk:10
注意要把名字和后邊的數字連起來
11)案例11:啟動系統鏡像
#1.
docker run -itd --name centos_7_v1 centos:7
#2.
docker ps |grep centos
加上-it即可。
12) 小結
docker鏡像操作 | 指令 |
---|---|
查看 | docker images |
下載 | docker pull |
刪除 | docker rmi(如果鏡像有對應的容器,則無法刪除。 |
Docker容器操作 | 指令 | 參數 |
---|---|---|
啟動容器 | docker run | -d -p –name --restart -e -itd |
查看容器 | docker ps | -a |
刪除容器 | docker rm | -f |
進入容器 | docker exec | -it xxx /bin/bash或/bin/sh |
5. Docker初步自定義鏡像
目標:我們找到的鏡像無法直接瞞足我們的需求。
解決:自定義鏡像。
- 任務目標:nginx鏡像包含bird代碼,小鳥飛飛代碼,選擇nginx:1.24。bird.zip
1)啟動ngx容器
#1.啟動
docker run -d -p 8080:80 --name bird_v1 nginx:1.24#2.檢查
docker ps |grep bird
2) 連接到容器中
- 窗口1:鏈接到容器中
docker exec -it bird_v1 /bin/bash
- 窗口2
- 發送bird目錄下面的代碼到容器中的站的目錄 /usr/share/nginx/html/
unzip bird.zip cd bird/
- 發送bird目錄下面的代碼到容器中的站的目錄 /usr/share/nginx/html/
- 上傳,把宿主機中的文件上傳到容器中:
docker cp . bird_v1:/usr/share/nginx/html/
#上傳:docker cp 宿主機目錄或文件 容器名:容器路徑 ※※※※※
#下載:docker cp 容器名:容器路徑 宿主機目錄或文件
3)進行測試
- http://10.0.0.62:8080/
- 測試成功表示:
- nginx服務是ok.
- nginx+代碼也是ok.
4)保存鏡像
- 把已經的容器保存成鏡像。
- 把容器保存成鏡像
- 語法:
docker commit 容器名字 分類:名字版本
- 保存:
docker commit bird_v1 oldboydiy:lidao_bird_v1
- 語法:
- 檢查是否有鏡像:
docker images |grep lidao
5)根據新的鏡像創建容器并測試
docker run -d -p 8081:80 --name diy_bird_v1 oldboydiy:lidao_bird_v1