Docker學習筆記

Docker概念

  1. Docker 是一個開源的應用容器引擎
  2. 基於Go語言實現,可以讓加法這把應用打包,然後發佈到任一linux機器上
  3. 開銷極低;完全使用沙箱機制,相互隔離
    總結:Docker是一種容器技術,解決軟件跨環境遷移的問題

Docker的安裝(centos)

yum包更新到最新
#1. yum update

安裝需要的軟件包,yum-util提供yum-config-manager功能,另外兩個devicemapper的驅動依賴
#2. yum install -y yum-utils device-mapper-persistent-data lvm2

安裝yum源
#3. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安裝docker
#4. yum install -y docker-ce

查看版本,驗證安裝是否成功
#5. docker -v

Docker架構

在這裏插入圖片描述
注意:可以配置國內的鏡像加速器 ,查詢,拉取鏡像速度快

Docker命令

Docker服務命令

#1:啓動docker服務 :systemctl start docker
#2:停止docker服務:systemctl stop docker
#3:重啓docker服務:systemctl restart docker
#4:查看 服務狀 態 :systemctl status docker
#5:設置開機 啓 動 :systemctl enable docker

Docker鏡像命令

#1:查看本地所有鏡像:docker images
······查看本地所有鏡像id:docker images -q
#2:搜索鏡像:docker search 鏡像名
#3:拉取鏡像:docker pull 鏡像名
#4:刪除鏡像:docker rmi 鏡像名

Docker容器命令

注意:生成容器,必須指定所需的鏡像
#1:查看正在運行的容器:docker ps
·······查看所 有 的 容 器 :docker ps -a
#2:創建並啓動容器 :docker run 參數
······· :- i :保持容器運行,通常和 - t連用,加入it兩個參數後,容器創建後自動進入容器,退出後,容器關閉
·········:-t:爲容器重新分配一個僞輸入終端,通常連用 -i 。
·········:-d:以守護模式運行容器,需要docker exec 進入容器,退出後,容器不關閉
·········:-it:創建的容器一般稱爲交互式容器
·········:-id:創建的容器一般稱爲守護式容器
·········:–name:爲創建的容器命名
#3:啓動容器:docker start 容名
#4:停止容器:docker stop 容名
#5:刪除容器:docker rm 容名
#6:查看容器內容:docker inspect 容名

Docker數據卷
  • 何爲數據卷?
    #1:數據卷是宿主機中的一個目錄或文件
    #2:當容器目錄和數據卷目錄綁定後,對方的修改會立刻同步
    #3:一個數據卷可以被多個容器同時掛載
    #4:一個容器也可以同時掛載多個數據卷
  • 數據卷作用?
    #1:容器的數據持久化
    #2:外部機器和容器間接通訊
    #3:容器之間數據交換
  • 配置數據卷命令:
    創建啓動容器時,使用 -v參數 設置數據卷
    docker run ··· -v 宿主機目錄(文件):容器內目錄(文件)···
    注意事項:
    (1):目錄必須是絕對路徑
    (2):如果目錄不存在,會自動創建
    (3):可以掛載多個數據卷
    在這裏插入圖片描述
Docker數據卷容器
  • 數據卷容器作用:可以實現多容器數據交換
  • 實現原理:多個容器掛載在同一個數據捲上
    如果 容器c1 ,c2 掛載容器c3,c3掛載宿主機的數據卷,c3 就稱爲數據卷容器
    在這裏插入圖片描述
  • 配置數據卷容器
    #1:創建啓動 c3數據卷容器,使用 -v參數設置數據卷
    docker run -it --name=c3 -v /volume centos:7 /bin/bash
    #2:創建啓動c1,c2容器,使用–volumes-from 參數 設置數據卷
    docker run -it --name=c1 --volume-from c3 centos:7 /bin/bash
    docker run -it --name=c2 --volume-from c3 centos:7 /bin/basn
    簡述:創建一個容器,掛載一個目錄(volume ,目錄可變),讓其他容器繼承自該容器(–volume-from)。

Docker 應用部署

Docker部署mysql

實現步驟:
#1:搜索mysql鏡像
#2:拉取mysql鏡像
#3:創建容器
#4:操作容器中的mysql
在這裏插入圖片描述

  1. 搜索mysql鏡像:docker search mysql
  2. 拉取mysql鏡像:docker pull mysql:5.7
  3. 創建容器,設置端口映射、目錄映射:

在/root目錄下創建mysql目錄用於存儲mysql數據信息
mkdir ~/mysql
cd ~/mysql

	docker run -id \
	-p 3306:3306 \
	--name=docker_mysql5.7 \
	-v $PWD/conf:/etc/mysql/conf.d \
	-v $PWD/logs:/logs \
	-v $PWD/data:/var/lib/mysql \
	-e MYSQL_ROOT_PASSWORD=Cx776815 \
	mysql:5.7
  • 參數說明:

  • -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 。數據目錄

  • **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用戶的密碼。

  • 進入容器,操作mysql:docker exec –it c_mysql /bin/bash

Dcokerfile

Docker鏡像原理

在這裏插入圖片描述
思考題?
在這裏插入圖片描述

Docker鏡像製作

鏡像製作方法:
方法一:容器轉爲鏡像
在這裏插入圖片描述
方法二:Dockerfile文件
Dockerfile概念:Dockerfile是一個文本文件,包含了一條條的指令,每一條指令構建一層,基於基礎鏡像,最終構建一個新的鏡像
Dockefile的作用:
(1)對於開發人員:可以爲開發團隊提供一個完全一致的開發環境
(2)對於測試人員:可以直接那開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像工作
(3)對於運維人員:在部署時,可以實現應用的無縫移植

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

Docker composer

Docker composer 概念

在這裏插入圖片描述

一、安裝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

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 與虛擬機的區別

在這裏插入圖片描述
比較:
相同點:都具有相似的資源隔離和分配優勢
不通電:(1)容器虛擬的是操作系統,虛擬機虛擬的是硬件
············(2)容器只能運行同一類型的操作系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章