Docker概念
- Docker 是一個開源的應用容器引擎
- 基於Go語言實現,可以讓加法這把應用打包,然後發佈到任一linux機器上
- 開銷極低;完全使用沙箱機制,相互隔離
總結: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
- 搜索mysql鏡像:docker search mysql
- 拉取mysql鏡像:docker pull mysql:5.7
- 創建容器,設置端口映射、目錄映射:
在/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)容器只能運行同一類型的操作系統