Docker入門
虛擬化之docker
linuxdocker安裝官方地址:https://docs.docker.com/engine/install/centos/
docker安裝操作:
環境:
#核心 [root@test2 etc]# uname -r
3.10.0-1127.18.2.el7.x86_64 #引數 [root@test2 etc]# cat /etc/os-release
NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
安裝:
#1.解除安裝舊版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine #2.需要的安裝包 yum install -y yum-utils #3.設定映象倉庫 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo #國外的太慢 yum-config-manager \ --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里源
#更新yum軟體包索引
yum makecache fast
#4.安裝docker
yum install docker-ce docker-ce-cli containerd.io#5.啟動docker
systemctl start docker #6.docker version
[root@test2 ~]# docker version
Client: Docker Engine - Community Version: 19.03.12 API version: 1.40 Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:46:54 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.12 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:45:28 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683 #7.解除安裝
yum remove docker-ce docker-ce-cli containerd.io
阿里映象加速
#建立檔案
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {
"registry-mirrors": ["https://3tcts5g3.mirror.aliyuncs.com"]
}
EOF
#啟動服務
sudo systemctl daemon-reload
sudo systemctl restart docker
底層原理
docker是怎麼工作的?
docker是一個cs結構的系統,docker的守護程序執行在主機上,通過socket從客戶端訪問
docker為什麼比vm塊?
1.docker有著比虛擬機器更少的抽象層。
2.docker 利用的是宿主機的核心,vm 需要是 Guest OS。
所以說,新建一個容器的時候,docker不需要像虛擬機器一樣重新載入一個作業系統核心,避免引導。虛擬機器載入Guest OS,分鐘級別的,而docker 是利用宿主機的作業系統,省略了這個複雜的過程,秒級別。
docker常用命令
命令地址doc:https://docs.docker.com/registry/spec/api/
映象倉庫hub:https://hub.docker.com/search?q=tomcat&type=image
映象命令:
映象命令: [root@test2 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE #解釋 REPOSITORY:映象源 TAG:標籤 IMAGE ID:映象的id CREATED:建立的時間 SIZE:映象的大小 #搜尋映象 [root@test2 ~]# docker serach mysql #下載映象 [root@test2 ~]# docker pull mysql #指定版本 [root@test2 ~]# docker pull mysql:5.7 #刪除映象 [root@test2 ~]# docker rmi -f +id/name [root@test2 ~]# docker rmi -f $(docker images -qa) #刪除所有 ```
docker run [可選引數] iamge # 引數說明 --name 容器名字 -d 後臺方式執行 -it 使用互動方式執行,進入容器檢視內容 -p 指定容器的埠 -P 隨機指定埠
-p: -p ip:主機埠:容器埠 -p 主機埠:容器埠(常用) -p 容器埠 容器埠
docker ps 命令
# 列出當前正在執行的容器
-a # 列出當前正則執行的容器+歷史執行過的容器
-n # 顯示最近建立過的容器
-q # 只顯示容器的編號
退出容器
exit # 直接容器停止並退出
ctrl + p + q # 容器不停止推出
刪除容器
docker rm 容器id # 刪除指定的容器,不能刪除正在執行的容器,強制刪除rm -f
docker rm -f $(docker ps -aq) # 刪除所有容器
docker start 容器id # 啟動容器
docker restart 容器id # 重啟容器
docker stop 容器id # 停止容器
docker kill 容器id # 強制停止當前命令
常用其他命令
後臺啟動容器
# docker run -d 映象名 [root@test2 ~]# docker run -d centos #問題: docker ps 發現 centos 停止了 docker 容器使用後臺執行,就必須要有一個前臺程序,docker發現沒有應用,就會自動停止
檢視日誌
# 顯示日誌
docker logs
-- tf # 顯示日誌
--tail number # 要顯示日誌條數
[root@test2 ~]# docker logs -tf --tail 10 b2f0ec7d634d #容器id
檢視容器中程序資訊
docker top 容器id
檢視映象元資料
docker inspect 容器 id
進入當前正在執行的容器
# 方式一:
docker exec -it 容器id /bin/bash #(bashshell)
# 方式二:
docker attach 容器id
# docker exec 進入容器後開啟一個新的終端,可以在裡面操作
# dicker attach 進入容器正在執行的終端,不會啟動進度程序
從容器內拷貝檔案到主機上
# 進入容器
[root@test2 ~]# docker run -it centos /bin/bash
# 建立檔案
[root@97aba928b05f home]# touch zz.linux
# cp測試
[root@test2 ~]# docker cp 97aba928b05f:/home/zz.linux /root
# 產看
[root@test2 ~]# ls
anaconda-ks.cfg test zz.linux
# 拷貝是一個手動過程,未來使用 -v 卷的技術,可以實現自動同步。
docker映象
映象是一種輕量級,可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含 執行一個軟體所需要的所有內容,包括程式碼,執行時,庫,環境變數和配置檔案。
UnionFS(聯合檔案系統)。
如何得到映象:
從遠處倉庫下載 ,朋友拷貝, 自己製作一個映象Dockerfile。
檔案聯合系統:
映象載入原理:
commit映象
docker commit 提交容器成為一個新的副本 # 命令和git相似 docker commit -m=“提交的描述資訊“ -a=”作者“ 容器id 目標映象名:[TAG]
實戰測試:
# 1,啟動一個預設的tomcat
# 2,發現預設tomcat 是沒有webapps應用,映象原因,官方映象預設webapps下沒有檔案
# 3,自己新增webapps基本檔案並做成映象
[root@test2 ~]# docker commit -a="zz" -m="add app" 79e252d4196c tomcat02:1.0
sha256:8a93171baa142dd426ead3657fda7b48e224cc247a039111516c74bcaa750759
[root@test2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 8a93171baa14 23 seconds ago 652MB
tomcat latest 2ae23eb477aa 2 weeks ago 647MB
結論:
commit 就相當於vm中的快照。
恭喜你入門了!