Docker入門實戰(zhàn)

Docker簡介

產(chǎn)生背景

  • 開發(fā)和運維之間因為環(huán)境不同而導致的矛盾
  • 集群環(huán)境下每臺機器部署相同的應用
  • DevOps(Development and Operations)

簡介

Docker是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。

Docker是世界領先的軟件容器平臺。開發(fā)人員利用Docker可以消除協(xié)作編碼時“在我的機器上可正常工作”的問題。運維人員利用Docker可以在隔離容器中并行運行和管理應用,獲得更好的計算密度。企業(yè)利用Docker可以構建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽為Linux和Windows Server應用發(fā)布新功能。


Docker

Docker優(yōu)點

簡化程序:
Docker讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上,便可以實現(xiàn)虛擬化。Docker改變了虛擬化的方式,使開發(fā)者可以直接將自己的成果放入Docker中進行管理。方便快捷已經(jīng)是Docker的最大優(yōu)勢,過去需要用數(shù)天乃至數(shù)周的任務,在Docker容器的處理下,只需要數(shù)秒就能完成。

避免選擇恐懼癥:
如果你有選擇恐懼癥,還是資深患者。Docker幫你打包你的糾結!比如Docker鏡像;Docker鏡像中包含了運行環(huán)境和配置,所以Docker可以簡化部署多種應用實例工作。比如Web應用、后臺應用、數(shù)據(jù)庫應用、大數(shù)據(jù)應用比如Hadoop集群、消息隊列等等都可以打包成一個鏡像部署。

節(jié)省開支:
一方面,云計算時代到來,使開發(fā)者不必為了追求效果而配置高額的硬件,Docker改變了高性能必然高價格的思維定勢。Docker與云的結合,讓云空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。

Docker架構

Docker使用C/S架構,Client通過接口與Server進程通信實現(xiàn)容器的構建,運行和發(fā)布,如圖:


Docker架構

Host(Docker 宿主機)

安裝了Docker程序,并運行了Docker daemon的主機。

Docker daemon(Docker 守護進程):
運行在宿主機上,Docker守護進程,用戶通過Docker client(Docker命令)與Docker daemon交互。

Images(鏡像):
將軟件環(huán)境打包好的模板,用來創(chuàng)建容器的,一個鏡像可以創(chuàng)建多個容器。

Containers(容器):
Docker的運行組件,啟動一個鏡像就是一個容器,容器與容器之間相互隔離,并且互不影響。

Docker Client(Docker 客戶端)

Docker命令行工具,用戶是用Docker Clients與Docker daemon進行通信并返回結果給用戶。也可以使用其他工具通過Docker Api與Docker daemon通信。

Registry(倉庫服務注冊器)

經(jīng)常會和倉庫(Repository)混為一談,實際上Registry上可以有多個倉庫,每個倉庫可以看成是一個用戶, 一個用戶的倉庫放了多個鏡像。倉庫分為了公開倉庫(Public Repository)和私有倉庫(Private Repository),最大的公開倉庫是官方的Docker Hub,國內(nèi)也有如阿里云、時速云等,可以給國內(nèi)用戶提供穩(wěn)定快速的服務。用戶也可以在本地網(wǎng)絡內(nèi)創(chuàng)建一個私有倉庫。當用戶創(chuàng)建了自己的鏡像之后就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上pull下來就可以了。

Docker安裝

Docker提供了兩個版本:社區(qū)版(CE)和企業(yè)版(EE)。

操作系統(tǒng)要求

以Centos7為例,且Docker要求操作系統(tǒng)必須為64位,且centos內(nèi)核版本為3.1及以上。

查看系統(tǒng)內(nèi)核版本信息:

uname -r

—、準備

卸載舊版本:

yum remove docker docker-common docker-selinux docker-engine

yum remove docker-ce

卸載后將保留/var/lib/docker的內(nèi)容(鏡像、容器、存儲卷和網(wǎng)絡等)。

rm -rf /var/lib/docker
  1. 安裝依賴軟件包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 安裝前可查看device-mapper-persistent-data 和 lvm2 是否已經(jīng)安裝
rpm -qa | grep device-mapper-persistent-data
rpm -qa | grep lvm2
  1. 設置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 更新yum軟件包索引
yum makecache fast

二、安裝

安裝最新版本docker-ce

yum install docker-ce -y

#安裝指定版本docker-ce可使用以下命令查看
yum list docker-ce.x86_64  --showduplicates | sort -r

# 安裝完成之后可以使用命令查看
docker version

三、配置鏡像加速

這里使用阿里云的免費鏡像加速服務,也可以使用其他如時速云、網(wǎng)易云等。

  1. 注冊登錄開通阿里云容器鏡像服務
  2. 查看控制臺,找到鏡像加速器并復制自己的加速器地址
  3. 找到/etc/docker目錄下的daemon.json文件,沒有則直接vi daemon.json
  4. 加入以下配置
