日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3 - 深入学习Docker容器管理

發布時間:2023/12/14 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3 - 深入学习Docker容器管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、Docker簡介
      • 1.1 為什么選擇docker?
        • 1.1.1 docker更高效的利用系統資源
        • 1.1.2 更快的啟動時間
        • 1.1.3 持續交付和部署
        • 1.1.4 更輕松的遷移
      • 1.2 Docker能做什么?
      • 1.3 Docker最核心的組件
    • 二、Docker安裝部署
      • 2.1 基礎環境配置
      • 2.2 安裝docker
        • 2.2.1 docker必須安裝在centos7平臺, 內核不低于3.10
        • 2.2.2 開啟linux內核的流量轉發
        • 2.2.3 重新加載內核參數
        • 2.2.4 安裝docker-ce社區版
        • 2.2.5 鏡像加速器
    • 三、啟動第一個docker容器
      • 3.1 docker流程示意圖
      • 3.2 Docker運行nginx
      • 3.3 端口映射示意圖
    • 四、docker生命周期
      • 4.1 詳細圖解:
    • 五、徹底學明白, docker鏡像的原理
      • 5.1 分層拉取鏡像
      • 5.2 利用docker獲取不同發行版鏡像
      • 5.3 docker具體解決了什么問題
      • 5.4 理解什么是docker鏡像
      • 5.5 Docker 鏡像的原理學習(一)
      • 5.6 Docker 鏡像原理學習(二)
      • 5.7 Docker為什么分層鏡像
      • 5.8 可寫的容器層
    • 六、Docker鏡像的實際使用學習
      • 6.1 獲取鏡像
        • 6.1.1 從dockerhub獲取鏡像
        • 6.1.2 本地鏡像導出、導入
        • 6.1.3 從私有部署獲取鏡像
      • 6.2 查看鏡像
      • 6.3 刪除鏡像
      • 6.4 鏡像管理
    • 七、Docker容器管理
    • 八、Dockerfile構建與使用
      • 8.1 dockerfile主要組成部分:
      • 8.2 dockerfile指令
      • 8.3 dockerfile其他指令:
      • 8.4 dockerfile實踐
      • 8.5 ENTRYPOINT和CMD的玩法
      • 8.6 ARG和ENV指令
      • 8.7 VOLUME
      • 8.8 EXPOSE
      • 8.9 WORKDIR
      • 8.10 USER
    • 十、構建一個網站鏡像
      • 10.1 部署全流程
      • 10.2 如何修改該網站的內容
      • 10.3 再次強調docker的好處, 用法
    • 十一、總結
      • docker容器管理總結
      • 文章就到這里, 喜歡的話點個關注和贊吧?~

學習目標:

本篇博文意在學習Docker原理, 深入理解docker容器管理, 鏡像管理, 學會自定義鏡像Dockerfile, 以及部署項目全流程, 靈活掌握Dockerfile關鍵字; 目標人群適合有一定的Python基礎和Linux基礎的人群。

篇幅較長, 大約需要10分鐘, 實踐大約需要4h, 大家根據自己的需要來學習~

聲明: 本篇博文為作者原創, 未經作者允許請勿轉載!

一、Docker簡介

1.1 為什么選擇docker?

1.1.1 docker更高效的利用系統資源

容器不需要進行硬件虛擬化以及進行一個完整操作系統的額外開銷, docker對系統資源的利用率更高, 無論是應用執行, 文件存儲, 還是在內存消耗等方面, 都比傳統的虛擬機更高效。因為一個同樣配置的主機, 可以運行處更多數量的容器實例。

1.1.2 更快的啟動時間

傳統的虛擬機啟動時間長, docker容器則是直接運行在宿主機的內核上, 無需啟動一個完整的操作系統, 因此可以達到秒級啟動, 大大解決開發, 測試, 部署的時間。

1.1.3 持續交付和部署

對于開發和運維人員, 最關心的環境部署遷移別處的問題, 利用docker可以定制鏡像, 以達到持續集成, 持續交付和部署。通過Dockerfile來進行鏡像構建, 系統集成測試, 運維進行環境部署。且Dockerfile可以使鏡像構建透明化, 方便技術團隊快速理解運行環境部署的流程。

1.1.4 更輕松的遷移

Docker可以在很多平臺上運行, 無論是物理機, 虛擬機, 云服務器等環境, 運行結果都是一致的。用于可以輕松將一個平臺的應用, 遷移到另外一個平臺, 而不用擔心環境的變化, 導致程序無法運行。

1.2 Docker能做什么?

  • 可以把應用程序及運行依賴環境打包成鏡像, 作為交付介質, 在各環境中部署
  • 可以將鏡像(image)啟動成為容器(container), 并且提供多容器的生命周期進行管理(啟、停、刪)
  • container容器之間相互隔離, 且每個容器可以設置資源限額
  • 提供輕量級虛擬化功能, 容器就是在宿主機中的一個個虛擬的空間, 彼此相互隔離, 完全獨立

1.3 Docker最核心的組件

  • image鏡像, 構建容器 (我們將程序運行所需的環境, 打包為鏡像文件)

  • Container, 容器 (你的應用程序, 就跑在容器中)

  • 鏡像倉庫 (保存鏡像文件, 提供上傳, 下載鏡像) 作用好比github

  • Dockerfile, 將你部署項目的操作,寫成一個部署腳本, 這就是dockerfile, 且該腳本還能構建出鏡像文件

    • FROM 定義基礎鏡像
    • MAINTAINER 作者
    • RUN 運行Linux命令
    • ADD 添加文件/目錄
    • ENV 環境變量
    • CMD 運行進程

    創建容器的過程

    • 獲取鏡像, 如: docker pull centos, 從鏡像倉庫拉取
    • 使用鏡像創建容器
    • 分配文件系統, 掛載一個讀寫層, 在讀寫層加載鏡像
    • 分配網絡/網橋接口, 創建一個網絡接口, 讓容器和宿主機通信
    • 容器獲取IP地址
    • 執行容器命令, 如: /bin/bash
    • 反饋容器啟動結果

二、Docker安裝部署

提前準備好一個宿主機(VMware去創建一個linux機器, 然后安裝docker去使用)

2.1 基礎環境配置

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum clean allyum makecacheyum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel

2.2 安裝docker

2.2.1 docker必須安裝在centos7平臺, 內核不低于3.10

uname -r # 3.10.0-1160.59.1.el7.x86_64sudo yum -y upgrade # 更新yum源

2.2.2 開啟linux內核的流量轉發

# 寫入 cat <<EOF > /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.ip_forward=1 EOF

2.2.3 重新加載內核參數

modprobe br_netfilter # 如果下面的命令報錯, 先執行此條命令 sysctl -p /etc/sysctl.d/docker.conf

要保持本地軟件源較新, 可以用阿里云yum源更新軟件

2.2.4 安裝docker-ce社區版

利用yum快速安裝docker

# 提前配置yum倉庫 # 1.阿里云自帶倉庫 2.阿里云提供的docker專屬repo倉庫curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repocurl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo## 更新yum緩存并重新緩存 yum clean all && makecache## 查看源中可用版本 sudo yum list docker-ce --showduplicates | sort -r## 如果需要安裝舊版本 sudo yum install -y docker-ce-18.09.9## yum 安裝 sudo yum install docker-ce-20.10.6 -y## 查看docker版本 rpm -qa | grep docker## 如果要卸載 sudo yum remove docker-xxxx-centos.x86_64[harry@iZ8vbbip4bxxx60rxxuZ ~]$ rpm -qa | grep docker docker-scan-plugin-0.17.0-3.el7.x86_64 docker-ce-cli-20.10.14-3.el7.x86_64 docker-ce-20.10.6-3.el7.x86_64 docker-ce-rootless-extras-20.10.14-3.el7.x86_64## 嘗試啟動docker

2.2.5 鏡像加速器

使用docker受邀操作就是獲取鏡像文件, 默認下載是從Docker Hub下載, 網速很慢, 國內很多云服務商都提供了加速器服務, 阿里云加速器, Daocloud加速器, 靈雀云加速器等。

### 檢查是否有這個文件, 沒有就創建一個 ### vim /etc/docker/daemon.json ### 寫入 {"registry-mirrors": ["https://8xpk5wnt.mirror.aliyuncs.com"] }### 啟動docker systemctl daemon-reload systemctl enable docker systemctl restart docker### 查看docker是否正確安裝[harry@iZ8xxx4bq97z0o60rq3uZ ~]$ sudo docker version [sudo] password for harry: Client: Docker Engine - CommunityVersion: 20.10.14API version: 1.41Go version: go1.16.15Git commit: a224086Built: Thu Mar 24 01:49:57 2022OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.6API version: 1.41 (minimum version 1.12)Go version: go1.13.15Git commit: 8728dd2Built: Fri Apr 9 22:43:57 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.5.11GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8runc:Version: 1.0.3GitCommit: v1.0.3-0-gf46b6badocker-init:Version: 0.19.0GitCommit: de40ad0 [harry@iZ8vbbipxxx0o60rq3uZ ~]$

三、啟動第一個docker容器

3.1 docker流程示意圖

# 1.獲取鏡像 # 2.運行鏡像, 生成容器, 你想要的容器, 就運行在容器中

以往需求: Nginx web服務器, 運行出一個80端口的網站

# 在宿主機上, 運行nginx 1.開啟服務器 2.在服務器上安裝好運行nginx所需的依賴關系 3.安裝nginx yum install nginx -y 4.修改nginx配置文件 5.啟動nginx 6.客戶端去訪問nginx比較耗時~~

如果讓你用docker運行nginx, 該怎么玩?

3.2 Docker運行nginx

