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
如果本文對你有幫助的話記得給一樂點個贊哦,感謝!