1. 程式人生 > 其它 >Docker學習重點(1)~docker基本介紹

Docker學習重點(1)~docker基本介紹


一、Docker 概述

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux或Windows作業系統的機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。

使用Docker後的開發部署流程:

開發:建立模型--環境--打包帶上環境,即映象--放到Docker倉庫

部署:下載Docker中的映象,直接執行即可

1、映象:打包專案帶上環境,即映象

2、Docker倉庫: 存放docker映象

3、隔離

Docker的思想來自於集裝箱,集裝箱,對環境進行隔離

Docker通過隔離機制,可以將伺服器利用到極致。

每個容器間是互相隔離,每個容器內都有一個屬於自己的檔案系統,互不影響。

4、容器化技術

  • 容器化技術的命名就是docker



二、docker 為什麼出現?

Docker出現的原因--應用環境配置費時費力

  • 版本問題、底層依賴衝突問題

一般在公司我們製作一個產品通常需要開發和上線,這就涉及到開發人員和運維人員的工作。

而通常一個產品會有兩套環境,一套環境是開發人員的開發時所用的環境,另一套則是運維人員根據開發人員的提示所配置的環境,

但這兩套環境和應用配置難免會有不同或衝突,這就導致有時候在開發人員電腦上可以執行但上線時卻無法執行。版本更新導致服務不可用。



三、docker優點

輕巧
--相對於笨重的虛擬機器

  • docker容器技術和虛擬機器一樣都是虛擬技術,但是十分輕巧, docker模擬的不是完整的作業系統
  • 比如安裝centos 系統,只用到centos的最核心
vm: linux centos 原生映象(一個電腦) 隔離,需要開啟多個虛擬機器    幾個G  幾分鐘
docker: 隔離  映象(最核心的環境,4m+jdk+mysql)             十分小巧, 秒級啟動

容器化技術不是模擬的一個完整的作業系統

傳統虛擬機器:模擬出一套硬體,執行一個完整的作業系統,然後在這個系統上安裝和執行軟體

docker:容器內的應用直接執行在宿主機的核心,容器是沒有自己的核心,也沒有虛擬我們的硬體,所以就輕便了



四、Docker能幹嘛(優點)

DevOps(開發、運維)

開發和運維過程中,Docker 具有以下幾個方面的優勢:

應用更快速的交付和部署

傳統:一堆幫助文件,安裝程式

Docker:打包映象釋出測試,一鍵執行

更便捷的升級和擴縮容

使用了Docker之後,我們部署應用就和搭積木一樣!專案打包為一個映象,擴充套件 伺服器A!伺服器B

更簡單的系統運維

在容器化之後,我們的開發,測試環境都是高度一致的。

更高效的計算資源利用:

Docker是核心級別的虛擬化,可以再一個物理機上可以執行很多的容器例項!伺服器的效能可以被壓榨到極致。



五、Docker的基本組成

1、docker的三個重要概念:

(1)映象:打包專案帶上環境,即映象

Docker映象是一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的配置引數。映象不包含任何動態資料,其內容在構建之後也不會被改變。映象可以用來建立Docker容器,使用者可以使用裝置上已有的映象來安裝多個相同的Docker容器。

(2)容器:映象建立的執行例項,Docker利用容器來執行應用

每個容器都是相互隔離的、保證安全的平臺。我們可以把容器看做是一個輕量級的Linux執行環境。

(3)倉庫:存放映象(檔案)的地方,分為共有倉庫和私有倉庫

Docker Hub:國外的

阿里雲:配置映象加速



六、瞭解docker的映象命令、容器命令後,回來理解容器概念特性就非常容易了

☺ 通過命令觀察到的結果來證明 docker容器相當一個輕量級的Linux執行環境。且證明容器的特性是相互隔離,各自執行各自的程式,各自有各自的環境。每個容器內都有一個屬於自己的檔案系統,互不影響。

證明1:docker容器相當一個輕量級的Linux執行環境

可以看到,分別在centos容器、tomcat容器、nginx容器內部查看了系統的版本資訊,發現他們底層系統都是Linux,通過命令,觀察他們的版本資訊,發現他們的系統版本,可以是不一樣的,可以是linux發行版的RedHat系列(centos),也可以是linux發行版的Debian系列(debian)

證明2:容器的特性是相互隔離,各自執行各自的程式,各自有各自的環境。每個容器內都有一個屬於自己的檔案系統,互不影響。