# 填寫自己的加速器地址
{
    "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
  1. 通知systemd重載此配置文件
systemctl daemon-reload
  1. 重啟docker服務
systemctl restart docker

Docker常用操作

輸入docker可以查看Docker的命令用法,輸入docker COMMAND --help查看指定命令詳細用法。

鏡像操作

查找鏡像:

# 搜索docker hub網(wǎng)站鏡像的詳細信息
docker search 關鍵詞

下載鏡像:

# Tag表示版本,有些鏡像的版本顯示latest,為最新版本
docker pull 鏡像名:TAG

查看鏡像:

# 查看本地所有鏡像
docker images

刪除鏡像:

# 刪除指定本地鏡像
docker rmi -f 鏡像ID或者鏡像名:TAG

# -f 表示強制刪除

獲取元信息:

# 獲取鏡像的元信息,詳細信息
docker inspect 鏡像ID或者鏡像名:TAG

容器操作

運行:

docker run --name 容器名 -i -t -p 主機端口:容器端口 -d -v 主機目錄:容器目錄:ro 鏡像TD或鏡像名:TAG

# --name 指定容器名,可自定義,不指定自動命名
# -i 以交互模式運行容器
# -t 分配一個偽終端,即命令行,通常組合來使用
# -p 指定映射端口,將主機端口映射到容器內(nèi)的端口
# -d 后臺運行容器
# -v 指定掛載主機目錄到容器目錄,默認為rw讀寫模式,ro表示只讀

容器列表:

# docker ps 查看正在運行的容器
docker ps -a -q

# -a 查看所有容器(運行中、未運行)
# -q 只查看容器的ID

啟動容器:

docker start 容器ID或容器名

停止容器:

docker stop 容器ID或容器名

刪除容器:

docker rm -f 容器ID或容器名

# -f 表示強制刪除

查看日志:

docker logs 容器ID或容器名

進入正在運行容器:

docker exec -it 容器ID或者容器名 /bin/bash

# 進入正在運行的容器并且開啟交互模式終端

# /bin/bash是固有寫法,作用是因為docker后臺必須運行一個進程,否則容器就會退出,在這里表示啟動容器后啟動bash。

# 也可以用docker exec在運行中的容器執(zhí)行命令

拷貝文件:

docker cp 主機文件路徑 容器ID或容器名:容器路徑 # 主機中文件拷貝到容器中

docker cp 容器ID或容器名:容器路徑 主機文件路徑 # 容器中文件拷貝到主機中

獲取容器元信息:

docker inspect 容器ID或容器名

創(chuàng)建鏡像

有時候從Docker鏡像倉庫中下載的鏡像不能滿足要求,我們可以基于一個基礎鏡像構建一個自己的鏡像。

兩種方式:

  • 更新鏡像:使用docker commit命令
  • 構建鏡像:使用docker build命令,需要創(chuàng)建Dockerfile文件

更新鏡像

先使用基礎鏡像創(chuàng)建一個容器,然后對容器內(nèi)容進行更改,然后使用docker commit命令提交為一個新的鏡像(tomcat為例)。

  1. 根據(jù)基礎鏡像,創(chuàng)建容器
docker run --name mytomcat -p 80:8080 -d tomcat
  1. 修改容器內(nèi)容
docker exec -it mytomcat /bin/bash

cd webapps/ROOT

rm -f index.jsp

echo hello world > index. html

exit
  1. 提交為新鏡像
docker commit -m="描述消息" -a="作者" 容器ID或容器名 鏡像:TAG

# 例:
# docker commit -m="修改了首頁" -a="測試" mytomcat zong/tomcat:v1.0
  1. 使用新鏡像運行容器
docker run --name tom -p 8080:8080 -d zong/tomcat:v1.0

使用Dockerfile構建鏡像

Dockerfile是一個包含創(chuàng)建鏡像所有命令的文件,使用docker build命令可以根據(jù)Dockerfile的內(nèi)容創(chuàng)建鏡像(以tomcat為例)。

  1. 創(chuàng)建一個Dockerfile文件 vi Dockerfile
#注意dockerfile指令須大寫

FROM tomcat

MAINTAINER zong

RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp

RUN echo "<h1>hello world2<h1>" > /usr/local/tomcat/webapps/ROOT/index.html
  1. 構建新鏡像
docker build -f Dockerfile -t zong/tomcat:v2.0 .

# -f Dockerfile路徑,默認是當前目錄
# -t 指定新鏡像的名字以及TAG

使用Dockerfile構建Spring Boot應用鏡像

—、準備

  1. 把你的spring boot項目打包成可執(zhí)行jar包
  2. 把jar包上傳到Linux服務器

二、構建

  1. 在jar包路徑下創(chuàng)建Dockerfile文件vi Dockerfile
# 指定基礎鏡像,本地沒有會從dockerHub pull下來
FROM java:8

# 可執(zhí)行jar何復制到基礎鏡像的根目錄下
ADD test.jar /test.jar

# 鏡像要暴露旳端口,如要使用端口,在執(zhí)行docker run命令時使用-p生效
EXPOSE 8080

# 在鏡像運行為容器后執(zhí)行旳命令
ENTRYPOINT ["java", "-jar", "/test.jar"]
  1. 使用docker build命令構建鏡像,基本語法
docker build -f Dockerfile -t zong/mypro:v1 .

# -f 指定Dockerfile文件的路徑
# -t 指定鏡像名字和TAG
# . 指當前目錄,這里實際上需要一個上下文路徑

三、運行

運行自己的Spring Boot鏡像

docker run --name pro -p 80:80 -d 鏡像名:TAG
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容