1.docker是什麼?
Docker 是 採用Linux Container技術的高級容器引擎,它能夠提供輕量級的虛擬化,它的源代碼託管在 Github 上,它是 基於go語言開發並遵從Apache2.0協議開源的一種軟件。
2.docker三大金剛
鏡像:(image) 運行環境的集合,鏡像運行爲容器
啓動鏡像後會增加一個空白層,所有操作都會寫入到空白層上,空白層會覆蓋下方的配置和操作。只能讀取不能寫入
倉庫:(repository) 存放鏡像
容器:(container) 已運行的環境
不同的容器工作在相對獨立的空間,由namespace隔離,一個鏡像可以啓動多個容器
如果一個容器可以穩定工作,它在前端需要 有一個守護進程
3.docker網絡管理
docker一開啓會自動創建一個叫做docker0的網橋,可以使各個容器之間可以相互通信,容器沒有自己的內核容器與容器之間採用network-namespace進行網絡隔離:vethX
每一個容器會連接到自己的namespace-- vethX上,vehtX是通過網橋設備創建的,彼此之間可以相互通信,因此容器之間也是可以相互通信。
網橋設備與真實網卡之間通過NAT實現通信
4.Docker的4種網絡模式
host模式,使用--net=host指定。
container模式,使用--net=container:NAME_or_ID指定。
none模式,使用--net=none指定。
bridge模式,使用--net=bridge指定,默認設置。
4.1 host模式
如果啓動容器的時候使用host模式,那麼這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。
4.2 container模式
container模式指定新創建的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口範圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的。兩個容器的進程可以通過lo網卡設備通信。
4.3 none模式
這個模式和前兩個不同。在這種模式下,Docker容器擁有自己的Network Namespace,但是,並不爲Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己爲Docker容器添加網卡、配置IP等。
4.4 bridge模式
bridge模式是Docker默認的網絡設置,此模式會爲每一個容器分配Network Namespace、設置IP等,並將一個主機上的Docker容器連接到一個虛擬網橋上。下面着重介紹一下此模式。
二、docker安裝
1.安裝前準備工作:
centos7.0以上內核版本
關閉selinux與iptables,配置yum源,可以連外網:ping www.baidu.com
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl disable firewalld.service
systemctl stop firewalld.service
重啓 reboot
2.docker安裝
2.1腳本直接安裝最新版本docker
yum clean all
yum makecache
yum -y upgrade
#升級後內核版本爲7.4-1708 或 7.5-1804
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker
docker run hello-world
docker version #必須有client端與server端!!
2.2 yum安裝
2.2.1、更新yum源
yum clean all
yum makecache
yum -y update
2.2.2、卸載舊版本(如果安裝過舊版本的話)
yum remove docker docker-common docker-selinux docker-engine
2.2.3、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
yum -y install yum-utils device-mapper-persistent-data lvm2
2.2.4、設置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2.2.5、可以查看所有倉庫中所有docker版本,並選擇特定版本安裝
yum list docker-ce --showduplicates | sort -r
2.2.6、安裝docker
安裝最新版本的docker: yum -y install docker-ce
安裝指定版本的docker:如-------> yum -y install docker-ce-17.12.0.ce
2.2.7、啓動並加入開機啓動
systemctl start docker
systemctl enable docker
2.2.8、驗證安裝是否成功
docker version
##有client和service兩部分表示docker安裝啓動都成功了
2.2.9 別名設置 根據個人情況而定
vim /root/.bashrc
alias vi='vim'
alias dp='docker ps -a '
alias di='docker images'
alias dr='docker rm -f $(docker ps -a -q)'
. /root/.bashrc
三、docker基本命令
docker images #查看鏡像
docker ps #查看當前已經運行的容器
docker ps -a #查看當前所有的容器
docker ps -a -q #只顯示當前運行的容器的ID號
docker rm -f +前4位容器ID號
docker rm -f $(docker ps -a -q) #刪除當前運行的所有容器
docker pull #下載鏡像 docker pull hub.c.163.com/public/centos:6.7-tools
docker run #從鏡像運行爲容器
docker start/stop 容器啓動停止
docker rmi +別名或ID號 Docker 鏡像的刪除
dockers images -a -q #顯示鏡像所有的ID號
docker rmi -f $(docker images -a -q) #強制刪除所有鏡像
單一容器管理命令 :
docker ps --no-trunc #查看容器詳細信息
docker stop/start CONTAINERID #通過容器id啓動/停止
docker run --restart=always #容器的自動啓動
docker start/stop MywordPress #通過容器別名啓動/停止
docker inspect MywordPress #查看容器所有基本信息
docker logs MywordPress #查看容器日誌
docker stats MywordPress #查看容器所佔用的系統資源
docker exec 容器名 容器內執行的命令 # 容器執行命令
docker exec -it 容器名 /bin/bash #登陸容器的bash
其他命令 :
1.docker info 守護進程的系統資源設置
docker history 鏡像名 查詢鏡像的分層
--no-trunc 顯示完整的歷史命令
2.容器打包成鏡像
docker commit 93f2e50a3439/centos6 pqj/jingxiang:v1.0
打包命令 容器ID/容器名 誰的/鏡像名字:版本號
3.docker-compose 多容器編排工具
docker-compose up -d 創建啓動項目
docker-compose start 啓動項目
docker-compose stop 關閉項目
4.鏡像改標籤
docker tag 鏡像ID pqj/test:1.0(xx/xx/xx:xx) #一般情況下要上傳鏡像的時候才需要改標籤!
docker tag peng/tomcat:v1.0 docker.pqj.com/library/tomcat:v1.0
5.鏡像導出入導入
docker save -o /root/pqj.tar pqj/jingxiang:v1.0 #鏡像導出
docker load -i test.tar #鏡像導入
6.Docker程序將讀取Dockerfile,根據指令生成定製的image。
docker build -t wangyang/jdk-tomcat .