1.獲取鏡像, 獲取是從你配置好的docker鏡像中, 去拉取nginx鏡像 # 先搜索一下, 鏡像文件, 是否存在 docker search nginx # 拉取, 下載鏡像 docker pull nginx # 查看本地的docker鏡像都有哪些 [harry@iZ8vbbxxxz0o60rq3uZ ~]$ sudo docker image ls -a REPOSITORY TAG IMAGE ID CREATED SIZE jupyter-centos 1.0 2aeba7cbf80d 2 days ago 658MB star7th/showdoc latest e06fda0e7caa 9 days ago 589MB nginx latest 605c77e624dd 2 months ago 141MB# 刪除鏡像的命令 sudo docker rmi 鏡像id# 運行該nginx鏡像, 運行出具體的容器, 然后這個容器中就跑著一個nginx服務了 # 運行鏡像的命令, 參數如下 docker run 參數 鏡像的名字/id# -d 后臺運行容器 # -p 80:80 端口映射, 宿主機端口:容器內端口, 訪問宿主機端口也就訪問到容器內的端口 sudo docker run -d -p 80:80 nginx# 查看端口netstat -tunlp# 運行結果如下, docker run命令, 會返回一個容器id [harry@iZ8vbbxxx60rq3uZ ~]$ sudo docker run -d -p 80:80 nginx c526cbb32432532be79218480fba837a0e88a2e9756de510fa19b10e3236500f# 此時可以訪問宿主機的80端口, 查看到容器內的80端口的應用是什么了 # 查看正在運行的容器 sudo docker ps[harry@iZ8vbbip4bq97z0o60rq3uZ ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c526cbb32432 nginx "/dock" 18 seconds ago Up 12 seconds 80/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp mystifying_ganguly# 可以嘗試停止容器 sudo docker stop 容器id # 停止具體的容器進程 sudo docker stop c526cbb32432[harry@iZ8vbbixxx7z0o60rq3uZ ~]$ sudo docker stop c526cbb32432 c526cbb32432# [harry@iZ8vxxxz0o60rq3uZ ~]$ sudo docker start 3599e7f5d321 3599e7f5d321

3.3 端口映射示意圖

四、docker生命周期

學習docker的核心要素、搞明白、鏡像image、容器!

4.1 詳細圖解:

五、徹底學明白, docker鏡像的原理

5.1 分層拉取鏡像

我們在獲取redis鏡像的時候, 發現是下載了多行信息, 最終又得到了一個完整的鏡像文件

[harry@iZ8vbbip4bq97z0o60rq3uZ ~]$ sudo docker pull redis Using default tag: latest latest: Pulling from library/redis a2abf6c4d29d: Already exists c7a4e4382001: Pull complete 4044b9ba67c9: Pull complete c8388a79482f: Pull complete 413c8bb60be2: Pull complete 1abfd3011519: Pull complete Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339 Status: Downloaded newer image for redis:latest docker.io/library/redis:latest

5.2 利用docker獲取不同發行版鏡像

快速實踐, 使用docker, 來切換不同的發行版, 內核使用的都是宿主機的內核:

# 查看系統的兩大部分 宿主機Centos內核+上層發行版 [harry@iZ8vbxxxx60rq3uZ ~]$ cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [harry@iZ8vxxx7z0o60rq3uZ ~]$ [harry@iZ8vxxx4z0o60rq3uZ ~]$ uname -r 3.10.0-1160.59.1.el7.x86_64 # 利用docker獲取不同發行版鏡像 docker pull centos:7.8.2003docker pull ubuntu# 確認當前的宿主機發行版 [harry@iZ8xxx7z0o60rq3uZ ~]$ cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)# 運行centos7.8.2003發行版 # 運行容器, 且進入容器內 # 參數 解釋 # -i 交互式命令操作 # -t 開啟一個終端 # afb6fca791e0 鏡像的id # bash bash解釋器 [harry@iZ8vbbip4bq97z0o60rq3uZ ~]$ docker run -it afb6fca791e0 bash root@0o60rq3uZ: /# root@0o60rq3uZ: /# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)# 想玩玩Ubuntu # 直接去獲取Ubuntu鏡像即可 [harry@iZ8vbbxxx0o60rq3uZ ~]$ sudo docker run -it ubuntu bash root@wqdf24s1e212131: /# root@wqdf24s1e212131: /# # 查看容器內的發行版 root@wqdf24s1e212131: /# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.4 DISTRIB.CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

圖解以上操作:

總結:

1.一個完整的系統, 是由linux的內容+發行版, 才組成了一個可以使用的完整的系統

2.利用docker容器, 可以獲取不同的發型版鏡像, 然后基于該鏡像, 運行出各種容器去使用

5.3 docker具體解決了什么問題

一個工程師, 寫代碼, mysql, etcd, redis, elk 等等…在機器上, 直接安裝了這些工具, win mac

5.4 理解什么是docker鏡像

docker images搜索地址: https://hub.docker.com/_/centos?tab=tags&page=1&ordering=last_updated

1、一個完整的docker鏡像可以創建出docker容器的運行, 例如一個centos:7.8.2003鏡像文件, 我們獲取的是centos7這個版本, 這個鏡像文件是不包含linux內核的

