1. 程式人生 > >Centos 7部署docker環境、基本命令使用及簡單實戰

Centos 7部署docker環境、基本命令使用及簡單實戰

方式 包括 socket stdin 兩種 輕松 本機 打開 root權限

Docker是一個開源的應用容器引擎,屬於Linux容器的一種封裝,是目前最流行的Linux容器解決方案。docker可以為任何應用創建一個輕量級、可移植的容器,然後容器可以運行在任何安裝有docker的平臺上。
Docker 的優勢:
1、更快速的交付和部署
對開發和運維(devop)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。
開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 docker 可以快速創建容器,快速叠代應用程序,大量地節約開發、測試、部署的時間。
2、更高效的虛擬化
docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實現更高的性能和效率。
3、更輕松的遷移和擴展
docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個平臺。
4、更簡單的管理
使用 docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。

一、部署docker環境

1、安裝yum相關工具包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加docker下載源
(1)添加docker官方源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast

(2)添加國內阿裏雲下載節點
註:國內連接docker官方提供的源下載速度比較慢,我這裏使用的是阿裏雲的源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

3、安裝docker
註:安裝的是docker社區版本
yum -y install docker-ce
4、更改鏡像源為國內阿裏雲節點,並指定docker數據存儲目錄

mkdir -p /data/docker
mkdir -p /etc/docker
vim /etc/docker/daemon.json

註:docker安裝好後默認沒有此文件,需要手動創建,添加阿裏雲鏡像節點,並指定docker存儲目錄

{
  "registry-mirrors": ["https://registry.docker-cn.com"], "graph": "/data/docker"
}

5、啟動docker,並加入開機啟動

systemctl start docker
systemctl enable docker

6、測試
(1)下載hello-world鏡像
docker pull hello-world
技術分享圖片
(2)運行hello-world鏡像
docker run hello-world
技術分享圖片
這個image(鏡像)運行後很簡單,就是打印了這段話。告訴我們已經成功的讓docker daemon(核心進程)從docker hub(鏡像源)上拉了一個”hello-world”的image,並且通過這個image創建了一個container(容器),並且通過daemon將輸出的內容傳回了docker client(客戶端)。

二、Docker架構

Docker使用客戶端/服務器(C/S)架構模式,使用遠程API來管理和創建docker容器。Docker Client向Docker daemon發起請求,Docker daemon負責構建、運行和分發容器。Docker client也可以通過socket或REST API與遠程的Docker daemon通信。
技術分享圖片

  • Docker daemon:服務端程序,以後臺的方式運行。負責創建、運行、監控容器,構建、存儲鏡像。
  • Docker client:Docker客戶端,通過命令行或其他工具使用Docker API與Docker daemon通信。
  • Images:Docker鏡像,用於創建docker容器的模板,我們通過鏡像來創建docker容器。
  • Container:Docker容器,是從鏡像創建的運行實例,每一個容器都相當於一個虛擬的應用環境,通過容器來運行各式各樣的應用。
  • Registry:存放Docker鏡像的倉庫,分為公有倉庫和私有倉庫兩種。

三、Docker目錄結構

Docker安裝成功後,默認是沒有存儲目錄的,在啟動的時候才會創建存儲目錄。我們來看下docker都有哪些目錄吧。
ls -lh /data/docker/
技術分享圖片
containerd目錄裏存放的是與daemon程序相關的數據。
image和overlay2目錄裏存放的是與鏡像相關的數據。每下載一個鏡像,就會在這兩個目錄下生成此鏡像對應的子目錄與數據;每運行一個鏡像,即通過鏡像創建一個容器,這兩個目錄下也會生成相關子目錄與數據信息。
containers目錄裏存放的是容器相關的數據,每運行一個容器,就在這個目錄下面生成一個容器Id對應的子目錄與數據。
tmp是臨時文件存放目錄。
volumes與docker的數據卷相關,在此不進行擴展。

四、Docker命令使用

1、查看docker版本信息

docker -v   #查看docker版本號
docker version   #查看docker版本詳細信息

