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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose

發(fā)布時間:2024/4/15 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是Docker?

Docker 概念

? Docker 是一個開源的應用容器引擎
? 誕生于 2013 年初,基于 Go 語言實現(xiàn), dotCloud 公司出品(后改名為Docker Inc)
? Docker 可以讓開發(fā)者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的Linux 機器上。
? 容器是完全使用沙箱機制,相互隔離
? 容器性能開銷極低。
? Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版)

Docker架構

? 鏡像(Image):Docker 鏡像(Image),就相當于是
一個 root 文件系統(tǒng)。比如官方鏡像 ubuntu:16.04 就包
含了完整的一套 Ubuntu16.04 最小系統(tǒng)的 root 文件系
統(tǒng)。
? 容器(Container):鏡像(Image)和容器(Contain
er)的關系,就像是面向?qū)ο蟪绦蛟O計中的類和對象一
樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容
器可以被創(chuàng)建、啟動、停止、刪除、暫停等。
? 倉庫(Repository):倉庫可看成一個代碼控制中心,
用來保存鏡像。

原理

  • daemon守護進程,監(jiān)控docker容器運行狀態(tài)【了解】
  • docker客戶端:用于數(shù)據(jù)docker指令操作docker的客戶端
  • image(鏡像):是docker容器運行的程序包(類似被人寫的jar)
  • repository(鏡像倉庫):用于存放鏡像程序包
  • container(容器):docker鏡像運行后的轉態(tài)

docker容器虛擬化 與 傳統(tǒng)虛擬機比較

容器就是將軟件打包成標準化單元,以用于開發(fā)、交付和部署。
? 容器鏡像是輕量的、可執(zhí)行的獨立軟件包 ,包含軟件運行所需的所有內(nèi)容:代碼、運行時環(huán)境、系統(tǒng)工具、系統(tǒng)庫和設置。
? 容器化軟件在任何環(huán)境中都能夠始終如一地運行。
? 容器賦予了軟件獨立性,使其免受外在環(huán)境差異的影響,從而有助于減少團隊間在相同基礎設施上運行不同軟件時的沖突。

安裝Docker

Docker可以運行在MAC、Windows、CentOS、UBUNTU等操作系統(tǒng)上,本課程基于CentOS 7 安裝
Docker。官網(wǎng):https://www.docker.com

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

Docker阿里鏡像

在阿里云中搜索"容器鏡像服務",然后,點擊鏡像加速

1. 安裝/升級Docker客戶端 推薦安裝1.10.0以上版本的Docker客戶端,參考文檔 docker-ce2. 配置鏡像加速器 針對Docker客戶端版本大于 1.10.0 的用戶您可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://38q0nfx5.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

docker命令

docker服務管理命令

? 啟動docker服務:
systemctl start docker
? 停止docker服務:
systemctl stop docker
? 重啟docker服務:
systemctl restart docker
? 查看docker服務狀態(tài):
systemctl status docker
? 設置開機啟動docker服務:
systemctl enable docker

docker鏡像管理命令

? 查看鏡像: 查看本地所有的鏡像
docker images
docker images –q # 查看所用鏡像的id
? 搜索鏡像:從網(wǎng)絡中查找需要的鏡像
docker search 鏡像名稱
? 拉取鏡像:從Docker倉庫下載鏡像到本地,鏡像名稱格式為 名稱:版本號,如果版本號不指定則是最新的版本。
如果不知道鏡像版本,可以去docker hub 搜索對應鏡像查看。
docker pull 鏡像名稱
docker pull 鏡像名稱:版本
? 刪除鏡像: 刪除本地鏡像
docker rmi 鏡像id # 刪除指定本地鏡像(刪除前一定要確保改鏡像沒有被容器運行)
docker rmi docker images -q # 刪除所有本地鏡像

docker鏡像制作命令