[harry@iZ8xxxz0o60rq3uZ ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 3 months ago 141MB redis latest 7614ae9453d1 3 months ago 113MB centos 7 eeb6ee3f44bd 6 months ago 204MB

docker的架構, 鏡像就是一個 [發行版] 的作用, 你需要準備好一個linux內核, 然后上層使用不同的 [發行版] 就好了, 這樣你就可以自由的使用各種版本系統, 兼容多種環境。

5.5 Docker 鏡像的原理學習(一)

圖解注釋:

5.6 Docker 鏡像原理學習(二)

# 進入到正在運行的容器內(nginx), 命令是 docker exec [harry@iZ8vbbixxxx0o60rq3uZ ~]$ sudo docker exec -it 3599e7f5d321 bash root@3599e7f5d321:/# root@3599e7f5d321:/# cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" root@3599e7f5d321:/#

5.7 Docker為什么分層鏡像

鏡像分享一大好處就是共享資源, 例如有多個鏡像都來自于同一個base鏡像, 那么在docker host只需要存儲一份base鏡像。

內存里也只需要加載一份host, 即可為多個容器服務。

即使多個容器共享一個base鏡像, 某個容器修改了base鏡像的內容, 例如修改/etc/下配置文件, 其他容器的/etc/下內容是不會被修改的, 修改動作只限制在某個容器內, 這就是容器的寫入時復制性特性(Copy-on-write)。

5.8 可寫的容器層

當容器啟動后, 一個新的可寫層被加載到鏡像的頂部, 這一層通常被稱為容器層, 容器層下的都稱為鏡像層。

所有容器的修改動作, 都只會發生在容器層里, 只有容器層是可寫的, 其余鏡像層都是只讀的。

文件操作說明
添加文件在容器中創建文件時, 新文件被添加到容器層中。
讀取文件在容器中讀取某個文件時, Docker會從上往下依次在各鏡像層中查找此文件。一旦找到, 立即將其復制到容器層, 然后打開并讀入內存。
修改文件在容器中修改已存在的文件時, Docker會從上往下依次在各個鏡像層中查找此文件。一旦找到, 立即將其復制到容器層, 然后修改之。
刪除文件在容器中刪除文件時, Docker也是從上往下依次在鏡像層中查找此文件。找到后, 會在容器層中記錄下刪除操作。(只是記錄刪除操作)

只有當需要修改時才賦值一份數據, 這種特性被稱作Copy-on-Write??梢? 容器層保存的鏡像變化的部分, 不會對鏡像本身進行任何修改。

這樣就解釋了我們前面提出的問題: 鏡像層記錄對鏡像的修改, 所有鏡像層都是只讀的, 不會被容器修改, 所以鏡像可以被多個容器共享。

六、Docker鏡像的實際使用學習

日常開發中, 需要安裝很多第三方工具, 比如etcd, kafka等

開發機器: mac, windows, 我又不想搞亂當前機器的環境

mac裝一個nginx, 二進制安裝, 編譯安裝, brew install nginx…

1.下載安裝docker工具

2.獲取該軟件的docker鏡像(你以后想要用的各種工具, 基本上都能夠搜索到合適的鏡像去用)

nginx鏡像docker pull nginx

3.運行該鏡像, 然后就啟動了一個容器, 這個nginx服務就運行在容器中

4.停止容器, 刪除該鏡像, ok, 你的電腦上, 就好像沒有使用過nginx一樣

類似沙箱一樣的環境

基于鏡像的增、刪、改、查維護

6.1 獲取鏡像

6.1.1 從dockerhub獲取鏡像

6.1.2 本地鏡像導出、導入

6.1.3 從私有部署獲取鏡像

# 1.獲取鏡像, 鏡像與歐冠倉庫, 好比yum源一樣 # 默認的docker倉庫, dockerhub, 有大量的優質鏡像, 以及用戶自己上傳的鏡像, centos容器中安裝 vim nginx ... 提交為鏡像, 上傳到dockerhubdocker search 鏡像名:tag # tag就是具體的標題版本docker search centos# 查看本地的鏡像文件有哪些 [harry@iZ8vbbbq97z0o60rq3uZ ~]$ sudo docker images [harry@iZ8vbbbq97z0o60rq3uZ ~]$ sudo docker image ls# 下載docker鏡像 docker pull centos # 默認的是 centos:latest docker pull centos:7.8.2003# 查看docker鏡像的存儲路徑 Docker Root Dir: /var/lib/docker[harry@iZ7z0o60rq3uZ ~]$ sudo ls /var/lib/docker/image/overlay2/imagedb/content/sha256/ -l total 44 -rw------- 1 root root 7656 Mar 29 20:40 605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85 -rw------- 1 root root 7700 Mar 29 21:34 7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631 -rw------- 1 root root 23304 Mar 23 14:51 e06fda0e7caa83f226f077d7f2b6a419c1a03e91af31ee7fe23a6482534fe146 -rw------- 1 root root 2754 Mar 27 19:10 eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9[harry@iZ8vo60rq3uZ ~]$ sudo cat /var/lib/docker/image/overlay2/imagedb/content/sha256/605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85# 該文件作用是 記錄 鏡像 和 容器 的配置關系 # 使用不同的鏡像, 生成容器 # -it 開啟一個交互式的終端 --rm 容器退出時刪除該容器 [harry@iZ897z0o60rq3uZ ~]$ sudo docker run -it --rm centos:7.8.2003 bash[root@dc1ef93a01be /]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)# 如何查看centos的標簽信息 https://hub.docker.com/_/centos

6.2 查看鏡像

[harry@iZ8vbq97z0o60rq3uZ ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE star7th/showdoc latest e06fda0e7caa 9 days ago 589MB nginx latest 605c77e624dd 3 months ago 141MB redis latest 7614ae9453d1 3 months ago 113MB centos 7 eeb6ee3f44bd 6 months ago 204MB centos 7.8.2003 afb6fca791e0 23 months ago 203MB# 查看具體的鏡像 [harry@iZ97z0o60rq3uZ ~]$ sudo docker images nginx [sudo] password for harry: REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 3 months ago 141MB# 可以指定具體tag [harry@iZ8v0o60rq3uZ ~]$ sudo docker images centos:7.8.2003 REPOSITORY TAG IMAGE ID CREATED SIZE centos 7.8.2003 afb6fca791e0 23 months ago 203MB# 只列出鏡像的id -q --quiet # 只列出id [harry@iZ8v60rq3uZ ~]$ sudo docker images -q e06fda0e7caa e06fda0e7caa 605c77e624dd 7614ae9453d1 eeb6ee3f44bd afb6fca791e0# 格式化顯示鏡像 # 這是docker的模板語言, --format [harry@iZ8bq90rq3uZ ~]$ sudo docker images --format "{{.ID}}--{{.Repository}}" e06fda0e7caa--star7th/showdoc e06fda0e7caa--registry.cn-shenzhen.aliyuncs.com/star7th/showdoc 605c77e624dd--nginx 7614ae9453d1--redis eeb6ee3f44bd--centos afb6fca791e0--centos# 以表格形式顯示, 美化 sudo docker images --format "table{{.ID}}\t{{.Repository}}\t{{.Tag}}" [harry@iZ8v60rq3uZ ~]$ sudo docker images --format "table{{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG e06fda0e7caa star7th/showdoc latest e06fda0e7caa registry.cn-shenzhen.aliyuncs.com/star7th/showdoc latest 605c77e624dd nginx latest 7614ae9453d1 redis latest eeb6ee3f44bd centos 7 afb6fca791e0 centos 7.8.2003# 搜索鏡像 # docker search 鏡像名 [harry@iZ87z0o60rq3uZ ~]$ sudo docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 7082 [OK] centos/systemd systemd enabled base container. 107 [OK] centos/mysql-57-centos7 MySQL 5.7 SQL database server 92

6.3 刪除鏡像

[harry@iZ8vbbip4bq60rq3uZ ~]$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io docker version >= 1.12 {"registry-mirrors": ["http://f1361db2.m.daocloud.io"] } Success. You need to restart docker to take effect: sudo systemctl restart docker [harry@iZ8vbbo60rq3uZ ~]$ sudo systemctl restart docker # 下載 docker pull hello-world# 根據鏡像的 id, 名字, 摘要 docker rmi hello-world [harry@iZ8vb97z0o60rq3uZ ~]$ sudo docker rmi hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38 Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412 Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359# Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container e2970e766c01 is using its referenced image feb5d9fea6a5 如果出現這個錯誤, 則先執行下面的命令# 刪除容器記錄 docker rm 容器id [harry@iZ8vb7z0o60rq3uZ ~]$ sudo docker rm e2970e766c01# 指定id的前三位即可 docker rmi d11

?

6.4 鏡像管理

[harry@iZ8vbb0o60rq3uZ ~]$ sudo docker images -aq e06fda0e7caa e06fda0e7caa 605c77e624dd 7614ae9453d1 eeb6ee3f44bd afb6fca791e0# 批量刪除鏡像的用法, rm # 批量刪除鏡像, 慎用 sudo docker rmi `docker images -aq`# 批量刪除容器 sudo docker rm `docker ps -aq`# 導出鏡像 # 比如默認運行的centos鏡像, 不提供vim功能, 運行該容器后, 在容器內安裝vim # 然后提交該鏡像, 再導出該鏡像為壓縮文件, 可以發給其他人用 # 放在容器管理篇學習 docker commit# 導出鏡像的命令 [root@iZ8vbb0rq3uZ ~]$ sudo docker image save centos:7.8.2003 > /opt/centos7.8.2003.tgz# 導入鏡像的命令 [root@iZ8v0o60rq3uZ ~]$ sudo docker image load -i /opt/centos7.8.2003.tgz fb82b029bea0: Loading layer [==================================================>] 211.1MB/211.1MB Loaded image: centos:7.8.2003# 查看鏡像詳細信息 # 查看docker服務的信息 docker info # 查看鏡像詳細信息 docker image inspect 鏡像id docker image inspect afb

七、Docker容器管理

docker run 等于創建+啟動

docker run 鏡像名, 如果鏡像不存在本地, 則會在線去下載該鏡像

**注意: 容器內的進程必須處于前臺運行, 否則容器就會直接退出,**自己部署一個容器運行, 命令不得后臺運行, 前臺運行即可

如果容器內, 什么事兒也沒做, 容器也會掛掉。 容器內, 必須有一個進程在前臺進行

我們運行nginx基礎鏡像, 沒有運行任何程序, 因此容器直接掛掉

# 運行容器的玩法 # 1.運行一個掛掉的容器 (從錯誤師范來學docker容器) docker run centos:7.8.2003 這個寫法, 會產生多個獨立的容器記錄, 且容器內沒有程序在跑, 因此掛了 [harry@iZ8vz0o60rq3uZ ~]$ sudo docker run afb6fca791e0 [harry@iZ8vz0o60rq3uZ ~]$ sudo docker run afb6fca791e0 [harry@iZ8vz0o60rq3uZ ~]$ sudo docker run afb6fca791e0 [harry@iZ8vz0o60rq3uZ ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40003a3f5c7e afb6fca791e0 "/bin/bash" 14 seconds ago Exited (0) 10 seconds ago sleepy_moore e7f13b99ff15 afb6fca791e0 "/bin/bash" 21 seconds ago Exited (0) 16 seconds ago happy_newton 7a618ef8376d afb6fca791e0 "/bin/bash" 29 seconds ago Exited (0) 24 seconds ago practical_torvalds# 2.運行容器, 且進入容器內, 且在容器內執行某個命令 [harry@iZ8vbbip4b0rq3uZ ~]$ sudo docker run -it centos:7.8.2003 sh sh-4.2# sh-4.2# # 3.開啟一個容器, 讓它幫你運行某個程序, 屬于前臺運行, 會卡住一個終端 [harry@iZ8vbbi3uZ ~]$ sudo docker run centos:7.8.2003 ping baidu.com 64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=1 ttl=52 time=7.81 ms 64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=2 ttl=52 time=7.76 ms# 4.運行一個活著的容器, docker ps 可以看到的容器 # -d 參數, 讓容器在后臺跑著 (針對宿主機而言) # 返回容器id [harry@iZ8vbbio60rq3uZ ~]$ sudo docker run -d centos:7.8.2003 ping baidu.com e346320e4740b47025dd97bc7c511a02f23480429114d048935af08199798c02# 5.豐富docker運行的參數 # -d 后臺運行 # --rm 容器掛掉后自動被刪除 # --name 給容器起個名字[harry@iZ8vb0rq3uZ ~]$ sudo docker run -d --rm --name pythontest centos:7.8.2003 ping baidu.com bdd9e13fd341f0c548260dfbfd90fb7cd32e3bd0b532952faccd0da7c839e9d9 [harry@iZ8vb0oq3uZ ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bdd9e13fd341 centos:7.8.2003 "ping baidu.com" 18 seconds ago Up 15 seconds pythontest# 6.查看容器日志的玩法, 刷新日志 # -f 實時刷新日志 [harry@iZ8o60rq3uZ ~]$ sudo docker logs 容器id [harry@iZ8o60rq3uZ ~]$ sudo docker logs -f 容器id [harry@iZ8o60rq3uZ ~]$ sudo docker logs -f 容器id | tail -5# 7.進入正在運行的容器空間內 # exec指令用于進入容器空間內 [harry@iZ8vbbz0o60rq3uZ ~]$ sudo docker exec -it 64d2af1f679e bash [root@64d2af1f679e /]# # 8.查看容器的詳細信息, 用于高級調試 [harry@iZ8vbbi0o60rq3uZ ~]$ sudo docker container inspect 容器id# 9.容器的端口映射 # 后臺運行nginx容器, 且起個名字, 且端口映射宿主機的777端口, 訪問到容器內的80端口 [harry@iZ8v0rq3uZ ~]$ sudo docker run -d --name harry_nginx -p 777:80 nginx # 查看容器 [harry@iZ0o60rq3uZ ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73d306b1b3bf nginx "/docker-entrypoint.…"48 seconds ago Up 41 seconds 0.0.0.0:777->80/tcp, :::777->80/tcp harry_nginx# 9.1 查看容器的端口轉發情況 docker port 容器id [harry@iZ8v0o60rq3uZ ~]$ sudo docker port 73d306b1b3bf 80/tcp -> 0.0.0.0:777 80/tcp -> :::777# 隨機端口映射 -P 隨機訪問一個宿主機的空閑端口, 映射到容器內打開的端口 [harry@iZ8v0rq3uZ ~]$ sudo docker run -d --name harry_nginx -P nginx# 10.容器的提交 # 運行基礎的centos:7.8.2003, 在容器內安裝vim, 然后提交新的鏡像 # 新的鏡像, 再運行出的容器, 默認就攜帶vim了 [harry@iZ8vbbip4o60rq3uZ ~]$ sudo docker run -it centos:7.8.2003 bash [root@17773e3413fc /]# yum install vim# 提交容器 docker commit 容器id 新的鏡像名 [harry@iZ8vo60rq3uZ ~]$ sudo docker commit 17773e3413fc harry88995/centos-vim-7.8.2003 # 查看容器是否有提交的容器 [harry@iZ87s60rq3uZ ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE harry88995/centos-vim-7.8.2003 latest fccbf515c086 11 seconds ago 419MB # 運行提交的新容器, 看下是否可以使用vim了~ [harry@iZ8vb7z0oswZ ~]$ sudo docker run -it harry88995/centos-vim-7.8.2003 bash [root@864c47af69c4 /]# vim hello.txt [root@864c47af69c4 /]# cat hello.txt Hello world! Good bye!

八、Dockerfile構建與使用

鏡像時多層存儲, 每一層在前一層的基礎上進行修改;

容器也是多層存儲, 以鏡像為基礎層, 在其基礎上加一層作為容器運行時的存儲層。

剛才說了, 創建鏡像的兩個方法

  • 手動修改容器內容, 然后docker commit 提交容器為新的鏡像
  • 通過在dockerfile中定義一系列的命令和參數構成的腳本, 然后這些命令應用于基礎鏡像, 依次添加層, 最終生成一個新的鏡像。極大的簡化了部署的工作。

官方提供的dockerfile實例

https://github.com/CentOS/CentOS-Dockerfiles

8.1 dockerfile主要組成部分:

基礎鏡像信息 FROM centos:7.9

制作鏡像操作指令 RUN yum install openssh-server -y

容器啟動時執行命令 CMD["/bin/bash"]

8.2 dockerfile指令

FROM 這個鏡像的媽媽是誰? (指的是基礎鏡像)MAINTAINER 告訴別人, 誰負責養它? (指定維護者信息, 可以沒有)RUN 你想讓它干啥 (在命令前面加上RUN即可)ADD 添加宿主機的文件到容器內, **還多一個解壓的功能**#RUN tar -zxf /opt/xx.tgz # 報錯 ! 該tgz文件不存在COPY 作用和ADD是一樣的, 都是拷貝宿主機的文件到容器內, COPY就是僅僅拷貝WORKDIR 我是cd, 今天剛化了妝 (設置當前工作目錄)VOLUME 給它一個存放姓李的地方 (設置卷, 掛載主機目錄)EXPOSE 它要打開的門是啥 (指定對外的端口), 在容器內暴露一個窗口, 端口 EXPORT 80CMD 奔跑吧, 兄弟! (指定容器啟動后的要干的事情)

VOLUME 與 EXPOSE 數據目錄與端口映射原理圖解:

8.3 dockerfile其他指令:

COPY 復制指令ENV 環境變量ENTRYPOINT 容器啟動后執行的命令

8.4 dockerfile實踐

想自定義鏡像, 就得自己寫腳本, 也就是dockerfile了

需求, 通過dockerfile, 構建nginx鏡像, 且運行容器后, 生成的界面, 是"Hello, good bye!"

# 1. 創建Dockerfile, 注意文件名, 必須是這個 [harry@iZ860rq3uZ learn_docker]$ pwd /home/harry/learn_docker [harry@iZ860rq3uZ learn_docker]$ cat Dockerfile FROM nginx RUN echo '<meta charset=utf8>Hello, good bye!' > /usr/share/nginx/html/index.html [harry@iZ860rq3uZ learn_docker]$# 2. 構建dockerfile docker build . [harry@iZ860rq3uZ learn_docker]$ sudo docker build . Sending build context to Docker daemon 2.048kB Step 1/2 : FROM nginx---> 605c77e624dd Step 2/2 : RUN echo '<meta charset=utf8>Hello, good bye!' > /usr/share/nginx/html/index.html---> Running in 9652b79e621a Removing intermediate container 9652b79e621a---> fc6bf2cfb402 Successfully built fc6bf2cfb402 [harry@iZ860rq3uZ learn_docker]$ chmod +x Dockerfile # 3. 修改鏡像名 [harry@iZ8vb learn_docker]$ sudo docker tag fc6bf2cfb402 my_nginx# 構建出的鏡像如下 [harry@iZ83u learn_docker]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE my_nginx latest fc6bf2cfb402 2 minutes ago 141MB# 4. 運行該鏡像 sudo docker run -d -p 777:80 my_nginx [harry@iZ8vbbiuZ learn_docker]$ sudo docker run -d -p 777:80 my_nginx 993f992a96cefb785a83487d3fd5d292d373546ddbc1a953d4313ce448588a4b# 4. 查看宿主機的777端口 http://39.101.240.154:777/ Hello, good bye!

如下指令該怎么用?

# COPY copy harry.py /home/# 支持多個文件, 以及通配符形式賦復制, 語法要滿足Golang的filepath.Match copy harry* /tmp/cc?.txt. /home/# ADD ADD harry.tgz /home/ RUN linux命令 (XXX修改命令)# CMD在容器內運行某個指令, 啟動程序 # 該鏡像在運行容器實例的時候, 執行的具體參數是什么CMD ["參數1","參數2"]CMD ["/bin/bash"]# 該容器運行時, 執行的命令 # 等同于命令行的直接操作 docker run -it centos cat /etc/os-release CMD ["cat", "/etc/os-release"]# CMD 有關啟動程序的坑!

把宿主機安裝, 啟動nginx的理念放入dockerfile

  • RUN yum install nginx
  • RUN 配置文件修改 sed
  • RUN systemctl start nginx ?是錯誤的! 你的容器是啟動不了的! 容器內的程序必須是前臺運行的!
  • 正確的應該是 CMD [“nginx”,"-g",“deamon off;”]
  • 8.5 ENTRYPOINT和CMD的玩法

    作用和cmd一樣, 都是在指定容器啟動程序以及參數。當指定了 ENTRYPOINT 之后, CMD指令的語義就有了變化, 而是把CMD的內容當做參數傳遞給 ENTRYPOINT 指令。CMD xxx ENTRYPOINT xxx# 1.準備一個Dockerfile FROM centos:7.8.2003 RUN rpm --rebuilddb && yum install epel-release -y RUN rpm --rebuilddb && yum install curl -y CMD ["curl","-s","http://ipinfo.io/ip"]# 用法如下 docker run my_centos curl -s http://ipinfo.io/ip # docker run centos_curl# 2.構建鏡像 sudo docker buld .# 3.查看結果 Successfully built 66f71c370c5a# 4.檢查鏡像 [harry@iZ8vbq3uZ learn_docker]$ sudo docker tag 66f71c370c5a centos_curl [harry@iZ8vbq3uZ learn_docker]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_curl latest 66f71c370c5a 2 minutes ago 537MB# 5.運行鏡像, 生成容器記錄, 沒有前臺運行, 因此立即掛了 [harry@iZ8vbbip4buZ learn_docker]$ sudo docker run centos_curl 39.101.240.154[harry@iZ8vbbip4buZ learn_docker]$ # 6.上述運行準確, 但是我想再傳入一個參數, 該怎么辦 # 發現是無法直接傳入參數的, 該形式是覆蓋鏡像中的CMD # 就好比把docker鏡像, 當做一個環境, 去執行后面的命令 [harry@iZ8vbbip4buZ learn_docker]$ sudo docker run centos_curl pwd / [harry@iZ8vbbip4buZ learn_docker]$ sudo docker run centos_curl -I docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-I": executable file not found in $PATH: unknown.# 7.想要正確的給容器傳入一個 -I 參數, 該怎么辦? # 希望容器內能正確完成, 這個命令的執行 curl -s http://ipinfo.io/ip -I# 8.解決辦法1 # 給容器傳入新的, 完整的命令 # 這是一個投機取巧的辦法, 不合適 [harry@iZ8vbbip4buZ learn_docker]$ sudo docker run centos_curl curl -s http://ipinfo.io/ip -I HTTP/1.1 200 OK access-control-allow-origin: * content-type: text/html; charset=utf-8 content-length: 14 date: Thu, 31 Mar 2022 01:47:27 GMT x-envoy-upstream-service-time: 1 Via: 1.1 google# 9.正確的姿勢應該是使用 ENTRYPOINT # 修改Dockerfile如下 FROM centos:7.8.2003 RUN rpm --rebuilddb && yum install epel-release -y RUN rpm --rebuilddb && yum install curl -y ENTRYPOINT ["curl","-s","http://ipinfo.io/ip"]# 10.重新構建鏡像 sudo docker build .# 11.重新運行該鏡像, 看結果, 以及傳入新的參數 [harry@iZ8vbbiZ learn_docker]$ sudo docker tag d7de8a9749dd centos_curl_new# 此時發現, 傳入的CMD指令, 當做了ENTRYPOINT的參數 # 其實容器內, 執行的完整命令是: curl -s http://ipinfo.io/ip -I [harry@iZ8vbbiZ learn_docker]$ sudo docker run centos_curl_new -I HTTP/1.1 200 OK access-control-allow-origin: * content-type: text/html; charset=utf-8 content-length: 14 date: Thu, 31 Mar 2022 02:02:37 GMT x-envoy-upstream-service-time: 1 Via: 1.1 google

    8.6 ARG和ENV指令

    設置環境變量

    容器1 nginx

    容器2 php-fpm

    容器3 mysql

    dockerfile 腳本, shell腳本ENV NAME="harry" ENV AGE="18" ENV MYSQL_VERSION=5.6后續所有的操作, 通過 $NAME 可以直接獲取變量值了, 維護dockerfile腳本更友好, 方便使用 ADD COPY EXPOSEARG和ENV一樣, 設置環境變量 區別在于ENV 無論是在鏡像構建時, 還是容器運行, 該變量都可以使用 ARG只是用于構建鏡像需要設置的變量, 容器運行時就消失了

    8.7 VOLUME

    容器在運行時, 應該保證在存儲層不寫入任何數據, 運行在容器內產生的數據, 我們推薦十掛載, 寫入到宿主機上, 進行維護。

    # mount /mnt 掛載VOLUME /data # 將容器內的/data文件夾, 在容器運行時, 該目錄自動掛載為匿名卷, 任何向該目錄中寫入數據的操作, 都不會被容器記錄, 保證的容器存儲層無狀態理念# Dockerfile1 FROM centos MAINTAINER harry VOLUME ["/data1","/data2"]# 該容器運行的時候, 這2個目錄自動和宿主機的目錄做好映射關系 sudo docker build . # 運行該鏡像 sudo docker run b18be2a2c940 # 查看生成的容器信息 [harry@iZ8vbbip4bq97z0o60rq3uZ learn_docker]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> b18be2a2c940 11 seconds ago 203MB# docker inspect命令查看 docker inspect 8f2b0de0df41"Volumes": {"/data1": {},"/data2": {}},"Mounts": [{"Type": "volume","Name": "a1bdf01b92de0684f03b49023778a0c026e40ee32ccec285e9c46bacd29ebaee","Source": "/var/lib/docker/volumes/a1bdf01b92de0684f03b49023778a0c026e40ee32ccec285e9c46bacd29ebaee/_data","Destination": "/data1","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "1429e5198d7bb297ee3ded977a4cae6ab63312950ecb3d2a76bec7b814944f02","Source": "/var/lib/docker/volumes/1429e5198d7bb297ee3ded977a4cae6ab63312950ecb3d2a76bec7b814944f02/_data","Destination": "/data2","Driver": "local","Mode": "","RW": true,"Propagation": ""}],

    1.容器數據掛載的方式, 通過dockerfile, 指定VOLUME目錄

    2.通過docker run -v 參數, 直接設置需要映射掛載的目錄

    8.8 EXPOSE

    指定容器運行時對外提供的端口服務,

    • 幫助使用該鏡像的人, 快速理解該容器的一個端口業務

    • docker port 容器 docker run -p 宿主機端口:容器端口 docker run -P # 作用是隨機宿主機端口:容器內端口

    8.9 WORKDIR

    用在dockerfile中, 目錄的切換, 更換工作目錄

    WORKDIR /opt

    8.10 USER

    用于改變環境, 用于切換用戶

    USER root USER harry

    十、構建一個網站鏡像

    1.nginx, 修改首頁內容, html網站就跑起來了, web server , 提供web服務, 提供代理轉發, 提供網關, 限流托等 …apache

    2.web framework, web框架, 一般由開發, 通過某個開發語言, 基于某個web框架, 自己去開發一個web站點, python, diango框架

    1.用python語言, 基于flask wen框架, 開發一個自己的網站, 寫了一個后端的網站代碼

    2.開發dockerfile, 部署該代碼, 生成鏡像

    3.其他人基于該鏡像, docker run就可以在電腦跑起來這個網站

    10.1 部署全流程

    # 1.在宿主機下, 準備一個目錄, 準備好dockerfile, 你的代碼 # 寫一個flask的python代碼 [harry@iZ8vbbip4bq9q3uZ learn_docker]$ vim harry_flask.py [harry@iZ8vbbip4bq9q3uZ learn_docker]cat harry_flask.py # coding:utf8 from flask import Flask app = Flask(__name__) @app.route('/hello') def hell():return "hello docker, i am harry."if __name__ == "__main__":app.run(host='0.0.0.0', post=777)# 2.編寫dockerfile touch Dockerfile# 3.檢查代碼文件環境, 以及內容 [harry@iZ8vbbip4uZ learn_docker]$ ls Dockerfile harry_flask.py [harry@iZ8vbbip4uZ learn_docker]$ cat Dockerfile FROM centos:7.8.2003 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo; RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo; RUN yum makecache fast; RUN yum install python3-devel python3-pip -y RUN pip3 install -i https://pypi.douban.com/simple flask COPY harry_flask.py /opt WORKDIR /opt EXPOSE 777 CMD ["python3","harry_flask.py"] [harry@iZ8vbbip4uZ learn_docker]$# 4.構建鏡像 # --no-cache 不用緩存 sudo docker build --no-cache -t 'harry777/my_flask_web' . # 最后的結果類似如下, 才是正確 Removing intermediate container e8e9da66a65d---> b4ba1cb087a9 Successfully built b4ba1cb087a9 Successfully tagged harry777/my_flask_web:latest[harry@iZ8vuZ learn_docker]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE harry777/my_flask_web latest b4ba1cb087a9 36 seconds ago 715MB# 5.運行鏡像, 生成容器 docker run -d --name my_flask_web -p 777:777 harry777/my_flask_web # 6.訪問宿主機, 看容器內的flask web 網頁 http://39.101.240.154:777/hello hello docker, i am harry.# 7.如何修改網站的內容, 這個程序時跑在容器里了

    10.2 如何修改該網站的內容

    1.修改宿主機的代碼, 以及Dockerfile, 重建應用

    2.你可以進入到以及運行的容器內, 重啟容器即可

    # 1.進入容器 docker exec -it 容器id bash# 2.修改容器內的程序 vim harry_flask.py# 3.退出容器, 重啟容器 exit docker restart 容器id docker ps # 看下是否存活

    10.3 再次強調docker的好處, 用法

    比如安裝一個etcd, nacos, 都是比較復雜的一些軟件

    需要依賴于go語言環境, 比如需要依賴于java環境, 在自己的機器上安裝好對應的開發環境, 以及對應的版本, 以及各種依賴

    tomcat, jdk環境

    當你有了docker

    docker pull tomcat # 這些主流的鏡像都是可以直接找到, 并且該鏡像中, 就已經打包好了java環境

    docker pull nacos # 打包好了各種環境依賴

    docker run tomcat xxx … # 直接就可以訪問tomcat了

    十一、總結

    容器是docker的核心概念, 容器是一個或者一組應用, 它的運行狀態如下:

    • docker利用容器運行應用程序
    • 容器是鏡像的運行實例, 可以被run、start、stop、rm
    • 每個容器都是相互隔離的, 保證平臺安全
    • 容器可以看做一個簡易版Linux環境(有root權限、進程、用戶空間、網絡)
    • 鏡像是只讀的, 容器在啟動的時候創建一層可寫層。

    dockerfile面向開發, docker image 作為交付標準, docker container涉及部署和運維, 三者結合起來完成docker體系。

    上圖可以理解

    FROM centos:7.8.2003 選擇基礎鏡像 ADD run.sh 添加文件進鏡像, 這一層鏡像只有一個內容, 就是這個文件 VOLUME /data 設定存儲目錄, 并未添加文件, 只是更新了鏡像的json文件, 便于啟動的時候讀取該層信息 CMD ["./run.sh"] 更新json文件, 設定程序入口

    docker容器管理總結

    # 運行容器, 且進入容器內 docker run -it ubuntu bash# 容器運行web程序 # 注意端口的使用, 數字大一點, 8000以后開始使用 docker run --name my_nginx_9000 -d --restart=always -p 9000:80 nginx# docker run 鏡像id 這是前臺運行容器# 查看容器內日志, 實時刷新 docker logs -f # 查看運行時, 以及掛掉的日志 docker ps 在運行的容器 #等同于 docker container lsdocker ps -a 掛掉以及活著的容器 docker container ls -a# 停止啟動 docker start docker stop# 進入容器內 docker exec -it 容器id bash# 刪除容器 docker rm 容器id docker rm `docker ps -aq` # 強制殺死容器 docker rm -f 容器id# 查看容器進行進程信息 docker top 容器id# 查看容器內資源 docker status 容器id# 查看容器的具體信息 docker inspect 容器id# 獲取容器內的ip地址, 容器的格式化參數 docker inspect 容器id | grep ip段 # 拿到容器內ip docker inspect --format '{{.NetworkSettings.IPAddress}}' 容器id

    docker run 啟動容器的時候, docker后臺操作流程是

    • 檢車本地是否有該鏡像, 沒有就下載
    • 利用鏡像創建且啟動一個容器
    • 分配容器文件系統, 在只讀的鏡像層掛載讀寫層
    • 宿主機的網橋接口會分配一個虛擬接口到容器中
    • 容器獲得地址池里的ip地址
    • 執行用戶指定的程序
    • 若程序里沒有進程在運行, 容器執行完畢后立即終止
    docker start 可以啟動一個處于stop狀態的容器

    總結:

    #mermaid-svg-hbQbZ9Mavy1zNfYD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .error-icon{fill:#552222;}#mermaid-svg-hbQbZ9Mavy1zNfYD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hbQbZ9Mavy1zNfYD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .marker.cross{stroke:#333333;}#mermaid-svg-hbQbZ9Mavy1zNfYD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hbQbZ9Mavy1zNfYD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .cluster-label text{fill:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .cluster-label span{color:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .label text,#mermaid-svg-hbQbZ9Mavy1zNfYD span{fill:#333;color:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .node rect,#mermaid-svg-hbQbZ9Mavy1zNfYD .node circle,#mermaid-svg-hbQbZ9Mavy1zNfYD .node ellipse,#mermaid-svg-hbQbZ9Mavy1zNfYD .node polygon,#mermaid-svg-hbQbZ9Mavy1zNfYD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hbQbZ9Mavy1zNfYD .node .label{text-align:center;}#mermaid-svg-hbQbZ9Mavy1zNfYD .node.clickable{cursor:pointer;}#mermaid-svg-hbQbZ9Mavy1zNfYD .arrowheadPath{fill:#333333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hbQbZ9Mavy1zNfYD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hbQbZ9Mavy1zNfYD .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hbQbZ9Mavy1zNfYD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hbQbZ9Mavy1zNfYD .cluster text{fill:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD .cluster span{color:#333;}#mermaid-svg-hbQbZ9Mavy1zNfYD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hbQbZ9Mavy1zNfYD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}docker什么是容器容器VS虛擬機docker優點高效的利用系統資源更快啟動時間一致性環境輕松交付,部署主流公司都在用docker核心組成安裝部署鏡像加速器生命周期UnionFS鏡像管理容器管理倉庫管理dockerfile實踐構建docker鏡像部署一個用于運行你所需的容器環境相當于一個腳本,通過dockerfile自己的命令,來構建軟件依賴,文件依賴,存儲等等....指令合集FROM MAINTAINR RUN ADD WORKDIR VOLUME EXPOSE CMD ENTRYPOINT ENV USER 還有很多, 根據需要學習存儲、網絡、REST、API容器編排docker生產實踐

    文章就到這里, 喜歡的話點個關注和贊吧?~

    總結

    以上是生活随笔為你收集整理的Python3 - 深入学习Docker容器管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日韩天天干 | 欧美一级视频免费 | 亚洲免费小视频 | 激情亚洲综合在线 | 久操97| 久久99国产一区二区三区 | 久久精品99国产国产 | 中文字幕 91| 91在线影视 | av性网站| 久久亚洲欧美日韩精品专区 | 日日夜夜精品视频 | 人人添人人澡 | 午夜丁香视频在线观看 | 国产码电影 | 欧美综合在线视频 | 91精品国产91热久久久做人人 | 日韩精品久久久久 | www.久久精品视频 | 99视频精品全部免费 在线 | 在线观看国产高清视频 | 亚洲另类交 | 黄网站app在线观看免费视频 | 国产精品欧美久久久久三级 | 日本久久综合网 | av国产在线观看 | 日本一区二区不卡高清 | 久久精品日本啪啪涩涩 | 97精品视频在线 | 激情av五月婷婷 | 欧美一区二区三区在线播放 | 蜜臀精品久久久久久蜜臀 | 欧美最猛性xxxxx亚洲精品 | 最新精品国产 | 久久久亚洲影院 | 色黄久久久久久 | 亚洲电影一级黄 | 久久精品久久久久久久 | av一本久道久久波多野结衣 | 国产无遮挡又黄又爽在线观看 | 日韩性片| 久久精品1区 | 久久99精品久久只有精品 | 日本黄色一级电影 | 91久久人澡人人添人人爽欧美 | 人人爽人人av | 亚洲免费av网站 | 欧美一二三区在线观看 | 中文字幕av在线 | 91视频在线自拍 | 久久精品这里都是精品 | 久久天天躁狠狠躁夜夜不卡公司 | 香蕉久草 | 免费视频一区 | 天天拍天天草 | 国产在线观看你懂得 | 日本婷婷色 | 在线免费看黄色 | 国产小视频在线看 | 免费看成年人 | 午夜精品电影 | 在线免费观看视频一区二区三区 | 亚洲国产欧美一区二区三区丁香婷 | 国产一区福利在线 | 欧美精品一级视频 | 日韩在线观看一区二区三区 | 亚洲在线免费视频 | av丁香花| 国产精品久久麻豆 | 91成人蝌蚪| 人人网av | 国产视频在线一区二区 | www.看片网站 | av中文字幕免费在线观看 | 十八岁以下禁止观看的1000个网站 | www视频免费在线观看 | 97碰碰视频 | 中文字幕在线视频国产 | 欧美亚洲国产一卡 | 午夜精品视频免费在线观看 | 在线视频观看成人 | 激情婷婷综合网 | 99色亚洲 | 亚洲精品大全 | 国产高清在线观看 | 成人在线一区二区 | 99视频在线免费播放 | 91在线观看视频网站 | 叶爱av在线 | 涩av在线 | 狠狠的干狠狠的操 | 精品久操| 久久免费视频这里只有精品 | 天天婷婷 | 狠狠狠狠狠狠狠狠干 | 久久视频国产精品免费视频在线 | 美女网站免费福利视频 | 日日夜夜噜噜噜 | 丁香花中文在线免费观看 | 天天综合网久久综合网 | 亚洲人av免费网站 | 成人免费视频播放 | 中文字幕在线观看视频一区 | a视频在线观看 | 伊人影院得得 | 成人av免费电影 | 在线亚洲高清视频 | av网站有哪些 | 欧美激情一区不卡 | 免费av看片 | 成人亚洲精品国产www | 成人av久久 | 国内精品久久天天躁人人爽 | 亚洲黄色在线观看 | 99国产一区| 国产美女精品在线 | 久久免费电影 | 91在线www| 欧美亚洲精品在线观看 | 欧美国产日韩在线观看 | 国产成人精品久久亚洲高清不卡 | 精品人人人人 | 亚洲激情中文 | 天天摸天天操天天舔 | 国产精品免费久久久久影院仙踪林 | 国产福利91精品张津瑜 | 欧美99热| 日韩av在线小说 | 免费在线激情电影 | 婷婷久久综合九色综合 | 毛片一二区 | 久久久午夜精品理论片中文字幕 | 97香蕉久久国产在线观看 | 日本久久免费视频 | 成人黄性视频 | 日韩在线视频播放 | 日韩精品一区二区三区丰满 | 久久97久久 | 女人18片毛片90分钟 | av免费观看高清 | 国产一级特黄电影 | 天干啦夜天干天干在线线 | 999久久国精品免费观看网站 | 久久久网| 久久天 | 在线观看视频在线 | 99免费在线观看 | 亚洲理论片| 人人射人人插 | 午夜av在线电影 | 久久久美女| 亚洲天堂视频在线 | 91精品视频在线看 | 五月激情av| 精品国产一区二区久久 | 精品久久国产 | 成人a免费视频 | 久久免费视频在线观看30 | 最新婷婷色 | 久久9999久久免费精品国产 | 九九热精品在线 | 国产精品一区免费在线观看 | av在线影视 | 狠狠操导航 | 日韩欧美在线观看一区二区三区 | 天天干天天拍 | 国产91精品看黄网站在线观看动漫 | 成人久久18免费 | av网址在线播放 | 国产麻豆剧果冻传媒视频播放量 | 日韩在线二区 | 国产精品高清免费在线观看 | 香蕉视频在线观看免费 | 国产一区免费在线观看 | 久久免费国产视频 | 特级黄录像视频 | 亚洲精品久久久久999中文字幕 | 欧美性高跟鞋xxxxhd | 中文字幕在线视频第一页 | 亚洲婷久久| 在线 成人| av丝袜制服 | 日韩视频中文字幕 | 99热99re6国产在线播放 | 中文字幕av在线不卡 | 亚洲精品影院在线观看 | 久久久久久久久精 | 美女啪啪图片 | 中文字幕2021 | 色综合五月天 | 国产一区二区三区久久久 | 亚洲成人家庭影院 | 在线视频一区观看 | 热精品| 99视频免费播放 | 五月婷婷色 | 国内小视频在线观看 | 久久免费视频播放 | 天天干婷婷 | 成全在线视频免费观看 | 国内精品久久久久影院日本资源 | 黄色软件大全网站 | 最新日韩在线观看 | 精品在线视频播放 | 日韩欧美在线一区二区 | 日韩伦理一区二区三区av在线 | 国产精品中文久久久久久久 | 国产视频一区二区在线播放 | 精品国内自产拍在线观看视频 | 五月天.com | 久久久精品午夜 | 国产精品一级视频 | 免费黄色在线网址 | 中文字幕免费在线 | 在线免费国产视频 | av一区二区三区在线 | 一区二区三区视频网站 | 欧美性色黄 | 操操操人人人 | 波多野结衣在线观看一区 | 国产麻豆精品95视频 | 欧美性生活大片 | 国产黄免费 | 91.精品高清在线观看 | 国产99色 | 亚洲aⅴ一区二区三区 | 人人擦| 91漂亮少妇露脸在线播放 | 性色av一区二区三区在线观看 | 91精品一区国产高清在线gif | 麻豆一精品传二传媒短视频 | 九色精品免费永久在线 | 成人免费视频网 | 国产精品乱码久久久 | 99久久99视频 | 国产精品资源网 | 日韩欧美高清在线观看 | 免费av看片 | 99久久精| 免费视频久久 | 欧美精品日韩 | 日韩在线播放欧美字幕 | 91视频 - v11av | 久久久久久久久久久久av | avav片 | 国产色影院| 在线免费黄色 | 欧美激情精品一区 | www.夜夜草 | 中文字幕一区二区三区乱码在线 | 成人免费观看完整版电影 | 欧美,日韩| 国产精品3区 | 亚洲伦理电影在线 | 成人av网站在线观看 | 精品久久久久久综合 | 亚洲精品国产片 | 国产精品自在线拍国产 | 久久综合狠狠综合久久狠狠色综合 | 国内综合精品午夜久久资源 | 久久精品第一页 | 国产成人久久av | 狠狠激情中文字幕 | 久久久久北条麻妃免费看 | 国产精品久久久久久久久免费看 | 欧美成人中文字幕 | 精品久久久久久电影 | 免费不卡中文字幕视频 | 成人一级电影在线观看 | 久久黄色小说视频 | 久久精品一二三区白丝高潮 | 日精品 | 国产精品69av | 在线免费性生活片 | 8x成人免费视频 | 国产一级电影免费观看 | 99精品视频免费看 | 国内精品亚洲 | 欧美a影视 | 国产精品video爽爽爽爽 | 欧美日韩亚洲第一 | 免费成人av | 成年一级片 | 色夜影院| 午夜12点 | 日本特黄特色aaa大片免费 | 国产成人精品网站 | 久久影视网 | 久99久中文字幕在线 | 欧美精品久久久久久久久久丰满 | 五月婷婷免费 | 国产午夜精品一区二区三区四区 | 日本韩国精品一区二区在线观看 | 久久免费视频国产 | 玖玖在线免费视频 | 天天se天天cao天天干 | 国产最新在线视频 | www.av中文字幕.com | 69精品在线观看 | 亚洲免费观看在线视频 | 国产不卡高清 | 97影视| 97看片吧 | 免费观看高清 | 国产精品自在欧美一区 | 中文字幕在线视频精品 | 91在线色| 日本中文字幕网址 | se婷婷| 亚洲va男人天堂 | 五月香婷| 一区二区三区高清在线 | 九九九毛片| 精品一区精品二区高清 | 久久人人爽人人爽人人片av软件 | 成年人视频在线免费观看 | 精品国自产在线观看 | 日日干av| 久久久官网 | 免费视频91蜜桃 | 久久国产精品免费一区二区三区 | av网站手机在线观看 | 国产精品成人一区二区三区 | av网站在线免费观看 | 免费亚洲成人 | 伊人色综合网 | 永久免费毛片在线观看 | 九九热只有这里有精品 | 天天躁日日躁狠狠躁av麻豆 | 久久亚洲影院 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产精品免费视频观看 | 黄色av电影| 成年人免费观看在线视频 | 在线观看免费av网站 | 国产中文字幕在线视频 | 91插插视频 | 超碰在线网 | 97热视频| 天天干天天操天天干 | 又黄又爽又刺激的视频 | 日韩久久视频 | 成年人免费看的视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 国产一区二区视频在线 | 天天干天天操天天入 | 制服丝袜亚洲 | 国产精品自拍在线 | 日韩国产欧美在线视频 | 久久久久久久99 | 日韩一区二区久久 | 亚洲精品午夜国产va久久成人 | 一级黄色电影网站 | 黄色网www | 免费观看性生交大片3 | 五月开心色 | 亚洲日本va在线观看 | 久久99精品一区二区三区三区 | 久久成人高清视频 | 天天操狠狠操 | 69久久夜色精品国产69 | 亚洲黄色小说网址 | 国产精品久久久久亚洲影视 | 日韩91在线| 69国产盗摄一区二区三区五区 | 国产精品久久久亚洲 | 国产精品久久电影观看 | 国产精品久久久久久麻豆一区 | 欧美日韩精品区 | 中文字幕人成人 | 久久免费大片 | 精品视频在线免费 | 亚洲精品在线观看中文字幕 | 99精品视频精品精品视频 | 国产第一页福利影院 | 国产精品初高中精品久久 | 樱空桃av| 久久精品视频网站 | 午夜性生活片 | 久久精品国产一区二区三区 | 91精品国产乱码久久 | 一区 二区 精品 | 色五月色开心色婷婷色丁香 | 男女精品久久 | av在线免费观看黄 | 区一区二区三在线观看 | 国产999精品久久久久久绿帽 | 天天爱天天操天天爽 | 色五月成人 | 五月天综合网站 | 久久久久电影 | 国产成人一区二区啪在线观看 | 国产一二三四在线视频 | 久草在线视频在线观看 | av色综合网 | 中文国产成人精品久久一 | 免费h视频| 久草视频播放 | 久久 国产一区 | 国产精品6 | 亚洲综合在线观看视频 | 欧洲成人免费 | 日韩xxx视频 | 91一区啪爱嗯打偷拍欧美 | 久久麻豆视频 | 黄色片网站大全 | 99视频久| 婷婷六月天天 | 综合国产在线 | 日韩va在线观看 | 午夜精品久久久久久久久久 | 国产女做a爱免费视频 | 久久久午夜精品福利内容 | 国产美女在线精品免费观看 | 日韩中文字 | 免费看三级网站 | 成人蜜桃| 欧美激情精品一区 | 一区中文字幕 | 久久久精品综合 | 四虎欧美 | 亚洲国产欧洲综合997久久, | 伊色综合久久之综合久久 | 婷婷在线免费观看 | 91亚色视频在线观看 | 欧美在线日韩在线 | 美女免费视频网站 | 久久久久福利视频 | 去干成人网| 中文字幕 国产专区 | 91传媒激情理伦片 | 国产99久久久精品视频 | 亚洲国产精品久久久久 | 国产黄大片在线观看 | 中文字幕在线观看播放 | 久久首页 | 亚洲精品福利在线观看 | 中文字幕精品在线 | 成人一级在线观看 | 黄色特级毛片 | 亚洲 欧美 另类人妖 | 在线不卡视频 | 天天插一插| 国产91精品一区二区 | 国产在线精品播放 | av片在线观看 | 国产精品久久久久久妇 | 国产精品尤物 | 在线观看亚洲国产精品 | 久久久久99精品成人片三人毛片 | 开心激情网五月天 | 91av视频播放 | 久久国产一区二区 | 国产综合片 | 日韩在线免费播放 | 久久久男人的天堂 | 不卡的av在线播放 | 国产精品久久久久av | 麻豆一区二区 | 中文字幕av在线不卡 | 二区中文字幕 | 成人免费xyz网站 | av免费在线观看网站 | 日本中文字幕网 | 久久伊人八月婷婷综合激情 | 中文乱码视频在线观看 | 热久久国产精品 | 2021国产精品视频 | 国产精品一区二区电影 | 国产va在线| 黄色大片日本免费大片 | 激情婷婷亚洲 | 亚洲精品成人av在线 | 三级a视频 | 一区二区视频在线播放 | 国产色视频网站 | 成人一级片免费看 | 在线看一区 | 欧美一级性生活 | 中文字幕在线观看完整版电影 | 亚洲午夜av电影 | 蜜桃视频色 | 天天操天天色天天射 | 开心激情婷婷 | av高清网站在线观看 | 天堂在线免费视频 | 日韩一区正在播放 | 69国产成人综合久久精品欧美 | 狠狠色丁香久久婷婷综合_中 | www.eeuss影院av撸| 五月丁色 | 精品成人在线 | 国产成人精品一区二区三区在线观看 | 久久视频精品在线 | 国产精品视频专区 | 日韩精品一二三 | www.在线观看av | 国产又粗又长的视频 | 一二三区视频在线 | 欧美日韩在线免费观看视频 | 免费av的网站 | 中文字幕免费国产精品 | 狠狠狠狠狠干 | 青青河边草免费直播 | www.伊人网| 色综合天天综合在线视频 | 中文字幕视频一区二区 | 99国产精品久久久久久久久久 | 黄色免费网站下载 | 精品久久1 | 7799av| 91亚洲精品国偷拍 | 中文字幕视频播放 | 国产在线精品区 | 国产福利在线 | 99视频在线观看免费 | 国产女人18毛片水真多18精品 | 在线观看亚洲精品视频 | 国产精品永久久久久久久www | 中文字幕二区在线观看 | 欧美一级片免费观看 | 国产黄网站在线观看 | 91九色在线观看视频 | 人人看人人做人人澡 | 日韩性片| 91精品国产网站 | 中文字幕乱偷在线 | 亚洲黄色免费电影 | 96视频免费在线观看 | 亚洲国产成人久久 | 婷婷天天色| 很污的网站 | 国产一卡二卡四卡国 | 国际精品久久久久 | 麻豆国产精品视频 | 香蕉97视频观看在线观看 | 五月婷婷久 | av在线免费在线观看 | 成+人+色综合| 国产中文字幕在线播放 | se视频网址| 国产精品欧美日韩在线观看 | 欧美性色综合网站 | 97视频在线观看网址 | 看污网站| 午夜性福利 | av+在线播放在线播放 | 亚洲国产中文在线 | 久草在线高清视频 | 一区二区三区四区五区六区 | 激情视频免费观看 | 久久99精品国产99久久6尤 | 99精品区| 国产视频2 | 日本巨乳在线 | 九色视频网| 特级西西www44高清大胆图片 | 丁香六月激情婷婷 | 亚洲蜜桃av | 一区二区精品 | 福利视频一二区 | 色婷婷国产精品一区在线观看 | 99精品国产免费久久久久久下载 | 欧美视频99| 亚洲精品视频在线观看免费视频 | 992tv成人免费看片 | 久久不射影院 | av福利电影 | 中文字幕在线免费97 | 成年人在线 | 成年人国产视频 | 久久综合狠狠综合久久综合88 | 色干综合| 四虎亚洲精品 | 超碰av在线| 欧美激情视频一区二区三区免费 | 亚洲一二三区精品 | 99久久999久久久精玫瑰 | 精品欧美一区二区三区久久久 | 婷婷丁香七月 | 久久精品一区二区三区四区 | 国产精品免费不 | 成人va天堂 | 美女免费视频黄 | av千婊在线免费观看 | 欧美一级特黄高清视频 | av电影免费在线看 | 亚洲一片黄 | 精品国产一区二区三区四区vr | 日本mv大片欧洲mv大片 | 99久久这里有精品 | 亚洲免费国产 | 日精品在线观看 | 热久久这里只有精品 | 99热网站| 中文字幕在线色 | 黄色软件在线观看视频 | www久草| 美女久久久久久久久久久 | 在线国产精品视频 | 欧美 另类 交| 高清av网| 亚洲视屏一区 | 欧美一区免费在线观看 | 国产高清免费在线观看 | 欧美人操人 | 国产成人亚洲在线电影 | 亚洲好视频 | 国产区精品在线观看 | 美女在线免费观看视频 | 在线亚洲成人 | 久久99久久精品国产 | 男女激情网址 | 9ⅰ精品久久久久久久久中文字幕 | 狠狠狠色丁香婷婷综合久久五月 | 一区二区男女 | 欧美另类老妇 | 亚洲妇女av | 国产.精品.日韩.另类.中文.在线.播放 | 国产网站在线免费观看 | 又长又大又黑又粗欧美 | 亚洲成人动漫在线观看 | 不卡的av| 久久久国产精品麻豆 | 丁香网婷婷| 在线观看av的网站 | 国产精品久久久 | 激情在线网址 | 99夜色 | 99久国产| 久久久久久毛片精品免费不卡 | 日本黄色片一区二区 | 天天摸天天干天天操天天射 | 免费一区在线 | 一区二区三区免费看 | 人人澡超碰碰 | 日韩资源在线 | 五月婷婷视频在线 | 欧美日韩免费观看一区二区三区 | 99re中文字幕| 午夜美女福利直播 | 久久伊人爱 | 夜夜视频欧洲 | 国产码电影 | 一区二区三区不卡在线 | 91成人看片 | 亚洲国产中文字幕在线 | 一级做a爱片性色毛片www | 在线免费中文字幕 | 国产视频资源在线观看 | 日本黄色免费观看 | 免费日韩 精品中文字幕视频在线 | 亚洲国产精彩中文乱码av | 亚洲精品国产成人 | 日韩在线观看一区二区三区 | 亚洲欧美综合精品久久成人 | 国产这里只有精品 | 一区二区观看 | 亚洲免费永久精品国产 | 天天鲁一鲁摸一摸爽一爽 | 高清av不卡 | 婷婷丁香视频 | 欧美日韩一区二区在线 | 国产韩国日本高清视频 | 亚洲va天堂va欧美ⅴa在线 | 亚洲蜜桃在线 | 国产精品毛片网 | 欧美日韩aaaa | 丁香六月婷 | av大全免费在线观看 | 亚洲欧美日本一区二区三区 | 精品一区免费 | 午夜精品久久一牛影视 | av在观看 | 亚洲精欧美一区二区精品 | 欧美小视频在线观看 | av久久在线 | 精品国产1区| 伊人久久精品久久亚洲一区 | 91资源在线免费观看 | 国产黄免费在线观看 | 国产男女爽爽爽免费视频 | 国产区久久 | 96看片| 综合色天天 | 久99久精品视频免费观看 | 成人午夜电影在线 | 国产亚洲精品久 | 99久久这里只有精品 | 日韩在线观看精品 | 亚洲中字幕 | 亚洲高清资源 | 少妇搡bbbb搡bbb搡忠贞 | 天天爽天天碰狠狠添 | 黄色av网站在线观看 | 成 人 免费 黄 色 视频 | 久草五月 | 深爱激情婷婷网 | 日韩一区二区三免费高清在线观看 | 探花视频在线版播放免费观看 | 天天干天天操天天操 | 五月激情av | 黄色a在线观看 | 五月天综合网站 | 日韩久久久久久久久久 | 激情 一区二区 | 伊人婷婷激情 | www.午夜色.com | 天天激情站 | 日日夜夜爱 | 久久久久久久国产精品视频 | 999电影免费在线观看 | 精品久久国产精品 | 久久中文欧美 | 99视频在线免费播放 | 久草在线视频免费资源观看 | 久草在线这里只有精品 | 中文一区二区三区在线观看 | 成年人免费在线看 | 中文字幕一区二区三区久久 | 区一区二区三在线观看 | 三级免费黄色 | 欧洲精品在线视频 | 国产黄色播放 | 免费在线看v | 婷婷六月丁香激情 | 综合久久久久久 | www久久久| av中文字幕网址 | 日韩激情综合 | 黄网站色成年免费观看 | av不卡中文字幕 | 国产高清视频免费最新在线 | 韩国av永久免费 | 国产人免费人成免费视频 | 韩日精品中文字幕 | 午夜精品久久久久久久爽 | 波多野结衣在线中文字幕 | 国产精品黄 | 日韩欧美网站 | av片中文字幕 | 久久国产网站 | 2023国产精品自产拍在线观看 | 狠狠躁日日躁狂躁夜夜躁av | 日韩欧美69 | 伊人狠狠色 | 国产日产欧美在线观看 | 亚洲成人资源网 | 在线观看中文字幕一区二区 | 久久人人爽人人片av | 国产精品 中文字幕 亚洲 欧美 | 深爱五月激情五月 | 国产亚洲视频中文字幕视频 | www免费在线观看 | 亚洲一区在线看 | 免费国产一区二区视频 | 婷婷 综合 色 | 亚洲免费精彩视频 | 91精品国产99久久久久 | 黄色成年 | 婷婷5月激情5月 | 不卡日韩av | 国产精品一区在线 | 精品国产美女在线 | 国产小视频在线观看 | 99热最新精品 | 国产传媒中文字幕 | 免费av免费观看 | 极品美女被弄高潮视频网站 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 中文字幕免费高清在线 | 一二三区在线 | 日韩av在线网站 | 色婷婷国产精品 | 久久影视精品 | 手机在线中文字幕 | 手机在线日韩视频 | 国产一级片网站 | caobi视频 | 久久久久国产成人免费精品免费 | 欧美在线18| 99在线观看视频网站 | 午夜影院三级 | 精品国产伦一区二区三区观看说明 | 在线观看日本韩国电影 | 91精品久久香蕉国产线看观看 | 天天插天天射 | 在线激情av电影 | 国产中文在线视频 | 国产免费影院 | 伊人色综合久久天天 | 五月天开心 | 国产成人黄色在线 | 人人爱在线视频 | 日本在线观看一区二区三区 | 狠狠狠狠狠狠 | 久久久av免费 | 亚洲精品系列 | 欧美俄罗斯性视频 | 久久久久久久久久久精 | 2023天天干 | 国产尤物视频在线 | 综合五月婷婷 | 日韩美精品视频 | aa级黄色大片 | 808电影 | 久久久精品影视 | 亚洲影院一区 | 日韩av视屏在线观看 | 国产精品午夜免费福利视频 | 国产一区二区不卡在线 | 天天射天天操天天 | 久久久精品日本 | 久久精品91视频 | 一级黄色大片在线观看 | 日韩激情影院 | 最近中文字幕mv免费高清在线 | 久久a v电影| 国产精品系列在线播放 | 精品视频在线播放 | 国产精品久久久久久久毛片 | 日韩欧美综合 | 成全在线视频免费观看 | 中文字幕在线观看视频免费 | 男女精品久久 | 在线免费高清视频 | 91精品少妇偷拍99 | 色视频在线免费观看 | 日本中文一区二区 | 五月婷婷久 | 日韩va在线观看 | 免费色视频在线 | 中文字幕免费国产精品 | 一区二区三区在线不卡 | 久久兔费看a级 | 国产精品第一页在线 | 国产理论影院 | 国产成人免费在线 | 国产区网址 | 三级av免费 | 国产成人一级 | 狠狠干狠狠艹 | 成人亚洲精品久久久久 | 国产亚洲婷婷 | 四虎永久国产精品 | 久草视频免费 | 国产精品高清在线观看 | 四虎影视成人精品国库在线观看 | 久久久久久久久久久久亚洲 | 亚洲色影爱久久精品 | 韩国精品视频在线观看 | 亚洲精品在线一区二区三区 | 91成人免费观看视频 | 国产精品久久久久免费观看 | 伊人成人精品 | 国产无遮挡又黄又爽在线观看 | 天天色棕合合合合合合 | 999日韩 | 最近高清中文字幕在线国语5 | 久久久久久久久久福利 | 久久九九影院 | 精品国产一区二区三区av性色 | 婷婷av网 | 奇米网在线观看 | 91麻豆精品国产91久久久久久久久 | 亚洲一级电影 | 最新日本中文字幕 | 狠狠狠的干 | 一区二区三区四区在线免费观看 | 亚洲免费不卡 | 久久草视频 | 91视频91自拍 | 夜夜视频资源 | 国产在线黄 | 国产成人一区二区精品非洲 | 国产理论片在线观看 | 亚洲综合狠狠干 | 成人一区在线观看 | 免费看麻豆 | 奇米导航| 国产aa免费视频 | 夜夜摸夜夜爽 | 午夜精品一二三区 | 深爱综合网 | 中文字幕亚洲精品在线观看 | 日本中文字幕影院 | 久热av | 91在线资源 | 日本精品一区二区在线观看 | 久久国产精品99久久久久久进口 | 色综合久久66 | 婷婷六月天综合 | 91精品专区| 久久五月婷婷丁香 | 亚洲 欧美 综合 在线 精品 | 四虎国产精品免费观看视频优播 | 中文字幕免费中文 | 97精品一区 | 成人一区二区三区中文字幕 | 日日躁夜夜躁xxxxaaaa | 成人一区二区三区中文字幕 | 天天爽天天摸 | 一级黄色免费 | 一区二区三区四区五区在线 | 在线激情小视频 | 成人在线免费视频观看 | 亚洲男人天堂a | 一色屋精品视频在线观看 | 国产999精品视频 | 亚洲色综合 | 五月婷婷伊人网 | 91免费观看国产 | 91色欧美 | 婷婷视频在线 | 国产精品自在欧美一区 | 国产精品99久久久久久大便 | 91在线看视频免费 | www九九热 | 久草在线99 | a√天堂中文在线 | 久草在线综合 | 狠狠干2018| 久草com| 日韩系列在线 | 丁香网五月天 | 日韩av成人在线观看 | 国产成人精品一区二区三区在线观看 | 中文字幕中文 | 9i看片成人免费看片 | 日韩毛片在线免费观看 | 成人黄色电影在线播放 | 性色av一区二区三区在线观看 | 亚洲高清视频在线观看免费 | 18网站在线观看 | 激情小说久久 | 色94色欧美 | 少妇av片 | 国产又粗又猛又黄又爽视频 | 国产亚洲一级高清 | 久久艹国产 | 91久久精品日日躁夜夜躁国产 | 久久激情视频 | 丁香激情综合国产 | 99精品一区二区三区 | 肉色欧美久久久久久久免费看 | 麻豆视频成人 | 天天操天天操天天操天天 | 中文字幕成人在线观看 | 香蕉视频导航 | 欧美国产精品久久久久久免费 | av成人在线网站 | 九九精品视频在线观看 | 久久免费看| 婷婷久久一区 | 8x8x在线观看视频 | 久久国产精品99国产 | 精品亚洲视频在线观看 | 久久黄视频| 在线观看国产 | 国产精品久久久久久久免费大片 | 黄色片视频在线观看 | 日日爽夜夜操 | 在线中文字幕网站 | 日日躁你夜夜躁你av蜜 | 一本一道久久a久久综合蜜桃 | 国产一区视频免费在线观看 | 欧美一级黄色视屏 | 国产最新视频在线观看 | 日韩在线观看影院 | 亚洲码国产日韩欧美高潮在线播放 | 色婷婷导航 | 欧美一区二区三区在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 黄色三级在线看 | 欧美三级高清 | 五月婷综合 | av女优中文字幕在线观看 | 日本视频网 | 久久精品99国产精品酒店日本 | 久久久精品亚洲 | 天天操天天干天天 | 香蕉在线观看 | 日韩精品aaa | 在线欧美中文字幕 | 不卡日韩av| 精品久久综合 | 最近的中文字幕大全免费版 | 日日射av | 右手影院亚洲欧美 | 91av在线免费播放 | 久草视频中文 | 狠狠狠色丁香婷婷综合久久五月 | 香蕉视频国产在线观看 | 国产亚洲精品免费 | 久久久私人影院 | 日韩av免费在线看 | 欧美精品久久久久久久久久丰满 | 亚洲国产欧美一区二区三区丁香婷 |