技術分享圖片
2、查看docker系統信息
docker info
3、從鏡像倉庫查找鏡像
docker search ubuntu #搜索包含ubuntu的鏡像
技術分享圖片
4、下載鏡像
docker pull ubuntu #下載ubuntu官方鏡像
技術分享圖片
5、查看本地鏡像
docker images
技術分享圖片
REPOSITORY:鏡像名稱,與鏡像倉庫上的名稱一致
TAG:標記,下載的鏡像默認會使用latest標記
IMAGE ID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像占用磁盤空間大小
6、給本地鏡像做個標記
docker tag ubuntu:latest ubuntu1:test #將ubuntu鏡像的名稱改為ubuntu1,標記改為test
技術分享圖片
註:使用docker images查看會多出來一行,修改後的image id和原來的一樣,個人認為只是做了個標記而已,實際運行的話還是得運行ubuntu鏡像,運行ubuntu1的話會報錯。
技術分享圖片
7、通過鏡像創建並啟動容器
(1)以交互模式創建並啟動一個容器
docker run --name ubuntu_test -it ubuntu /bin/bash
參數說明:
--name:為容器指定一個名稱
-i:打開容器的標準輸入,即以交互模式運行容器
-t:為容器分配一個偽終端
/bin/bash:表示運行bash shell,即運行命令行界面
技術分享圖片
此時已經進入到容器裏的ubuntu系統,可以定制我們自己的應用容器,可安裝配置應用軟件,就跟實際環境一樣部署自己的應用。
exit命令退出與容器的交互模式。
(3)以後臺的方式創建並啟動一個容器
docker run --name ubuntu_test1 -d ubuntu
技術分享圖片
註:返回容器的ID
(4)使用-P參數將80端口映射到主機隨機端口
docker run -P -d nginx:latest #例如容器上啟動了nginx,端口號為80
(5)使用-p參數指定映射端口,使用-v參數指定映射目錄
docker run -p 8081:80 -v /data_test:/data -d nginx:latest
註:將容器的80端口映射到主機8081端口,將容器/data目錄映射到主機/datatest目錄
(6)將容器的端口映射到主機指定IP的端口上
docker run -p 192.168.2.226:8081:80 -d nginx:latest
8、查看容器信息
(1)查看所有容器
docker ps -a
技術分享圖片
CONTAINER ID:容器ID
IMAGE:屬於哪個鏡像
COMMAND:運行的命令、腳本或其他指令
CREATED:容器創建時間
STATUS:運行狀態及運行了多長時間
PORTS:端口映射信息
NAMES:容器名稱
(2)查看運行中的容器
docker ps
(3)查看最近創建的3個容器
docker ps -n 3
(4)查看所有容器的ID
docker ps -a -q
9、啟動、停止、重啟容器
註:可以指定容器ID,也可以指定容器名稱
docker start 665b9b704983
技術分享圖片
啟動之後STATUS會顯示Up(運行)及運行了多長時間

docker stop 665b9b704983
docker restart ubuntu_test

10、刪除容器

docker rm wizardly_albattani   #不加參數只能刪除已停止的容器
docker rm -f -v ubuntu_test   #-f強制刪除運行中的容器,-v刪除與容器關聯的數據卷

技術分享圖片
11、刪除鏡像

docker rmi ubuntu:latest
docker rmi -f ubuntu1:test   #-f強制刪除鏡像,即使該鏡像正被使用

技術分享圖片
12、殺掉一個運行中的容器
docker kill -s KILL ubuntu_test1 #-s "KILL" 表示向容器發送一個KILL信號

五、測試實例

1、下載centos的最新鏡像
docker pull centos
技術分享圖片
2、創建並啟動容器
docker run -itd --privileged --name centos_test -p 80:80 centos /usr/sbin/init
技術分享圖片
參數說明:
-itd:開啟交互模式,分配一個偽終端,-d表示以後臺方式運行
--privileged:使容器內的root擁有真正的root權限,可以看到很多host上的設備,甚至允許在容器中啟動容器。
-p 80:80:將容器的80端口映射到宿主機(即本機)的80端口
/usr/sbin/init:啟動init守護程序
3、登陸到此容器中
docker exec -it centos_test /bin/bash
技術分享圖片
參數說明:
exec:進入到一個運行中的容器裏
-i:保持STDIN 打開,即開啟交互模式
-t:分配一個偽終端
此時命令行提示符已經改變,主機名變成了容器id
4、在容器中安裝httpd服務
yum -y install httpd
5、在容器中啟動httpd服務,並加入開機啟動

systemctl start httpd
systemctl enable httpd

6、退出容器
exit
7、確保本機沒有裝httpd服務

rpm -qa | grep httpd
systemctl status httpd

技術分享圖片
8、在本機查看80端口是否已監聽
ss -lnt | grep 80
技術分享圖片
9、在本機上查看httpd進程信息
ps -ef |grep httpd
技術分享圖片
千萬不要搞混,此處的httpd進程不是本機的,而是容器裏啟動的httpd進程
10、配置firewalld防火墻允許80端口

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

11、通過瀏覽器訪問http://192.168.2.226
技術分享圖片
OK,能正常訪問到apache的主頁
12、把修改過的容器制作成鏡像
docker commit -a "xuad.com" -m "xuad httpd" 6f42b25c1f00 centos/httpd:test
技術分享圖片
參數說明:
-a:提交的鏡像作者信息
-m:鏡像的說明文字
6f42b25c1f00:容器ID
centos/httpd:test:鏡像名稱和標記信息

Centos 7部署docker環境、基本命令使用及簡單實戰