Docker 鏡像如何制作?

  • 容器轉為鏡像
    docker commit 容器id 鏡像名稱:版本號
    docker save -o 壓縮文件名稱 鏡像名稱:版本號
    docker load –i 壓縮文件名稱
  • 使用dockerfile制作鏡像
    Dockerfile 案例
    案例:需求
    案例:實現(xiàn)步驟
    ① 定義父鏡像:FROM centos:7
    ② 定義作者信息:MAINTAINER xiaofuxiaofu@qq.com
    ③ 執(zhí)行安裝vim命令: RUN yum install -y vim
    ④ 定義默認的工作目錄:WORKDIR /usr
    ⑤ 定義容器啟動執(zhí)行的命令:CMD /bin/bash
    ⑥ 通過dockerfile構建鏡像:docker bulid –f dockerfile文件路徑 –t 鏡像名稱:版本
  • docker容器命令管理

    ? 查看容器
    docker ps # 查看正在運行的容器
    docker ps –a # 查看歷史所有運行過的容器
    ? 創(chuàng)建并啟動容器

    docker run 參數(shù)

    參數(shù)說明:
    ? -i:保持容器運行。通常與 -t 同時使用。加入it這兩個參數(shù)后,容器創(chuàng)建后自動進入容器中,退出容器后,容器自動關閉。
    ? -t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用。
    ? -d:以守護(后臺)模式運行容器。創(chuàng)建一個容器在后臺運行,需要使用docker exec 進入容器。退出后,容器不會關閉。
    ? -it 創(chuàng)建的容器一般稱為交互式容器,-id 創(chuàng)建的容器一般稱為守護式容器
    ? --name:為創(chuàng)建的容器命名。

    - 交互式:退出之后,容器自動停止。開發(fā)過程,做容器的檢查測試docker run -it --name=[自定義容器名稱] 鏡像名稱:鏡像版本 /bin/bash- 守護式(后臺運行):一直后臺運行。生成程序運行docker run -d --name=[自定義容器名稱] 鏡像名稱:鏡像版本

    docker exec 命令

    docker exec 進入守護式容器

    docker exec -it 容器名稱 /bin/bash

    容器啟動重啟停止命令

    ? 停止容器
    docker stop 容器名稱
    ? 啟動容器
    docker start 容器名稱
    ? 刪除容器:如果容器是運行狀態(tài)則刪除失敗,需要停止容器才能刪除
    docker rm 容器名稱
    ? 查看容器信息
    docker inspect 容器名稱,很強大,可以查看容器運行的詳細信息,包括ip 端口 和掛載目錄地址等等

    數(shù)據(jù)卷概念

    思考

    ? Docker 容器刪除后,在容器中產(chǎn)生的數(shù)據(jù)還在嗎?
    ? Docker 容器刪除后,在容器中產(chǎn)生的數(shù)據(jù)還在嗎?
    ? Docker 容器和外部機器可以直接交換文件嗎?

    數(shù)據(jù)卷
    ? 數(shù)據(jù)卷是宿主機中的一個目錄或文件
    ? 當容器目錄和數(shù)據(jù)卷目錄綁定后,對方的修改會立即同步
    ? 一個數(shù)據(jù)卷可以被多個容器同時掛載
    ? 一個容器也可以被掛載多個數(shù)據(jù)卷
    數(shù)據(jù)卷作用
    ? 容器數(shù)據(jù)持久化
    ? 外部機器和容器間接通信
    ? 容器之間數(shù)據(jù)交換

    配置數(shù)據(jù)卷

    -v 掛載本地文件夾到容器中

    ? 創(chuàng)建啟動容器時,使用 –v 參數(shù) 設置數(shù)據(jù)卷
    docker run … –v 宿主機目錄(文件):容器內(nèi)目錄(文件) …
    ? 注意事項:

  • 目錄必須是絕對路徑
  • 如果目錄不存在,會自動創(chuàng)建
  • 可以掛載多個數(shù)據(jù)卷
  • 可以掛載多個目錄dockerrun -d -v 本地目錄:容器目錄 -v 本地目錄:容器目錄 -v 本地目錄:容器目錄 --name=c1 鏡像名稱# 下面省去了宿主機的目錄,docker會自動創(chuàng)建一個宿主機目錄與之掛載 docker run -it --name c3 -v /volume centos-volume-from 復制容器的-v參數(shù)到當前容器中1. 創(chuàng)建啟動c3數(shù)據(jù)卷容器,使用 –v 參數(shù) 設置數(shù)據(jù)卷 docker run –it --name=c3 –v /volume centos:7 /bin/bash 2. 創(chuàng)建啟動 c1 c2 容器,使用 –-volumes-from 參數(shù) 設置數(shù)據(jù)卷 docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

    docker安裝軟件:以mysql為列子

  • 搜索mysql鏡像
  • docker search mysql
  • 拉取mysql鏡像
  • docker pull mysql:5.7.25
  • 創(chuàng)建容器,設置端口映射、目錄映射
  • # 在/root目錄下創(chuàng)建mysql目錄用于存儲mysql數(shù)據(jù)信息 mkdir ~/mysql cd ~/mysql docker run -id \ -p 3307:3306 \ --name=c_mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7.25
    • 參數(shù)說明:
      • -p 3307:3306**:將容器的 3306 端口映射到宿主機的 3307 端口。
    • -v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。配置目錄
    • -v $PWD/logs:/logs:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄
    • -v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。數(shù)據(jù)目錄
    • **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用戶的密碼。

    tomcat部署war包注意2點

    啟動tomcat輸出日志:docker start -i 容器名稱

    查看tomcat 日志docker logs -f c_tomcat

    查看docker容器ip: ip addr show docker0

    -p 端口暴露

    ? 容器內(nèi)的網(wǎng)絡服務和外部機器不能直接通信
    ? 外部機器和宿主機可以直接通信
    ? 宿主機和容器可以直接通信
    ? 當容器中的網(wǎng)絡服務需要被外部機器訪問時,可以將容器中提供服務的端口映射到宿主機的端口上。外部機
    器訪問宿主機的該端口,從而間接訪問容器的服務。
    ? 這種操作稱為:端口映射

    docker鏡像原理

    操作系統(tǒng)組成:? 文件管理子系統(tǒng)

    Linux文件系統(tǒng)由bootfs和rootfs兩部分組成
    ? bootfs:包含bootloader(引導加載程序)和 kernel(內(nèi)核)
    ? rootfs: root文件系統(tǒng),包含的就是典型 Linux 系統(tǒng)中的/dev,/proc,/bin,/etc等標準目錄和文件
    ? 不同的linux發(fā)行版,bootfs基本一樣,而rootfs不同,如ubuntu,centos等

    Docker 鏡像原理

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

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

    ? Dockerfile 是一個文本文件
    ? 包含了一條條的指令
    ? 每一條指令構建一層,基于基礎鏡像,最終構建出一個新的鏡像
    ? 對于開發(fā)人員:可以為開發(fā)團隊提供一個完全一致的開發(fā)環(huán)境
    ? 對于測試人員:可以直接拿開發(fā)時所構建的鏡像或者通過Dockerfile文件
    構建一個新的鏡像開始工作了
    ? 對于運維人員:在部署時,可以實現(xiàn)應用的無縫移植

    Dockerfile 關鍵字

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

    Docker-compose容器編排工具

    服務編排
    微服務架構的應用系統(tǒng)中一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟停,維護的工作量會很大。
    ? 要從Dockerfile build image 或者去dockerhub拉取image
    ? 要創(chuàng)建多個container
    ? 要管理這些container(啟動停止刪除)
    服務編排: 按照一定的業(yè)務規(guī)則批量管理容器

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

  • 利用 Dockerfile 定義運行環(huán)境鏡像
  • 使用 docker-compose.yml 定義組成應用的各服務
  • 運行 docker-compose up 啟動應用
  • Docker 私有倉庫

    Docker官方的Docker hub(https://hub.docker.com)是一個用于管理公共鏡像的倉庫,我們可以從上面拉取鏡像
    到本地,也可以把我們自己的鏡像推送上去。但是,有時候我們的服務器無法訪問互聯(lián)網(wǎng),或者你不希望將自己的鏡
    像放到公網(wǎng)當中,那么我們就需要搭建自己的私有倉庫來存儲和管理自己的鏡像。

    一、私有倉庫搭建

    # 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:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。