27.構建python應用鏡像-dockerfile實踐項目
1.基于官方的鏡像,構建python代碼運行環境 dockerfile
2.運行鏡像,開啟一個讀寫的容器空間(定制操作,將代碼丟進去,運行調試)
3.提交這個變化的容器層數據,提交新的鏡像 docker commit
4.運行新鏡像,加入參數,運行的容器可以端口映射且訪問頁面
5.這里還要寫容器內的應用程序的啟停腳本:-v 將腳本映射到容器去
?--改進:鏡像只提供一個運行環境,其他數據:配置文件、源碼、腳本,都盡量使用-v 映射進去方便進行維護
28.容器的無狀態和有狀態
容器運行的nginx產生的數據可以隨意丟棄,稱為無狀態
容器運行的數據庫產的數據很重要,需要對數據持久化存儲,稱為有狀態
dockerfile中volume參數的作用:將數據映射出來,防止運維運行忘記主動使用-v參數
29.Docker存儲卷用法
volume數據卷
作用:避免重要的數據,因容器重啟而丟失,避免容器不斷變大,產生大朗的數據,容器最終可以提供為鏡像
可以使用-v參數,主動修改 -v 宿主機:容器:權限,權限2
30.搭建nginx+centos鏡像?
cd /opt/dockerfile/7.9test
curl -o ./Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o ./epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repocat >Dockerfile <<'EOF'
> FROM centos:7.9.2009
> RUN rm -rf /etc/yum.repos.d/*
> ADD *.repo /etc/yum.repos.d/
> RUN yum makecache fast \
> && yum install nginx -y \
> && yum clean all
> EXPOSE 80
> CMD ["nginx","-g","daemon off;"]
> EOFdocker bulit -t nginx .
之后 dokcer run -d -P nginx? 然后訪問端口發現報錯403.根據?docker部署nginx報403?拍錯
31.cmd、entrypoint關系
32.dockerfile的優化方案(官網里有)
33.Dockerfile多階段構建jar包
每一個鏡像,都可以作為公共鏡像,讓其他鏡像再使用
centos + jdk環境
運行jar包,下載對應jar包,docker run -v 把jar映射到容器內 使用鏡像 java -jar xxx.jar包
34.mysql為什么要加入-v 一些參數,才能容器化啟動?
因為mysql容器中有entryponit中的腳本中,必須運行的時候必須要有指定的 參數才能啟動
35.docker history完整信息截取
docker history -- help 有一個完全信息參數? ?|? gerp -i +需要查詢的關鍵信息
36.拿到鏡像怎么做?
首先查詢docker hub中文檔,再查看該鏡像的entrypoint腳本中需要指定的參數,怎么運行
37.提取容器ip格式化語法---format語法學一下
docker inspect `docker ps -aq`|grep -i IPaddress
docker inspect --format='{{.NetworkSettings.Networks.bridge.IPAddress}}' 容器名
# 簡單玩法, 基于key 提取value,格式化主機名,容器ip
docker inspect --format='{{.Name}} {{.NetworkSettings.Networks.bridge.IPAddress}}' `docker ps -aq`
38.容器部署zabbix、jenkins等
39.yaml語法
基于容器化部署的應用,都是使用yaml語法
json網站格式,理解yaml格式類型(主要是字典和列表),使用工具yaml轉json對應看
{? }--字典,里面每一個,就是一個元素---網站對應看
version: '3' # yaml語法版本,版本越高,支持字段就越多,得看官網文檔,有有哪些字段語法
services: #定義服務,名字myjenkins: # myenkins服務image: 'jenkins/jenkins:latest' # 鏡像名container_name: myjenkins # 你運行容器的名字 restart: always # 容器重啟策略privileged: true # 特權化運行容器user: root # 制定容器進程執行用戶 ports:- '8080:8080' - '50000:50000'volumes:- '/linux0224_data/jenkins:/var/jenkins_home'- '/var/run/docker.sock:/var/run/docker.sock'- '/usr/bin/docker:/usr/bin/docker'- '/root/.ssh:/root/.ssh'
40.docker-compse使用(注意有縮進)
1.安裝 2.寫docker-compose.yml? 3.語法校驗docker-compose.yml?,然后運行docker-compose up -d
41.私有倉庫docker-harbor
1.下載harbor軟件包、yaml文件
2.查看解壓文件,修改相關參數? ?運行部署腳本
3.修改docker配置,支持非https鏡像倉庫
4.推送到私有鏡像倉庫,需要修改鏡像tag,指定項目地址
5.登錄docker harbor? login輸入賬號密碼才能推和拉取鏡像
42.私有registry倉庫,純api形式的倉庫
43.docker所有網橋信息查詢
docker inspect ?`docker network ls -q` |grep -i '"Subnet"'
docker network ls
docker查看資源信息的命令
docker inspect image xx
docker inspect container xx
docker inspect network ?xx
44.docker網橋與虛擬網絡接口的關系
45.docker網橋的增刪改查
46.容器訪問控制
容器和宿主機之間通信 宿主機和外網之前通信
容器與容器之間的通信:使用同一個網橋
47.容器通信方式
網橋模式:一般docker network ls name為bridge的是dokcer0
docker0為二層交換機,分配ip地址
-net 的參數含義(網橋有用默認的網橋,也有自創的,也有用已存在的網橋)
主機模式:容器不創建單獨的網絡環境,直接使用宿主機的network
none:單機無網絡環境的容器,需要計算產生數據的一些服務,比如AI 深度學習純計算服務
48.網橋創建的時候,可以使用網絡工具? 百度搜 子網創建器
49.brctl show 、ifconfig:br-開頭的都是自建網橋、docker network ls
50.查看網橋和容器的關系,查看網橋有哪些容器使用?
docker inspect 網橋 -->查看該網橋的子網網段 和 containers中使用該網橋的容器名及ip
51.如何使用自建網橋br-X,創建一個veth接口: docker run -d -p XXX:XXX --network=該網橋id 鏡像,使用該網橋就自動創建相應的虛擬網絡接口
52.修改docker0網段
查看docker0信息 docker inspect bridge
docker run -it busybox? --- ifconfig查看docker0網段信息
公司對容器網絡環境有要求,給了ip范圍,說了你們的容器的環境只能是192.168.15.0/24,去修改docker配置文件 添加zip?192.168.15.1/24
53.網絡總結
1. 橋接模式(Bridge)
優點:
- 隔離性好:每個容器都有獨立的網絡命名空間,相互之間隔離,不會互相干擾。
- 簡單易用:橋接網絡是Docker的默認網絡模式,無需額外配置,容器可以直接進行通信。
- 支持跨主機通信:雖然橋接模式本身主要適用于單機部署,但可以通過端口映射或Overlay網絡實現跨主機通信。
- 支持端口映射:方便外部訪問容器內的服務。
缺點:
- 性能損失:橋接網絡需要進行網絡地址轉換(NAT),可能會引入一定的性能損失。
- 端口沖突:如果多個容器使用相同的端口號,可能會導致端口沖突。
- 網絡隔離性限制:雖然容器間網絡隔離,但容器仍可通過宿主機的網橋進行通信,這可能帶來一定的安全風險。
2. 主機模式(Host)
優點:
- 性能最優:容器直接使用宿主機的網絡接口和IP地址,無需進行額外的網絡地址轉換,性能最高。
- 簡化網絡配置:容器與宿主機共享網絡命名空間,無需進行端口映射或網絡轉發配置。
- 無需網絡策略:只要能訪問到宿主機,就能訪問到容器。
缺點:
- 安全性降低:容器與宿主機共享網絡命名空間,容器可以直接訪問主機上的網絡資源,增加安全風險。
- 端口沖突:如果多個容器使用相同的端口號,可能會導致端口沖突。
- 隔離性差:容器不再擁有獨立的網絡棧,網絡環境隔離性差。
3. 容器模式(Container)
優點:
- 高效通信:兩個容器共享同一個網絡命名空間,容器間通信非常高效,無需經過宿主機的網絡棧。
- 簡化配置:對于需要緊密協作的容器(如微服務架構中的容器),容器模式可以簡化網絡配置。
缺點:
- 隔離性差:與橋接模式一樣,宿主機意外的其他主機無法訪問到容器。
- 安全性問題:由于容器間共享網絡命名空間,一個容器的網絡安全問題可能影響到其他容器。
4. 自定義網絡模式
優點:
- 高度可配置:支持各種網絡驅動(如bridge、overlay、macvlan等),可以根據需要創建復雜的網絡拓撲。
- 提供隔離性和安全性:通過子網、網關、DNS等配置,實現容器間的隔離和通信控制。
- 支持服務發現:在自定義網絡中,容器可以通過服務名進行通信,而無需關注底層網絡配置。
缺點:
- 配置復雜度較高:需要適當的網絡知識來配置自定義網絡。
- 可能涉及額外的網絡性能開銷:特別是在使用跨主機網絡通信時。
5. 無網絡模式(None)
優點:
- 安全性增強:容器與外部網絡完全隔離,提供更高的安全性。
- 資源節省:無需為容器分配網絡接口和IP地址,節省網絡資源。
缺點:
- 無法進行網絡通信:容器無法與外部網絡或其他容器進行通信,僅適用于不需要網絡連接的場景。
54.先想好命令怎么敲--->再轉為yaml格式
55.如何使用docker-compose
docker-compose命令語法
教程文檔:
https://yeasy.gitbook.io/docker_practice/compose/compose_file
粘貼代碼使用粘貼模式 set paste
56.docker-compose部署zabbix
學習軟件 sublime Text、Notepad++
把yaml格式都放到sublime Text中加入yaml格式寫看,再使用vim 的粘貼模式粘貼
docker-compose容器編排后也要用docker-compose命令管理,盡量別使用docker命令管理
57.使用docker-compose部署wordpress
docker-compose -f wordpress.yml ps
docker inspect wordpress-compose_db_1?
# 容器內,暴露的數據卷
? ? ? ? ? ? "Volumes": {
? ? ? ? ? ? ? ? "/var/lib/mysql": {}
? ? ? ? ? ? },
# 掛在再外部的信息
?},
? ? ? ? "Mounts": [
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "Type": "volume", ?# 卷的類型
? ? ? ? ? ? ? ? "Name": "wordpress-compose_db_data",
? ? ? ? ? ? ? ? "Source": "/var/lib/docker/volumes/wordpress-compose_db_data/_data",
? ? ? ? ? ? ? ? "Destination": "/var/lib/mysql",
? ? ? ? ? ? ? ? "Driver": "local",
? ? ? ? ? ? ? ? "Mode": "rw",
? ? ? ? ? ? ? ? "RW": true,
? ? ? ? ? ? ? ? "Propagation": ""
? ? ? ? ? ? }
? ? ? ? ],
# volume 類型解釋
# volume ? 容器內的數據,映射到宿主機的 /var/lib/docker/volumes/卷的名字
# bind類型 ? docker run -v 宿主機目錄:容器目錄