日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker基础笔记

發布時間:2024/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker基础笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、安裝Docker

# 1、yum 包更新到最新 yum update # 2、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、 設置yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 4、 安裝docker,出現輸入的界面都按 y yum install -y docker-ce # 5、 查看docker版本,驗證是否驗證成功 docker -v

二、配置Docker加速器

登錄阿里云,進入控制臺,選擇容器鏡像服務

選擇鏡像工具下的鏡像加速器,然后根據命令進行配置即可

三、Docker命令

1.服務相關命令(操作daemon的命令)

  • 啟動docker服務:
systemctl start docker
  • 停止docker服務:
systemctl stop doaker
  • 重啟docker服務:
systemctl restart doaker
  • 查看docker服務狀態:
systemctl status docker
  • 設置開機啟動docker服務:
systemctl enable docker
  • 幫助命令
docker version #docker版本信息 docker info #docker系統信息(包括版本信息和運行的信息) docker --help #幫助命令 docker官網幫助命令地址:https://docs.docker.com/reference/

2.鏡像相關命令(操作image的命令)

  • 查看鏡像:查看本地所有的鏡像
doaker images docker images -q #查看所用鏡像的id

可以通過 –help 查看對應的參數信息

#例 docker images --help #命令Usage: docker images [OPTIONS] [REPOSITORY[:TAG]] #語法 List imagesOptions:-a, --all Show all images (default hides intermediate images) #查看全部--digests Show digests-f, --filter filter Filter output based on conditions provided #篩選查看--format string Pretty-print images using a Go template--no-trunc Don't truncate output-q, --quiet Only show image IDs #只顯示圖像Id
  • 搜索鏡像:從網絡中查找需要的鏡像
docker search 鏡像名稱
  • 拉取鏡像:從Docker倉庫下載鏡像到本地,鏡像名稱格式為名稱版本號,如果版本號不指定則是最新的版本。
  • 如果不知道鏡像版本,可以去docker hub搜索對應鏡像查看。
docker pull 鏡像名稱
  • 刪除鏡像:刪除本他鏡像
docker rmi 鏡像id #刪除指定本地鏡像 docker rmi -f 鏡像id 鏡像id 鏡像id 鏡像id #刪除多個鏡像 docker rmi `docker images -q` # 刪除所有本地鏡像

3.容器相關命令(操作container的命令)

  • 查看容器
docker ps #查看正在運行的容器 docker ps -a #查看所有容器
  • 創建并啟動容器
docker run 參數

參數說明:

  • -i: 保持容器運行。通常與-t同時使用。加入it這兩個參數后,容器創建后自動進入容器中,退出容器后,容器自動關閉。
  • -t:為容器重新分配個偽輸入終端,通常與-i同時使用。
  • -d:后臺方式運行:以守護(后臺)模式運行容器。創建一 個容器在后臺運行,需要使用docker exec進入容器。退出后,容器不會關閉。
  • -it :使用交互方式運行,進入容器查看內容:創建的容器般稱為交互式容器-id 創建的容器般稱為守護式容器
  • -p 指定容器的端口
    -p ip:主機端口
    -p 主機端口:容器端口
    -p 容器端口
    容器端口
    -P 隨機指定端口
  • –name:為創建的容器命名。
  • –restart=always:是否設置容器自動啟動,默認為no,

  • 進入容器
docker exec 參數 #退出容器,容器不會關閉 例: docker exec -it 容器名稱/id /bin/bash
  • 停止容器
docker stop 容器名稱
  • 啟動容器
docker start 容器名稱
  • 刪除容器:如果容器是運行狀態則刪除失敗,需要停止容器才能刪除
docker rm 容器名稱 docker rm [容器id] #刪除指定容器id的容器 不能刪除正在運行的容器 docker rm -f #強制刪除容器 docker rm -f $(docker ps -aq) #遞歸刪除所有容器 docker ps -a -q|xargs docker rm #遞歸刪除所有容器
  • 殺死容器(強制關閉當前容器)
docker kill 容器id
  • 查看容器信息
docker inspect 容器名稱

4.其他命令

日志命令

docker logs [可選項] --tail 容器 顯示日志 docker logs -tf --tail #顯示全部日志 #自己寫一段日志腳本 docker run -d centos /bin/sh -c "while true; do each liuxin; sleep 2;done" 死循環一直打印liuxin #可選項 -tf 顯示日志 --tail 顯示日志條數#docker logs -tf --tail 10 dsadas 顯示dsadas容器的10條日志

