Docker是一個開源的應用容器引擎,屬於Linux容器的一種封裝,是目前最流行的Linux容器解決方案。docker能夠爲任何應用建立一個輕量級、可移植的容器,而後容器能夠運行在任何安裝有docker的平臺上。
Docker 的優點:
一、更快速的交付和部署
對開發和運維(devop)人員來講,最但願的就是一次建立或配置,能夠在任意地方正常運行。
開發者可使用一個標準的鏡像來構建一套開發容器,開發完成以後,運維人員能夠直接使用這個容器來部署代碼。 docker 能夠快速建立容器,快速迭代應用程序,大量地節約開發、測試、部署的時間。
二、更高效的虛擬化
docker 容器的運行不須要額外的 hypervisor 支持,它是內核級的虛擬化,所以能夠實現更高的性能和效率。
三、更輕鬆的遷移和擴展
docker 容器幾乎能夠在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。 這種兼容性可讓用戶把一個應用程序從一個平臺直接遷移到另一個平臺。
四、更簡單的管理
使用 docker,只須要小小的修改,就能夠替代以往大量的更新工做。全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理。linux
一、安裝yum相關工具包yum install -y yum-utils device-mapper-persistent-data lvm2
二、添加docker下載源
(1)添加docker官方源nginx
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum makecache fast
(2)添加國內阿里雲下載節點
注:國內鏈接docker官方提供的源下載速度比較慢,我這裏使用的是阿里雲的源docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast
三、安裝docker
注:安裝的是docker社區版本yum -y install docker-ce
四、更改鏡像源爲國內阿里雲節點,並指定docker數據存儲目錄shell
mkdir -p /data/docker mkdir -p /etc/docker vim /etc/docker/daemon.json
注:docker安裝好後默認沒有此文件,須要手動建立,添加阿里雲鏡像節點,並指定docker存儲目錄apache
{ "registry-mirrors": ["https://registry.docker-cn.com"], "graph": "/data/docker" }
五、啓動docker,並加入開機啓動json
systemctl start docker systemctl enable docker
六、測試
(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(客戶端)。ubuntu
Docker使用客戶端/服務器(C/S)架構模式,使用遠程API來管理和建立docker容器。Docker Client向Docker daemon發起請求,Docker daemon負責構建、運行和分發容器。Docker client也能夠經過socket或REST API與遠程的Docker daemon通訊。
vim
Docker安裝成功後,默認是沒有存儲目錄的,在啓動的時候纔會建立存儲目錄。咱們來看下docker都有哪些目錄吧。ls -lh /data/docker/
containerd目錄裏存放的是與daemon程序相關的數據。
image和overlay2目錄裏存放的是與鏡像相關的數據。每下載一個鏡像,就會在這兩個目錄下生成此鏡像對應的子目錄與數據;每運行一個鏡像,即經過鏡像建立一個容器,這兩個目錄下也會生成相關子目錄與數據信息。
containers目錄裏存放的是容器相關的數據,每運行一個容器,就在這個目錄下面生成一個容器Id對應的子目錄與數據。
tmp是臨時文件存放目錄。
volumes與docker的數據卷相關,在此不進行擴展。centos
一、查看docker版本信息瀏覽器
docker -v #查看docker版本號 docker version #查看docker版本詳細信息
二、查看docker系統信息docker info
三、從鏡像倉庫查找鏡像docker search ubuntu #搜索包含ubuntu的鏡像
四、下載鏡像docker pull ubuntu #下載ubuntu官方鏡像
五、查看本地鏡像docker images
REPOSITORY:鏡像名稱,與鏡像倉庫上的名稱一致
TAG:標記,下載的鏡像默認會使用latest標記
IMAGE ID:鏡像ID
CREATED:鏡像建立時間
SIZE:鏡像佔用磁盤空間大小
六、給本地鏡像作個標記docker tag ubuntu:latest ubuntu1:test #將ubuntu鏡像的名稱改成ubuntu1,標記改成test
注:使用docker images查看會多出來一行,修改後的image id和原來的同樣,我的認爲只是作了個標記而已,實際運行的話仍是得運行ubuntu鏡像,運行ubuntu1的話會報錯。
七、經過鏡像建立並啓動容器
(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
八、查看容器信息
(1)查看全部容器docker ps -a
CONTAINER ID:容器ID
IMAGE:屬於哪一個鏡像
COMMAND:運行的命令、腳本或其餘指令
CREATED:容器建立時間
STATUS:運行狀態及運行了多長時間
PORTS:端口映射信息
NAMES:容器名稱
(2)查看運行中的容器docker ps
(3)查看最近建立的3個容器docker ps -n 3
(4)查看全部容器的IDdocker ps -a -q
九、啓動、中止、重啓容器
注:能夠指定容器ID,也能夠指定容器名稱docker start 665b9b704983
啓動以後STATUS會顯示Up(運行)及運行了多長時間
docker stop 665b9b704983 docker restart ubuntu_test
十、刪除容器
docker rm wizardly_albattani #不加參數只能刪除已中止的容器 docker rm -f -v ubuntu_test #-f強制刪除運行中的容器,-v刪除與容器關聯的數據卷
十一、刪除鏡像
docker rmi ubuntu:latest docker rmi -f ubuntu1:test #-f強制刪除鏡像,即便該鏡像正被使用
十二、殺掉一個運行中的容器docker kill -s KILL ubuntu_test1 #-s "KILL" 表示向容器發送一個KILL信號
一、下載centos的最新鏡像docker pull centos
二、建立並啓動容器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守護程序
三、登錄到此容器中docker exec -it centos_test /bin/bash
參數說明:
exec:進入到一個運行中的容器裏
-i:保持STDIN 打開,即開啓交互模式
-t:分配一個僞終端
此時命令行提示符已經改變,主機名變成了容器id
四、在容器中安裝httpd服務yum -y install httpd
五、在容器中啓動httpd服務,並加入開機啓動
systemctl start httpd systemctl enable httpd
六、退出容器exit
七、確保本機沒有裝httpd服務
rpm -qa | grep httpd systemctl status httpd
八、在本機查看80端口是否已監聽ss -lnt | grep 80
九、在本機上查看httpd進程信息ps -ef |grep httpd
千萬不要搞混,此處的httpd進程不是本機的,而是容器裏啓動的httpd進程
十、配置firewalld防火牆容許80端口
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload
十一、經過瀏覽器訪問http://192.168.2.226
OK,能正常訪問到apache的主頁
十二、把修改過的容器製做成鏡像docker commit -a "xuad.com" -m "xuad httpd" 6f42b25c1f00 centos/httpd:test
參數說明:-a:提交的鏡像做者信息-m:鏡像的說明文字6f42b25c1f00:容器IDcentos/httpd:test:鏡像名稱和標記信息