docker基礎
Docker 的英文本意是“搬運工”,在程序員的世界裏, Docker 搬運的是集裝箱( Container),
集裝箱裏裝的是任意類型的 App,開發者通過 Docker 可以將 App 變成一種標準化的、可移
植的、自管理的組件,可以在任何主流系統中開發、調試和運行。
說白了 ,docker 是一種用了新穎方式實現的輕量級虛擬機,類似於 VM,但是在原理和應用上和VM 的差別還是很大的.並且 docker 的專業叫法是應用容器(Application Container)。
Docker 基於 Go 語言開發,代碼托管在
構建的應用只需一次構建即可多平臺運行。運營人員只需配置他們的服務,即可運行所有的
應用。
為什麽要使用 docker?
1 、快速交付應用程序
2 、更容易部署和擴展
3 、效率更高
4 、快速部署也意味著更簡單的管理
5、容器是在操作系統層面上實現虛擬化,直接復用本地主機的操作系統,而傳統方式則是
在硬件層面實現。
Docker 內部:
要理解
Docker 鏡像 - Docker images:Docker 鏡像是 Docker 容器運行時的只讀模板, 鏡像可以用來創建 Docker 容器
Docker 倉庫 - Docker registeries:Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫
Docker 容器 - Docker containers:Docker 利用容器來運行應用, 一個 Docker 容器包含了所有的某個應用運行所需要的環境,每一個 Docker 容器都是從 Docker 鏡像創建的。
Docker 底層技術
docker 底層的 2 個核心技術分別是 Namespaces 和 Control groups,Namespaces 用來隔離各個容器
1)pid namespace: 不同用戶的進程就是通過 pid namespace 隔離開的,且不同 namespace 中可以有相同 pid
2) net namespac: 網絡隔離是通過 net namespace 實現的,每個 net namespace 有獨立的 networkdevices, IP addresses, IP routing tables, /proc/net 目錄
3) ipc namespace: container 中進程交互還是采用 linux 常見的進程間交互方法 (interprocess communication -IPC),包括常見的信號量、消息隊列和共享內存。 container 的進程間交互實際上還是 host 上具有相同 pid namespace 中的進程間交互
4) mnt namespace: 類似 chroot,將一個進程放到一個特定的目錄執行
5) uts namespace: UTS("UNIX Time-sharing System") namespace 允許每個 container 擁有獨立的 hostname 和domain name, 使其在網絡上可以被視作一個獨立的節點而非 Host 上的一個進程
6) user namespace: 每個 container 可以有不同的 user 和 group id, 也就是說可以在 container 內部用container 內部的用戶執行程序而非 Host 上的用戶
docker的安裝:
可通過yum install docker 直接安裝(但是有時會有更新或者什麽的需要殺死進程才可安裝)
也可在官網下載yum源然後直接安裝(https://docs.docker.com)
附:也可以按照官方文檔安裝
1. Log into your machine as a user with sudo or root privileges.
2. Make sure your existing yum packages are up-to-date.
3. Add the yum repo
$ sudo tee /etc/yum.repos.d/docker.repo<<-'EOF'
[dockerrepo]
name=DockerRepository
baseurl=https: //yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https: //yum.dockerproject.org/gpg
systemctl start docker //啟動docker
docker info //查看docker詳細信息
docker images //查看docker鏡像
docker version //查看docker版本
docker pull docker.io/centos //獲取centos鏡像
docker pull docker.io/jdeathe/centos-httpd //下載鏡像
docker search centos //查找鏡像
創建自己的鏡像:
一:使用docker commit 來擴展一個 image
docker run -it docker.io/centos:centos6 //創建容器
yum -y install httpd //容器中安裝服務
docker commint -m “備註” -a “用戶信息” 容器ID 鏡像名稱 //創建鏡像
docker run -it centos:httpd /bin/bash // 啟動容器
創建完成
二:dockerfile 創建 image
Docker build -t centos:httpd . //創建鏡像
Docker tag 源鏡像名稱/ID 新鏡像名稱:標簽 //修改鏡像標簽
Docker rmi 鏡像名稱/ID //刪除鏡像(-f:強制刪除)
Docker save -o centos6.tar centos:6 // 將鏡像保存至本地
Docker load --input centos.tar //上傳鏡像到鏡像庫
容器:
Run //新建
Exit //退出
Docker run -it centos:6 /bin/bash //創建容器並打開
Docker run -it centos:6 /bin/bash //創建容器並放置後臺運行
Docker run centos:6 /bin/echo ‘hello word’ //輸出hello word 之後容器終止
當利用 docker run 來創建容器時, Docker 在後臺運行的標準操作包括:
1.檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
2.利用鏡像創建並啟動一個容器
3.分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
4.從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
5.從地址池配置一個 ip 地址給容器
6.執行用戶指定的應用程序
7.執行完畢後容器被終止
Docker ps //查看正在運行的容器
Docker ps -a //查看全部容器
Docker start 容器名稱/ID //啟動容器
Docker stop 容器名稱/ID //終止容器
Docker restart 容器名稱/ID //重啟容器
Docker inspect 容器名稱/ID //查看容器詳細信息
進入容器的三種方式:
Docker attach 容器名稱/ID //進入容器(不推薦使用當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執行操作了。)
Docker exec -it 容器名稱/ID /bin/bash //進入容器(推薦使用)
Docker rm 容器名稱/ID //刪除容器(-f:強制)
Docker rm $(docker ps -aq) //批量刪除容器
docker基礎