查看容器的進程信息

docker top 容器id #查看容器進程信息

進入當前正在運行的容器

通常我們的容器都是使用后臺運行方式運行 ,我們需要進入容器進行一些配置#命令 docker exec -it 容器id #進入容器(一個新的終端,可以操作一些配置信息) docker attach 容器id #進入容器(正在運行的終端,不能操作)

拷貝命令

touch xxx #新建文件 docker cp #拷貝命令 docker cp 當前文件夾下某文件 目標文件夾

四、Docker容器的數據卷

數據卷概念

思考:

  • Docker容器刪除后,在容器中產生的數據也會隨之銷毀
  • Docker 容器和外部機器可以直接交換文件嗎?
  • 容器之間想要進行數據交互?
  • 數據卷

  • 數據卷是宿主機中的一個目錄或文件
  • 當容器目錄和數據卷目錄綁定后,對方的修改會立即同步
  • 一個數據卷可以被多個容器同時掛載
  • 一個容器也可以被掛載多個數據卷
  • 數據卷作用

    • 容器數據持久化
    • 外部機器和容器間接通信
    • 容器之間數據交換

    類似vue的雙向綁定

    配置數據卷

    創建啟動容器時,使用 -v 參數 設置數據卷

    docker run ... -v 宿主機目錄(文件) :容器內目錄(文件) ...

    注意事項:

    1.目錄必須是絕對路徑

    2.如果目錄不存在,會自動創建

    3.可以掛載多個數據卷

    數據卷容器

    多容器進行數據交換

  • 多個容器掛載同一一個數據卷
  • 數據卷容器
  • 配置數據卷容器

    1.創建啟動c3數據卷容器,使傭-v參數設置數據卷

    docker run - it --name=a3 -v /volume centos:7 /bin/bash

    2.創建啟動c1 c2容器,使傭 –volumes -from 參數 設置數據卷

    docker run - it --name=c1 --volumes- from c3 centos: 7 /bin/bash docker run -it --name=c2 --volumes-from c3 centos: 7 /bin/bash

    數據卷小結

    1.數據卷概念

    • 宿主機的一個目錄或文件

    2.數據卷作用

    • 容器數據持久化
    • 客戶端和容器數據交換
    • 容器間數據交換

    3.數據卷容器

    • 創建一個容器,掛載一個目錄,讓其他容器繼承自該容器( --volume -from)。
    • 通過簡單方式實現數據卷配置

    五、Dockerfile(鏡像制作)

    Docker鏡像原理

    操作系統組成部分

    • 進程調度子系統
    • 進程通信子系統
    • 內存管理子系統
    • 設備管理子系統
    • 文件管理子系統
    • 網絡通信子系統
    • 作業控制子系統

    Linux文件系統由bootfs和rootfs兩部分組成

    • bootfs:包含bootloader (弓|導加載程序)和kernel (內核)
    • rootfs: root文件系統, 包含的就是典型Linux系統中的/dev,/proc, /bin, /etc等標準目錄和文件
    • 不同的linux發行版,bootfs基本-樣,而rootfs不同,如ubuntu,centos等

    Docker鏡像原理

    • Docker鏡像是由特殊的文件系統疊加而成
    • 最底端是bootfs,并使用宿主機的bootfs
    • 第二層是root文件系統rootfs,稱為base image
    • 然后再往上可以疊加其他的鏡像文件
    • 統一文件系統(Union File System)技術能夠將不同的層整合成一個文件系統,為這些層提供了一個統的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統。
    • 一個鏡像可以放在另一個鏡像的上面。位于下面的鏡像稱為父鏡像,最底部的鏡像成為基礎鏡像。
    • 當從一個鏡像啟動容器時,Docker會在最頂層加載一 個讀寫文件系統作為容器

    思考:

  • Docker鏡像本質是什么?
    ● 是一個分層文件系統
  • Docker 中一個centos鏡像為什么只有200MB,而一個centos操作系統的iso文件要幾個G?
    ●Centos的iso鏡像 文件包含botfs和ootfs,而docker的centos鏡像復用操作系統的bootfs, 只有rootfs和其他鏡像層
  • Docker 中一個tomcat鏡像為什么有500MB,而一個tomcat安裝包只有70多MB?
    ●于docker中鏡像是分層的, tomcat雖然只有70多MB,但他需要依賴于父鏡像和基礎鏡像,所有整個對外暴露的tomcat鏡像大小500多MB
  • 鏡像制作

    Docker鏡像如何制作?

    1.容器轉為鏡像

    docker commit 容器id 鏡像名稱:版本號 docker save -o 壓縮文件名稱鏡像名稱:版本號 docker load -i 壓縮文件名稱

    2.Dockerfile

    Dockerfile 概念

    ? Dockerfile 是一個文本文件

    ? 包含了一條條的指令

    ? 每一條指令構建一層,基于基礎鏡像,最終構建出一個新的鏡像

    ? 對于開發人員:可以為開發團隊提供一個完全一致的開發環境

    ? 對于測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了

    ? 對于運維人員:在部署時,可以實現應用的無縫移植

    關鍵字作用備注
    FROM指定父鏡像指定dockerfile基于那個image構建
    MAINTAINER作者信息用來標明這個dockerfile誰寫的
    LABEL標簽用來標明dockerfile的標簽 可以使用Label代替Maintainer 最終都是在docker image基本信息中可以查看
    RUN執行命令執行一段命令 默認是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
    CMD容器啟動命令提供啟動容器時候的默認命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
    ENTRYPOINT入口一般在制作一些執行就關閉的容器中會使用
    COPY復制文件build的時候復制文件到image中
    ADD添加文件build的時候添加文件到image中 不僅僅局限于當前build上下文 可以來源于遠程服務
    ENV環境變量指定build時候的環境變量 可以在啟動的容器的時候 通過-e覆蓋 格式ENV name=value
    ARG構建參數構建參數 只在構建的時候使用的參數 如果有ENV 那么ENV的相同名字的值始終覆蓋arg的參數
    VOLUME定義外部可以掛載的數據卷指定build的image那些目錄可以啟動的時候掛載到文件系統中 啟動容器的時候使用 -v 綁定 格式 VOLUME [“目錄”]
    EXPOSE暴露端口定義容器運行的時候監聽的端口 啟動容器的使用-p來綁定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
    WORKDIR工作目錄指定容器內部的工作目錄 如果沒有創建則自動創建 如果指定/ 使用的是絕對地址 如果不是/開頭那么是在上一條workdir的路徑的相對路徑
    USER指定執行用戶指定build或者啟動的時候 用戶 在RUN CMD ENTRYPONT執行的時候的用戶
    HEALTHCHECK健康檢查指定監測當前容器的健康監測的命令 基本上沒用 因為很多時候 應用本身有健康監測機制
    ONBUILD觸發器當存在ONBUILD關鍵字的鏡像作為基礎鏡像的時候 當執行FROM完成之后 會執行 ONBUILD的命令 但是不影響當前鏡像 用處也不怎么大
    STOPSIGNAL發送信號量到宿主機該STOPSIGNAL指令設置將發送到容器的系統調用信號以退出。
    SHELL指定執行腳本的shell指定RUN CMD ENTRYPOINT 執行命令的時候 使用的shell

    通過上面屬性進行創建dockerfile文件

    docker build -f dockerfile文件路徑 -t 鏡像名稱:版本號

    案例1:自定義centos7鏡像。要求

  • 默認登錄路徑為 /usr

  • 可以使用vim

  • 實現步驟

    ① 定義父鏡像:FROM centos:7

    ② 定義作者信息:MAINTAINER itheima itheima@itcast.cn

    ③ 執行安裝vim命令: RUN yum install -y vim

    ④ 定義默認的工作目錄:WORKDIR /usr

    ⑤ 定義容器啟動執行的命令:CMD /bin/bash

    ⑥ 通過dockerfile構建鏡像:docker bulid –f dockerfile文件路徑 –t 鏡像名稱:版本

    案例2:定義dockerfile,發布springboot項目

    案例:實現步驟

    ① 定義父鏡像(名稱必須小寫):FROM java:8

    ② 定義作者信息:MAINTAINER itheima itheima@itcast.cn

    ③ 將jar包添加到容器(jar需要和文件在同一層級): ADD springboot.jar app.jar

    ④ 定義容器啟動執行的命令:CMD java –jar app.jar

    ⑤ 通過dockerfile構建鏡像(最后不要忘記加 . ):docker bulid –f dockerfile文件路徑 –t 鏡像名稱:版本 .

    六、Docker服務編排

    服務編排的概念

    微服務架構的應用系統中一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟停,維護的工作量會很大。

    • 要從Dockerfile build image 或者去dockerhub拉取image
    • 要創建多個container
    • 要管理這些container(啟動停止刪除)

    服務編排: 按照一定的業務規則批量管理容器

    Docker Compose

    Docker Compose是一個編排多容器分布式部署的工具,提供命令集管理容器化應用的完整開發周期,包括服務構建,啟動和停止。使用步驟:

  • 利用 Dockerfile 定義運行環境鏡像

  • 使用 docker-compose.yml 定義組成應用的各服務

  • 運行 docker-compose up 啟動應用

  • 一、安裝Docker Compose

    # Compose目前已經完全支持Linux、Mac OS和Windows,在我們安裝Compose之前,需要先安裝Docker。下面我 們以編譯好的二進制包方式安裝在Linux系統中。 curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 設置文件可執行權限 chmod +x /usr/local/bin/docker-compose # 查看版本信息 docker-compose -version

    二、卸載Docker Compose

    # 二進制包方式安裝的,刪除二進制文件即可 rm /usr/local/bin/docker-compose

    三、常用指令

    1、命令聚合每個容器的輸出,命令退出時,所有容器都將停止

    docker-compose up

    2、在后臺啟動容器并使它們保持運行

    docker-compose up -d

    3、查看該容器的啟動的日志打印(日志從頭打印)

    docker-compose logs -f

    4、查看某一容器的啟動的日志打印(日志從頭打印)

    docker logs -f container_id

    5、查看某一容器的啟動的日志打印(查看最后n條日志打印)

    docker logs -f --tail 數量詞 container_id

    6、停止compose服務

    docker-compose stop

    7、重啟compose服務

    docker-compose restart

    8、kill compose服務

    docker-compose kill

    9、查看compose服務狀態

    docker-compose ps

    10、刪除compose服務

    docker-compose rm

    四、 使用docker compose編排nginx+springboot項目

  • 創建docker-compose目錄
  • mkdir ~/docker-compose cd ~/docker-compose
  • 編寫 docker-compose.yml 文件
  • version: '3' services:nginx:image: nginxports:- 80:80links:- appvolumes:- ./nginx/conf.d:/etc/nginx/conf.dapp:image: appexpose:- "8080"

    注:image: app 是自己定義的鏡像,里面是運行的項目。

  • 創建./nginx/conf.d目錄
  • mkdir -p ./nginx/conf.d
  • 在./nginx/conf.d目錄下 編寫itheima.conf文件
  • server {listen 80;access_log off;location / {proxy_pass http://app:8080;}}
  • 在~/docker-compose 目錄下 使用docker-compose 啟動容器
  • docker-compose up
  • 測試訪問
  • http://192.168.149.135/hello

    七、Docker 私有倉庫

    一、私有倉庫搭建

    # 1、拉取私有倉庫鏡像 docker pull registry # 2、啟動私有倉庫容器 docker run -id --name=registry -p 5000:5000 registry # 3、打開瀏覽器 輸入地址http://私有倉庫服務器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有倉庫 搭建成功 # 4、修改daemon.json vim /etc/docker/daemon.json # 在上述文件中添加一個key,保存退出。此步用于讓 docker 信任私有倉庫地址;注意將私有倉庫服務器ip修改為自己私有倉庫服務器真實ip {"insecure-registries":["私有倉庫服務器ip:5000"]} # 5、重啟docker 服務 systemctl restart docker docker start registry

    二、將鏡像上傳至私有倉庫

    # 1、標記鏡像為私有倉庫的鏡像 docker tag centos:7 私有倉庫服務器IP:5000/centos:7# 2、上傳標記的鏡像 docker push 私有倉庫服務器IP:5000/centos:7

    三、 從私有倉庫拉取鏡像

    #拉取鏡像 docker pull 私有倉庫服務器ip:5000/centos:7

    八、docker容器虛擬化 與 傳統虛擬機比較

    容器就是將軟件打包成標準化單元,以用于開發、交付和部署。

    • 容器鏡像是輕量的、可執行的獨立軟件包 ,包含軟件運行所需的所有內容:代碼、運行時環境、系統工具、系統庫和設置。
    • 容器化軟件在任何環境中都能夠始終如一地運行。
    • 容器賦予了軟件獨立性,使其免受外在環境差異的影響,從而有助于減少團隊間在相同基礎設施上運行不同軟件時的沖突

    相同:

    • 容器和虛擬機具有相似的資源隔離和分配優勢

    不同:

    • 容器虛擬化的是操作系統,虛擬機虛擬化的是硬件。
    • 傳統虛擬機可以運行不同的操作系統,容器只能運行同一類型操作系統

    總結

    以上是生活随笔為你收集整理的Docker基础笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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