通過命令ls,分別在centos容器、tomcat容器、nginx容器內部檢視到他們有屬於自己的檔案系統,都是不同的。

通過命令ip,分別在centos容器、tomcat容器、nginx容器內部檢視到,在centos系統可以直接得到ip資訊,而一開始tomcat、nginx容器內部,都是ip命令找不到,後來,咱通過給tomcat容器修改一下apt源的映象,並更新一下命令,然後安裝iproute2(沒給nginx容器安裝iproute2命令)的情況下,分別在tomcat、nginx容器內部檢視ip命令,發現只有tomcat 容器可以正常使用ip命令。由此,證明了容器隔離的特性

# 建立centos的容器
docker pull centos
docker run -it --name centos01 centos /bin/bash
# ———————————————————————————————————————— ls 命令檢視目錄資訊————————————————————————————————————
[root@dfd0ef52fc43 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# -----------------------------------這個時候,檢視系統的版本資訊---------------------------------
[root@dfd0ef52fc43 /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
[root@dfd0ef52fc43 /]# cat /etc/redhat-release
CentOS Linux release 8.4.2105
# ========================================使用命令 ip =====================================
[root@eed52d253e26 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
 valid_lft forever preferred_lft forever
# 建立tomcat的容器
docker pull tomcat:9.0
docker run -it --name tomcat01 tomcat:9.0 /bin/bash 
# ———————————————————————————————————————— ls 命令檢視目錄資訊————————————————————————————————————
root@f1cfb81dedfd:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
# -----------------------------------這個時候,檢視系統的版本資訊---------------------------------
root@f1cfb81dedfd:/usr/local/tomcat# 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@f1cfb81dedfd:/usr/local/tomcat# cat /etc/debian_version
11.2
# ========================================使用命令 ip =====================================
root@f1cfb81dedfd:/usr/local/tomcat# ip a
bash: ip: command not found
# ~~~~~~~~~~~~~~~~~~~~~~~~ 給tomcat容器修改一下apt源的映象,並更新一下命令,然後安裝iproute2~~~~~~~~~~~~~~~~~~
# 修改apt下的sources.list
# 先備份,可以選擇建立一個資料夾,然後拷貝一份放進去
root@f1cfb81dedfd:/etc/apt# mkdir cat sources.list.backup
root@f1cfb81dedfd:/etc/apt# cp sources.list ./sources.list.backup
root@f1cfb81dedfd:/etc/apt/sources.list.backup# cd ../
# 使用命令 echo 覆蓋+追加方式
deb https://mirrors.aliyun.com/debian bullseye main
deb https://mirrors.aliyun.com/debian-security bullseye-security main
deb https://mirrors.aliyun.com/debian bullseye-updates main
# 執行一下更新命令:
apt-get update -y
# 執行下載 iproute2命令:
apt install -y iproute2

# 再次執行ip 命令
root@f1cfb81dedfd:/usr/local/tomcat# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
 valid_lft forever preferred_lft forever
# 建立nginx的容器
docker pull nginx
docker run -it --name nginx01 nginx /bin/bash
# ———————————————————————————————————————— ls 命令檢視目錄資訊————————————————————————————————————
root@7b002c0ac35e:/# ls
bin   dev		   docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc			 lib   media  opt  root  sbin  sys  usr
# -----------------------------------這個時候,檢視系統的版本資訊---------------------------------
root@7b002c0ac35e:/# 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@7b002c0ac35e:/# cat /etc/debian_version
11.2
# ========================================使用命令 ip =====================================
root@f4cc7c858a88:/# ip a
bash: ip: command not found
# ~~~~~~ 在給tomcat容器修改一下apt源的映象,並更新一下命令,然後安裝iproute2(沒給nginx容器安裝iproute2命令哦),檢視ip命令~~~~~~
root@f4cc7c858a88:/# ip a
bash: ip: command not found
  • 同一個映象tomcat,創建出第二個tomcat容器tomcat02,發現,也是一樣的,新建立的tomcat容器也是因為下載的Tomcat映象是精簡版的,利用這個映象去開啟一個容器的時候發現沒有ip addr這個命令。



☺ 參考來源:
狂神的B站視訊《【狂神說Java】Docker最新超詳細版教程通俗易懂》 https://www.bilibili.com/video/BV1og4y1q7M4



如果本文對你有幫助的話記得給一樂點個贊哦,感謝!