Centos7.4—Docker容器安裝配置與基本操作
目錄
第一部分 實驗環境
第二部分 安裝配置Docker軟件
第三部分 Docker鏡像操作
第四部分 Docker容器操作
第五部分 制作鏡像
第六部分 數據卷管理
第七部分 網絡通信
第八部分 構建nginx鏡像
第一部分 實驗環境
Linux服務器一臺
系統:CentOS 7.4
IP地址:192.168.80.10
註意:需要該服務器能上公網
第二部分 安裝配置docker軟件
一:配置yum源,加入docker源
[root@localhost ~]# vi /etc/yum.repos.d/CentOS-Base.repo
保存退出
二:安裝docker軟件
[root@localhost ~]# yum install -y docker-engine
[root@localhost ~]# systemctl start docker //開啟docker服務
[root@localhost ~]# docker version //查看docker服務版本
第三部分 Docker鏡像操作
Docker鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為是一個面向Docker容器引擎的只讀模板,比如:一個鏡像可以是一個完整CentOS操作系統環境,稱為一個CentOS鏡像;可以是一個安裝了MySQL的應用程序,稱之為一個MySQL鏡像等等
- 搜索鏡像
命令語法:docker search 關鍵字 //用來搜索遠端官方倉庫中的共享鏡像
[root@localhost ~]# docker search lamp //搜索關鍵字為lamp的鏡像
NAME:鏡像名稱
DESCRIPTION:描述
STARS:星級
OFFICIAL:是否官方創建
AUTOMATED:是否主動創建
[root@localhost ~]# docker search lamp -f stars=10
- 獲取鏡像
命令語法:docker pull 名稱
[root@localhost ~]# docker pull nickistre/centos-lamp //下載鏡像nickistre/centos-lamp
(等待時間有點漫長,不是網速的問題,是國外網站資源少,下載的都是最新的版本) - 查看鏡像信息
命令語法:docker images
[root@localhost ~]# docker images //查看本地所有鏡像
REPOSITORY:鏡像屬於的倉庫(名稱)
TAG:鏡像的標簽信息,標記同一個倉庫中的不同鏡像,默認為latest
IMAGE ID:鏡像的唯一ID號,唯一標識了該鏡像
CREATED:鏡像創建時間
SIZE:鏡像大小
//還可以根據鏡像的唯一標識ID號,獲取鏡像詳細信息
[root@localhost ~]# docker inspect 7c85674b3b36 - 為鏡像添加多個名稱和標簽
命令語法:docker tag 名稱:標簽 新名稱:新標簽
[root@localhost ~]# docker tag nickistre/centos-lamp:latest centos:lamp
[root@localhost ~]# docker images //查看鏡像
//名稱與標簽可以添加多個,ID號是唯一的 - 刪除鏡像
命令格式:docker rmi 名稱:標簽
//鏡像沒有使用才能刪除成功,且只是刪除一個鏡像,同一個ID下的其它鏡像不會被刪除
或者:docker rmi 鏡像ID號 (以ID號刪除,會刪除同一個ID下全部的鏡像)
Docker rmi –f ID //永久刪除
docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}") //刪除所有沒有使用的鏡像
[root@localhost ~]# docker rmi centos:lamp
- 存出鏡像和載入鏡像
(1)存出鏡像:將鏡像保存成本地文件,這一過程叫作存出鏡像,可以使用docker save命令進行操作。之後就可以拷貝該文件到其他機器。
命令格式:docker save –o 存儲文件名 存儲的鏡像
[root@localhost ~]# docker save -o lamp nickistre/centos-lamp //將本地的nickistre/centos-lamp鏡像存出為文件lamp
[root@localhost ~]# docker rmi nickistre/centos-lamp //刪除nickistre/centos-lamp鏡像
(2)載入鏡像:將本地存出鏡像文件導入到鏡像庫,這一過程叫作載入鏡像。使用docker load或者docker –input進行載入操作
命令格式:docker load < 存出的文件
[root@localhost ~]# docker load < lamp //將文件lamp載入鏡像到本地鏡像庫中
- 鏡像上傳
//本地存儲的鏡像越來越多,就需要指定一個專門的地方存放這些鏡像—倉庫
命令格式:docker push 名稱:標簽
第四部分 Docker容器操作
Docker容器是從鏡像創建的運行實例,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互不可見的,可以保證平臺的安全性。還可以把容器看作是一個簡易版的Linux環境,Docker利用容器來運行和隔離應用。
容器是Docker的另一個核心概念。簡單說,容器是鏡像的一個運行實例,是獨立運行的一個或一組應用以及它們所必需的運行環境,包括文件系統、系統類庫、shell環境等。鏡像是只讀模板,而容器會給這個只讀模板一個額外的可寫層。
- 容器的創建與啟動
(1)容器的創建就是將鏡像加載到容器的過程
命令格式:docker create [選項] 鏡像 運行的程序
常用選項:
-i:讓容器的輸入保持打開
-t:讓Docker分配 一個偽終端
[root@localhost ~]# docker create -it nickistre/centos-lamp /bin/bash //創建容器,默認是沒有運行的
[root@localhost ~]# docker ps –a //查看容器的運行情況,關註ID(唯一的)
CONTAINER ID:容器的ID號(唯一的)
IMAGE:加載的鏡像
COMMAND:運行的程序
CREATED:創建時間
STATUS:目前所處的狀態
PORTS:端口映射
[root@localhost ~]# docker ps //查看運行中的容器
(2)啟動
命令格式:docker start 容器的ID/名稱
[root@localhost ~]# docker start 45c927ad72d4 啟動容器
[root@localhost ~]# docker ps //查看運行的容器
(3)創建並啟動
命令格式:docker run [選項] 鏡像 運行的程序
等同於先執行docker create命令,再執行docker start命令。需要註意只要後面的命令運行結束,容器就會停止。
[root@localhost ~]# docker run centos:lamp /bin/bash -c ls / //創建容器的並啟動執行一條shell命令,命令完成容器就停止
[root@localhost ~]# docker ps –a
(4)容器的暫停運行
命令格式:docker pasuse 容器的ID
[root@localhost ~]# docker pause fb89549a2d31
[root@localhost ~]# docker unpause fb89549a2d31 //繼續運行
- 容器的運行終止
命令格式:docker stop 容器的ID/名稱
[root@localhost ~]# docker stop 45c927ad72d4
- 容器的進入
命令格式:docker exec –it 容器ID/名稱 /bin/bash
[root@localhost ~]# docker exec -it 45c927ad72d4 /bin/bash //進入運行中的容器
- 容器的導出與生成鏡像
(1) 導出:將已經創建好的容器導出為文件,無論這個容器是處於運行狀態還是停止狀態均可導出。
命令格式:docker export 容器ID/名稱 > 文件名
[root@localhost ~]# docker export 6e22920fc447 > centostar
(2) 將容器文件生成鏡像
命令格式:cat 文件名 | docker import – 生成的鏡像名稱:標簽
[root@localhost ~]# cat centostar | docker import - centos1:latest
- 容器的刪除
命令格式:docker rm 容器ID/名稱
Docker rm –f 容器ID/名稱 //強制刪除運行中的容器,不建議
[root@localhost ~]# docker stop fb89549a2d31
[root@localhost ~]# docker rm fb89549a2d31
[root@localhost ~]# docker rm -f 6e22920fc447
第五部分 制作鏡像
- 基於現有鏡像制作
將原始鏡像加入容器並運行-》在原始鏡像中部署各種服務-》退出容器-》使用下面命令將容器生成新的鏡像
實質就是把一個容器裏面運行的程序以及該程序的運行環境打包起來生成新的鏡像
命令格式: docker commit [選項] 容器ID/名稱 倉庫名稱:[標簽]
常用選項:
-m:說明信息
-a:作用信息
-p:生成過程中停止容器的運行
//首先啟動一個容器
//創建鏡像
[root@localhost ~]# docker commit -m "new" -a "daoke" a777634d6997 centos2:latest
- 基於本地模板創建
參考上面第二小部分的第四點 - 基於dockerfile創建
(1)建立工作目錄
[root@localhost ~]# mkdir apache
[root@localhost ~]# cd apache/
(3) 創建並編寫dockerfile文件
[root@localhost apache]# vi dockerfile
#基於的基礎鏡像為centos
FROM centos
#維護該鏡像的用戶信息
MAINTAINER The Centos Project<[email protected]>
#鏡像操作指令安裝apache軟件包
#RUN yum -y update //此處註意,由於我的centos鏡像版本是最新的7.3,所以不需要更新,如果是7.3以下的版本,這裏需要打開,自動更新到7.3,否則後面會有報錯
RUN yum -y install httpd
#開啟80端口
EXPOSE 80
#復制網站首頁文件
ADD index.html /var/www/html/index.html
#將執行腳本復制到鏡像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#啟動容器時執行腳本
CMD ["/run.sh"]
保存退出
(3)編寫執行腳本內容
[root@localhost apache]# vi run.sh
#!/bin/bash
rm -rf /run/httpd/* //清理httpd的緩存
exec /usr/sbin/apachectl -D FOREGROUND //啟動apache服務
保存退出
(4)創建測試頁面
[root@localhost apache]# vi index.html
This is test
保存退出
(5)使用dockerfile生成鏡像
命令格式:docker build [選項] 路徑
常用選項:-t //指定鏡像的標簽信息
[root@localhost apache]# docker build -t httpd:centos . //”.”表示當前路徑
(6)使用新的鏡像運行容器
[root@localhost apache]# docker run -d -p 9000:80 httpd:centos //用-p選項實現將本地端口9000映射到容器中的80端口
//瀏覽器訪問http://192.168.80.10:9000
- Ssh公鑰驗證—基於dockerfile生成鏡像
註意:需要聯網
(1)建立工作目錄,創建公鑰
[root@localhost ~]# mkdir sshd
[root@localhost ~]# ssh-keygen -t rsa //創建公鑰,一路回車,不要設置密碼
[root@localhost ~]# cat .ssh/id_rsa.pub > sshd/authorized_keys
[root@localhost ~]# cd sshd/
(2)創建並編寫Dockerfile文件
[root@localhost sshd]# vi Dockerfile
FROM centos1
MAINTAINER The Centos Project<[email protected]>
RUN yum install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
RUN sed -ri ‘s/session required pam_loginuid.so/#session required pam_loginuid.so/g‘ /etc/pam.d/sshd
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 775 /run.sh
EXPOSE 22
CMD [ "/usr/sbin/init"]
CMD ["/run.sh"]
保存退出
(3)編寫執行腳本
[root@localhost sshd]# vi run.sh
#/bin/bash
/usr/sbin/sshd –D
保存退出
(4)生成鏡像
[root@localhost sshd]# docker build -t sshd:centos .
[root@localhost sshd]# docker run --privileged -itd -p 2222:22 35f737ae37e9 /usr/sbin/init
//創建、啟動容器,並且將ssh服務加入系統啟動服務,該命令只適用於centos7以上版本
[root@2c2528b24914 /]# systemctl status sshd
[root@2c2528b24914 /]# yum install initscripts –y
註意:centos7以下不需要,只要使用以下命令:
docker run -itd -p 2222:22 9ccd132ae0f7 /bin/bash
(5)驗證測試
[root@localhost sshd]# ssh 172.17.0.11 //遠程訪問,不需要輸入密碼直接進入
第六部分 數據卷管理
- 數據卷
數據卷是一個供容器使用的特殊目錄,位於容器中,可將宿主機的目錄掛載到數據卷上,對數據卷的修改操作立刻可見,並且更新數據不會影響鏡像,從而實現數據在宿主機與容器之間的遷移。類似於Linux下對目錄進行的mount操作
1.1 創建數據卷
在docker run命令中使用-v選項可以在容器內創建數據卷;
多次使用-v選項可創建多個數據卷;
使用--name選項可以給容器創建一個友好的自定義名稱。
[root@localhost ~]# docker run -v /mnt:/mnt:ro -itd --name www centos1 /bin/bash
1.2 進入容器中查看掛載情況
[root@localhost ~]# docker exec -it 673e2ad4bb91 /bin/bash
//查看本地mnt目錄:
[root@localhost ~]# docker inspect 673e2ad4bb91 //查看容器信息 - 數據卷容器
用於不同的容器之間共享數據
2.1 創建數據卷容器
[root@localhost ~]# docker run -itd -v /datevo --name dbdata centos2 /bin/bash
[root@localhost ~]# docker exec -it a00ca1ae829d /bin/bash
2.2 使用—volumes-from來掛載一個容器中的數據卷到一個新的容器
[root@localhost ~]# docker run -it --volumes-from dbdata --name db1 centos2 /bin/bash
2.3 寫數據驗證
[root@localhost ~]# docker start 3fee5101e8b0
[root@localhost ~]# docker exec -it 3fee5101e8b0 /bin/bash
[root@3fee5101e8b0 /]# cd datevo/
[root@3fee5101e8b0 datevo]# touch aa.txt
[root@3fee5101e8b0 datevo]# exit
[root@localhost ~]# docker exec -it a00ca1ae829d /bin/bash
[root@a00ca1ae829d /]# cd datevo/
第七部分 網絡通信
- 端口映射
選項:
-P:隨機映射
-p:指定要映射的端口
用法:[root@localhost ~]# docker run -d -p 9000:80 httpd:centos
[root@localhost ~]# docker run -d -P httpd:centos
瀏覽器訪問http://192.168.80.10:32768
- 容器間通信
2.1 創建源容器
[root@localhost ~]# docker run -itd -P --name web1 nickistre/centos-lamp:latest /bin/bash
//創建並運行容器取名web1,端口號自動映射
2.2 創建接收容器
[root@localhost ~]# docker run -itd -P --name web2 --link web1:web1 nickistre/centos-lamp:latest /bin/bash //創建並運行容器取名web2,鏈接到web1和其通信
2.3 測試容器互聯通信
[root@localhost ~]# docker exec -it c8f2674e7e6b /bin/bash
[root@c8f2674e7e6b /]# ping web1
[root@localhost ~]# docker exec -it bd3673a6da2a /bin/bash
[root@bd3673a6da2a /]# ping 172.17.0.10
第八部分 構建nginx鏡像
- 創建工作目錄
[root@localhost ~]# mkdir nginx
[root@localhost ~]# cd nginx - 創建並編寫dockerfile文件
[root@localhost nginx]# vi Dockerfile
FROM centos
MAINTAINER The Centos Project<[email protected]>
RUN yum install -y epel-release
RUN yum install -y nginx
#ADD nginx.conf /etc/nginx/nginx.conf
#RUN echo "test page" >> /etc/nginx/nginx.conf
ADD run.sh /run.sh
RUN chmod 775 /run.sh
EXPOSE 80
#CMD [ "/usr/sbin/init"]
CMD ["/run.sh"]
保存退出 - 創建並編寫啟動腳本
[root@localhost nginx]# vi run.sh
#!/bin/bash
/usr/sbin/nginx
保存退出 - Dockerfile生成鏡像
[root@localhost nginx]# docker build -t nginx:centos .
[root@localhost nginx]# docker images //查看生成的鏡像
[root@localhost nginx]# docker run --privileged -itd -p 80:80 e2201d9ab8a9 /usr/sbin/init
//創建、啟動容器,映射到本機80端口,並且將nginx加入系統啟動服務,該命令只適用於centos7以上版本
[root@localhost nginx]# docker exec -it 010bf45da174 /bin/bash
[root@010bf45da174 /]# nginx
[root@010bf45da174 /]# netstat -anpt | grep nginx
瀏覽器訪問http://192.168.80.10:80
//構建完成
Centos7.4—Docker容器安裝配置與基本操作