Docker 簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之後分爲 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),我們用社區版就可以了。
Docker官網:https://www.docker.com/
Docker的應用場景
-
Web 應用的自動化打包和發佈。
-
自動化測試和持續集成、發佈。
-
在服務型環境中部署和調整數據庫或其他的後臺應用。
-
從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
Docker 的優點
-
簡化程序:
Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,便可以實現虛擬化。Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數週的 任務,在Docker容器的處理下,只需要數秒就能完成。 -
避免選擇恐懼症:
如果你有選擇恐懼症,還是資深患者。那麼你可以使用 Docker 打包你的糾結!比如 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,所以 Docker 可以簡化部署多種應用實例工作。比如 Web 應用、後臺應用、數據庫應用、大數據應用比如 Hadoop 集羣、消息隊列等等都可以打包成一個鏡像部署。 -
節省開支:
一方面,雲計算時代到來,使開發者不必爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思維定勢。Docker 與雲的結合,讓雲空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。
Docker的架構
Docker 鏡像(Images) 是用於創Docker 鏡像建 Docker 容器的模板。
Docker 容器(Container) 容器是獨立運行的一個或一組應用。
Docker 客戶端(Client) Docker 客戶端通過命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 與 Docker 的守護進程通信。
Docker 主機(Host) 一個者物理或虛擬的機器用於執行 Docker 守護進程和容器。
Docker 倉庫(Registry) Docker 倉庫用來保存鏡像,可以理解爲代碼控制中的代碼倉庫。
Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。
Centos7安裝Docker
1、Docker 要求 CentOS 系統的內核版本高於 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 。
通過 uname -r 命令查看你當前的內核版本
$ uname -r
2、使用 root 權限登錄 Centos。確保 yum 包更新到最新。
$ yum update
3、卸載舊版本(如果安裝過舊版本的話)
$ yum remove docker docker-common docker-selinux docker-engine
4、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
$ yum install -y yum-utils device-mapper-persistent-data lvm2
5、設置yum源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6,安裝最新版本的Docker
$ yum install docker-ce docker-ce-cli containerd.io
7,啓動Docker並設置開機啓動
$ systemctl start docker
$ systemctl enable docker
8,驗證Docker
$ docker version
說明安裝OK;
配置阿里雲
默認的遠程倉庫 https://hub.docker.com/下載網速很慢,所以我們配置下阿里雲的鏡像倉庫
1、我們先登錄阿里雲的服務地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、找到我們需要配置的地址
3、然後我們執行命令:cd /etc/docker/ 進入文件夾,然後輸入:ll 找到daemon.json文件,沒有的話就新建:vi daemon.json,就會進入下圖,我們只需要把上圖紅框裏面的地址copy到裏面,然後按Esc,然後輸入命令 :wq(:是命令的一部分),就更改完成了
4、重啓daemon
systemctl daemon-reload
5、重啓docker服務
systemctl restart docker
我們就能下載東西了,並且速度會快很多
然後運行 docker run hello-world,首先本地倉庫未能找到該鏡像,然後去遠程倉庫尋找以及下載該鏡像,所以我們再執行這個命令時就能看到hello world了
Docker 命令
Docker基本命令
啓動Docker
systemctl start docker
停止Docker
systemctl stop docker
重啓Docker
systemctl restart docker
開機啓動Docker
systemctl enable docker
查看Docker概要信息
docker info
查看Docker幫助文檔
docker --help
查看Docker版本信息
docker version
Docker鏡像常用命令
下載鏡像官網:https://hub.docker.com/
-
docker images 列出本機所有鏡像
docker images
列出本機所有鏡像
-
docker search 搜索鏡像
和 https://hub.docker.com/ 這裏的搜索效果一樣;
-
docker pull 下載鏡像
docker pull 鏡像名稱:[TAG]
注意:不加TAG,默認下載最新版本latest -
docker rmi 刪除鏡像
① 刪除單個:docker rmi 鏡像名稱:[TAG]
如果不寫TAG,默認刪除最新版本latest有鏡像生成的容器再運行時候,會報錯,刪除失敗;
我們需要加 -f 強制刪除② 刪除多個:docker rmi -f 鏡像名稱1:[TAG] 鏡像名稱2:[TAG]
中間空格隔開③ 刪除全部:docker rmi -f $(docker images -qa)
Docker 容器常用命令
-
Docker創建並啓動容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]–name=“容器新名字”:爲容器指定一個名稱;
-i:以交互模式運行容器,通常與-t或者-d同時使用;
-t:爲容器重新分配一個僞輸入終端,通常與-i同時使用;
-d: 後臺運行容器,並返回容器ID;
-P: 隨機端口映射,容器內部端口隨機映射到主機的端口
-p: 指定端口映射,格式爲:主機(宿主)端口:容器端口啓動普通容器: docker run --name 別名 鏡像ID
啓動交互式容器: docker run -it --name 別名 鏡像ID 來運行一個容器,取別名,交互模式運行,以及分配一個僞終端,並且進入僞終端;注意:
① 啓動普通容器的方式基本不用,沒有僞終端,沒有太大價值;
② 啓動交互式容器的方式,容器一創建完畢,立即進入僞終端守護式方式創建並啓動容器
docker run -di --name 別名 鏡像ID執行完命令後,終端依然再宿主機上;
啓動容器,並執行/bin/bash命令;
docker run -it --name 別名 鏡像ID /bin/bash命令端口映射;
docker run -it -p 8888:8080 tomcat
docker run -it -P tomcat -
Docker列出容器
docker ps [OPTIONS]
OPTIONS說明:
-a :顯示所有的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
–format :指定返回值的模板文件。
-l :顯示最近創建的容器。
-n :列出最近創建的n個容器。
–no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。docker ps 查看正在運行的容器
docker ps -a 查看所有容器
docker ps -n 2 顯示最近創建的2個容器
docker ps -f status=exited 查看停止的容器 -
Docker退出容器
exit 容器停止退出
ctrl+P+Q 容器不停止退出 -
Docker進入容器
① docker attach 容器ID or 容器名
② Docker進入容器執行命令
docker exec -it 容器名稱 或者 容器ID 執行命令 -
Docker啓動容器
docker start 容器ID or 容器
-
Docker重啓容器
docker restart 容器ID or 容器名
-
Docker停止容器
docker stop 容器ID or 容器名暴力刪除,直接殺掉進程 (不推薦)
docker kill 容器ID or 容器名 -
Docker刪除容器
docker rm 容器ID
如果刪除正在運行的容器,會報錯,我們假如需要刪除的話,需要強制刪除;
強制刪除docker rm -f 容器ID刪除多個容器
docker rm -f 容器ID1 容器ID2 中間空格隔開刪除所有容器
docker rm -f $(docker ps -qa) -
Docker容器日誌
$ docker logs [OPTIONS] CONTAINER
Options:
–details 顯示更多的信息
-f, --follow 跟蹤實時日誌
–since string 顯示自某個timestamp之後的日誌,或相對時間,如42m(即42分鐘)
–tail string 從日誌末尾顯示多少行日誌, 默認是all
-t, --timestamps 顯示時間戳
–until string 顯示自某個timestamp之前的日誌,或相對時間,如42m(即42分鐘)博主推薦,簡單粗暴方式,直接去docker容器文件裏找;
具體未知:/var/lib/docker/containers/
over。。。