1. 程式人生 > >docker基礎

docker基礎

重啟 下載 pos 服務 應用 完成 宋體 存在 url

Docker 是什麽 ?
Docker
的英文本意是“搬運工”,在程序員的世界裏, Docker 搬運的是集裝箱( Container),
集裝箱裏裝的是任意類型的 App,開發者通過 Docker 可以將 App 變成一種標準化的、可移
植的、自管理的組件,可以在任何主流系統中開發、調試和運行。
說白了 ,docker 是一種用了新穎方式實現的輕量級虛擬機,類似於 VM,但是在原理和應用上和VM 的差別還是很大的.並且 docker 的專業叫法是應用容器(Application Container)

Docker 基於 Go 語言開發,代碼托管在

Github 上,並遵循 Apache 2.0 開源協議。 Docker 容器可以封裝任何有效負載,幾乎可以在任何服務器之間進行一致性運行。換句話說,開發者
構建的應用只需一次構建即可多平臺運行。運營人員只需配置他們的服務,即可運行所有的
應用。

為什麽要使用 docker
1 、快速交付應用程序

2 、更容易部署和擴展

3 、效率更高

4 、快速部署也意味著更簡單的管理

5容器是在操作系統層面上實現虛擬化,直接復用本地主機的操作系統,而傳統方式則是
在硬件層面實現。

Docker 內部:
要理解

Docker 內部構建,需要理解以下三種部件:
Docker 鏡像 - Docker imagesDocker 鏡像是 Docker 容器運行時的只讀模板, 鏡像可以用來創建 Docker 容器
Docker
倉庫 - Docker registeriesDocker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫
Docker
容器 - Docker containersDocker 利用容器來運行應用, 一個 Docker 容器包含了所有的某個應用運行所需要的環境,每一個 Docker 容器都是從 Docker 鏡像創建的。

Docker 底層技術
docker 底層的 2 個核心技術分別是 Namespaces Control groupsNamespaces 用來隔離各個容器
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基礎