92 dokcer

Docker

簡介與概述
1.Docker 是一個開源的應用容器引擎妖谴,基于 Go 語言 并遵從 Apache2.0 協議開源拢军。
Docker 可以讓開發(fā)者打包他們的應用以及依賴包到一個輕量級良价、可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上燎猛,也可以實現虛擬化玛界。

  1. Docker的主要目標是‘build ,ship and run any app伤疙,anywhere’烦衣,也就是說通過對應用程序組件的封裝,分發(fā),部署花吟,運行等生命周期的管理。使用戶的app(可以是一個web應用程序或者數據庫應用等)及其運行環(huán)境能夠做到‘一次封裝厨姚,到處運行’衅澈。
    3.Linux容器技術的出現解決了這個問題。而docker就是基于他的基礎上發(fā)展過來的谬墙。將應用運行到docker容器上面今布,而docker容器在任何操作系統(tǒng)上都是一致的,這就是實現跨平臺跨服務器拭抬。只需要一次配置好環(huán)境部默,換到別的機子上就可以一鍵部署好,大大簡化了操作造虎。
  2. 容器是完全使用沙箱機制傅蹂,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
    5.Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版)算凿,我們用社區(qū)版就可以了份蝴。

Docker實際上就是一個虛擬化輕量級linux服務器,可以解決我們在開發(fā)環(huán)境中運行配置問題氓轰。

為什么需要使用docker

Docker:虛擬化容器技術
Docker主要解決我們開發(fā)環(huán)境配置遷移的問題婚夫。

1.我們現在開發(fā)了一個javaweb項目,需要依賴很多環(huán)境配置 比如:Tomcat署鸡、JDK環(huán)境案糙、Nginx、Redis環(huán)境等靴庆。
2.本地需要安裝這些環(huán)境Tomcat时捌、JDK環(huán)境、Nginx撒穷、Redis環(huán)境等匣椰,在打war包給運維部署在linux服務器,運維人員也需要在linux服務器上安裝Tomcat端礼、JDK環(huán)境禽笑、Nginx、Redis環(huán)境蛤奥。
3.但是有時候可能會發(fā)生這些問題:我在本地運行環(huán)境沒有問題佳镜,但是打包到Linux服務器運行總是遇到很多錯誤,大多數由于一些版本沖突影響凡桥。
4.所以在這時候我們就可以使用docker部署和安裝軟件就非常方便蟀伸,直接將該springboot項目制作成一個鏡像文件,鏡像文件中包含jdk版本 tomcat版本信息 直接部署linux即可,減少依賴沖突概率啊掏。

看看linux安裝mysql
https://blog.csdn.net/qq_42097051/article/details/113726893 在不同的linux內核中安裝

Mysql很容易發(fā)生版本沖突的問題蠢络。
在對比docker安裝mysql
docker pull mysql:5.7
docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7

Docker最終解決了運行環(huán)境配置中的問題。----鏡像文件底層封裝好了

Springboot 核心思想----

使用docker的好處

  1. 簡化配置 安裝創(chuàng)建非常的方便
  2. 代碼流水線(Code Pipeline)管理 傳統(tǒng)項目部署可能需要經過很多環(huán)節(jié)迟蜜,
    容易產生版本的依賴沖突問題刹孔,Docker給應用提供了一個從開發(fā)到上線均一致的環(huán)境,讓代碼的流水線變得簡單不少
  3. Devops 開發(fā)與運維一體化減少溝通的成本 (docker或者是k8s實現)
  4. 虛擬技術 快速部署
  5. 彈性擴容
    應用場景
    1.Web 應用的自動化打包和發(fā)布娜睛。
    2.自動化測試和持續(xù)集成髓霞、發(fā)布。
    3.在服務型環(huán)境中部署和調整數據庫或其他的后臺應用畦戒。
    4.從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環(huán)境方库。
    容器與虛擬機區(qū)別
    什么是虛擬機:在一臺物理機器上,利用虛擬化技術障斋,虛擬出來多個操作系統(tǒng)纵潦,每個操作系統(tǒng)之間是隔離的。

從下到上理解上圖:

最下面的一層就是物理機配喳,可以是服務器酪穿,設置是一臺個人電腦;

電腦上需要安裝操作系統(tǒng)晴裹,比如我們安裝了win10的操作系統(tǒng)被济;
再往上就是虛擬機軟件了,比如我們常用的VirtualBox涧团、VMWare只磷,它們的作用是模擬計算機硬件;

繼續(xù)向上泌绣,就是虛擬機模擬出來的操作系統(tǒng)了钮追;

在虛擬的操作系統(tǒng)中,安裝所需的軟件阿迈、組件等元媚。比如我們需要在虛擬操作系統(tǒng)中安裝JDK、Tomcat等苗沧;

最后就是具體的應用了刊棕,例如部署到Tomcat中。

Docker :Docker是開源的應用容器引擎

依然從下往上看:
最下面兩層待逞,概念同上甥角。
往上,可以看做Docker容器的管理器识樱。
依賴和應用都被打包成了Docker鏡像嗤无。例如震束,JDK、Tomcat当犯、應用都被打包在了一起垢村,運行在Docker容器里,容器和容器間是隔離的灶壶。

Docker和虛擬機的區(qū)別

1.從兩者的架構圖上看肝断,虛擬機是在硬件級別進行虛擬化,模擬硬件搭建操作系統(tǒng)驰凛;而Docker是在操作系統(tǒng)的層面虛擬化,復用操作系統(tǒng)担扑,運行Docker容器恰响。
2.Docker的速度很快,秒級涌献,而虛擬機的速度通常要按分鐘計算胚宦。
3.Docker所用的資源更少,性能更高燕垃。同樣一個物理機器枢劝,Docker運行的鏡像數量遠多于虛擬機的數量。
4.虛擬機實現了操作系統(tǒng)之間的隔離卜壕,Docker是進程之間的隔離您旁,虛擬機隔離級別更高、安全性方面也更強轴捎。
5.虛擬機和Docker各有優(yōu)勢鹤盒,不存在誰替代掉誰的問題,很多企業(yè)都采用物理機上做虛擬機侦副,虛擬機中跑Docker的方式侦锯。

特性 容器 虛擬機
啟動速度 秒級 分鐘級別
硬盤使用 一般為MB 一般GB
性能 接近原生 弱于
系統(tǒng)支持量 單機支持上千個容器 一般幾十個
隔離性 完全隔離 完全隔離

Docker官網
https://docs.docker.com/
https://www.docker.com/
Docker安裝

Docker 要求 CentOS7 系統(tǒng)的內核版本在 3.10以上 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 秦驯。
建議安裝 CentOS-7.6-x86_64-DVD-1810.iso Docker-CE-19.03.05
鏈接:https://pan.baidu.com/s/16noDp8m8B4w8w7f4hzEAzg
提取碼:08yo
不要使用CentOS-7.6-1406-x86_64-DVD.iso尺碰,默認下載最新的docker的話 一直啟動失敗!
CentOS-7.6-x86_64-DVD-1810.iso 相關虛擬機:
1、安裝所需的軟件包
yum-utils提供了yum-config-manager 效用译隘,并device-mapper-persistent-data和lvm2由需要 devicemapper 存儲驅動程序亲桥。
sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2
2.設置穩(wěn)定的安裝源(存儲庫)
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo

  1. 安裝docker-ce-19.03.5
    我這里選擇安裝docker-ce-19.03.5版本,如果你在安裝的時候查詢到新的版本细燎,只要按照格式安裝就可以了两曼,注意版本號。
    軟件包名稱是軟件包名稱(docker-ce)加上版本字符串(第二列)玻驻,從第一個冒號(:)一直到第一個連字符悼凑,并用連字符(-)分隔偿枕。例如,docker-ce-19.03.5户辫。
    yum install docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io
    4.安裝完成后渐夸,運行下面的命令,驗證是否安裝成功渔欢。
    docker -v 或者docker info

5.啟動并加入開機啟動
systemctl start docker
systemctl enable docker
如果啟動docker 報錯:sudo systemctl start docker Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.
大多數是因為CentOS的版本安裝存在些問題墓塌。
英文只能通過谷歌的搜索引擎---

Docker快速入門
Docker核心名詞

鏡像文件
容器
倉庫

鏡像:簡單理解為就是一個安裝包,里面包含容器所需要運行的的基礎文件和配置信息
奥额,比如:redis鏡像苫幢、mysql鏡像等。
鏡像的來源方式:

  1. 自己做鏡像 比如(自己開發(fā)微服務項目)
  2. 拉取別人制作好的鏡像垫挨, 例如 nginx韩肝、mysql、redis等九榔。

容器: 容器就是鏡像運行的實例哀峻,容器狀態(tài)分為:初創(chuàng)建、運行哲泊、停止剩蟀、暫停、
刪除切威, 一個鏡像可以創(chuàng)建多個不同的容器育特。

每個鏡像文件都有自己獨立ip信息---輕量級的linux服務器 虛擬化

比如:鏡像就是類 容器就是實例對象

倉庫: 倉庫可以簡單理解為,專門存儲鏡像文件倉庫牢屋, 類似于 谷歌手機市場且预,統(tǒng)一在
谷歌手機市場下載開發(fā)者的安裝包。
Docker 公開倉庫地址: Docker hub
https://hub.docker.com/

Docker官方倉庫:https://hub.docker.com/ ----訪問比較慢

宿主機:當前win7操作系統(tǒng)

  1. 需要制作鏡像文件(springboot項目)------類似于開發(fā)者開發(fā)安裝應用程序打包
  2. 需要將我們制作好的鏡像文件提交到docker倉庫中-----開發(fā)者將自己的app應用程序發(fā)布安卓手機助手中烙无。
  3. 本地需要拉去我們docker倉庫中下載鏡像文件锋谐,在交給我們容器運行---用戶從app市場中下載安裝包運行。

1.在需要制作鏡像文件截酷,將該鏡像文件發(fā)布到docker倉庫
docker倉庫 dockerhub ----谷歌安卓手機市場 國內加速鏡像
阿里云涮拗、網易、科大()----360迂苛、小米三热、華為。

  1. 從docker倉庫下載鏡像文件-----用戶從手機市場中三幻,下載軟件就漾。
  2. docker運行鏡像文件----容器---獨立ip訪問信息-----端口號碼映射

Docker下載鏡像原理
Docker pull 從遠程docker 官方倉庫下載 鏡像,到本地念搬,在使用容器運行該鏡像抑堡。
注意的是:docker官方鏡像倉庫地址部署在國外摆出,下載鏡像可能比較慢,建議配置國內加速鏡像

Docker加載鏡像配置
https://hub.docker.com/search?q=redis&type=image ---在國外訪問可能比較慢
國內從 DockerHub 拉取鏡像有時會遇到困難首妖,此時可以配置鏡像加速器偎漫。Docker 官方和國內很多云服務商都提供了國內加速器服務,例如:

科大鏡像:https://docker.mirrors.ustc.edu.cn/
網易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
當配置某一個加速器地址之后有缆,若發(fā)現拉取不到鏡像象踊,請切換到另一個加速器地址。國內各大云服務商均提供了 Docker 鏡像加速服務棚壁,建議根據運行 Docker 的云平臺選擇對應的鏡像加速服務杯矩。
阿里云加速鏡像配置
我的加速鏡像:https://66mzqrih.mirror.aliyuncs.com

阿里云鏡像獲取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陸后袖外,左側菜單選中鏡像加速器就可以看到你的專屬地址了:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://66mzqrih.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

如何查看加速鏡像安裝成功
輸入:docker info

Docker常用命令
docker --help 幫助命令
docker --version
docker -version
docker images
查看本地images 鏡像緩存

docker images 查看本地鏡像文件
docker rmi -f kibana:5.6.9 ---刪除鏡像文件

REPOSITORY 存儲庫名稱
Tag 鏡像的標簽 不寫版本號碼 默認下載最新latest鏡像
IMAGE ID 鏡像id
CREATED 創(chuàng)建時間
SIZE 大小

docker images -a
docker images -q ---只顯示鏡像的id
docker images --digests ---顯示鏡像的摘要信息
docker images --no-trunc ---顯示完整鏡像信息

docker rmi tomcat(鏡像文件名稱)
docker search
docker search mysql
https://hub.docker.com/

docker search -s 30 mysql 列出點贊數超過30以上菊碟。

latest 表示為最新的鏡像文件 mysql8.0版本
docker pull

latest -----tag 最新版本的鏡像文件

docker pull nginx:latest --默認的情況下 下載最新版本的鏡像 可以通過
https://hub.docker.com/_/nginx?tab=tags&page=1&ordering=last_updated

容器管理
查看容器信息
Docker ps 獲取到容器id
docker inspect 1e07cc5cc78d
運行容器
docker run
docker run -i(保持容器一直運行)-t(給容器一個偽終端)-d(后臺運行,不直接進入容器) --name=tomcat9.2(給啟動容器起名字)-p 8080:8080(宿主:docker容器)tomcat:9.2(啟動的容器) 【參數】(加入容器初始化命令)

通過 -it 啟動的容器有兩個特點 一創(chuàng)建就進入容器 exit退出容器 容器就會停止運行 ---交互式容器

通過 -id 創(chuàng)建的容器 docker exec -it tomcat9.2(--name起的名稱)進入容器 exit退出容器 容器不會停止運行 ---守護式容器

docker ps 查看正在運行的容器
docker ps -a 查看運行和已經運行關閉大的容器
docker stop tomcat8 關閉容器
docker start tomcat8 啟動容器
docker rm tomcat8 刪除容器
docker inspect tomcat8 查看容器信息
docker exec 參數 進入容器
docker run 運行原理

docker run mayikt

簡單描述:首先會先從本地獲取獲取mayikt鏡像文件在刺,如果本地沒有該鏡像文件則會去
阿里云倉庫查找該鏡像文件,如果阿里云倉庫也沒有該鏡像文件头镊,則會報錯找不到
鏡像文件蚣驼。
獲取到鏡像文件之后直接運行。
詳細描述:
1.docker在本機緩存中 mayikt鏡像文件湃窍,如果本地存在該鏡像文件
城看,則以該鏡像文件作為模板在容器中運行找默。
2.如果本地緩存中,沒有mayikt鏡像文件 則會從dockerhub 或者加速鏡像中
查找留储,如果查找不到的話,則返回錯誤找不到該鏡像咙轩。

  1. 如果能夠查找到該鏡像获讳,則以該鏡像作為模板運行。

每個容器都有自己獨立的網絡 ip信息 運行成功 就是一個輕量級linux操作系統(tǒng)

啟動容器
docker start 容器id
停止容器
docker stop 容器id
刪除容器
docker rm 容器id
進入容器中

首先使用下面的命令活喊,查看容器ID(CONTAINER ID):

docker ps -a

然后用下面的命令進入容器丐膝,就可以使用bash命令瀏覽容器里的文件:

docker exec -it [CONTAINER ID] bash

有的鏡像沒有bash命令,可以用對應的shell钾菊,比如sh

docker exec -it [CONTAINER ID] sh

Docker 鏡像原理
鏡像是什么

基于docker安裝tomcat服務器 是否需要配置jdk環(huán)境變量呢帅矗?
docker安裝tomcat:8 --jdk8 配置環(huán)境變量
docker安裝tomcat:9 --jdk9 配置環(huán)境變量
如何封裝配置環(huán)境依賴的呢?

Dockerfile---文件

Tomcat 100mb
1.依賴于我們JDK 200mb
2.Linux服務器centos 200mb

鏡像是一種輕量級煞烫、可執(zhí)行的獨立軟件包浑此,用來打包軟件運行環(huán)境和基于運行環(huán)境的開發(fā)軟件,它包含運行某個軟件所需的所有內容滞详,包括代碼凛俱、運行時紊馏、庫、環(huán)境變量和配置文件最冰。

鏡像文件的組成通過 Union fs
運行我們tomcat鏡像文件

tomcat鏡像文件

  1. 依賴于我們JDK
  2. Linux服務器

為什么運行tomcat鏡像文件瘦棋,不需要配置jdk環(huán)境變量。

  1. tomcat鏡像文件包含jdk依賴鏡像 tomcat8-----jdk8鏡像文件
  2. 底層dockerfile -----描述配置jdk環(huán)境

鏡像加載的原理
Linux文件系統(tǒng)由bootfs和rootfs兩部分組成
bootfs:包含bootloader(引導加載程序)和 kernel(內核)
rootfs: root文件系統(tǒng)暖哨,包含的就是典型 Linux 系統(tǒng)中的/dev赌朋,/proc,/bin篇裁,/etc等標準目錄和文件
不同的linux發(fā)行版沛慢,bootfs基本一樣,而rootfs不同达布,如ubuntu团甲,centos等

Docker鏡像底層實際上是有多個不同的聯合文件系統(tǒng)組成的

最底層:bootfs,并使用宿主機的bootfs-復用
第二層:root文件系統(tǒng)rootfs,稱為base image
Union fs
然后再往上可以疊加其他的鏡像文件
統(tǒng)一文件系統(tǒng)(Union File System)技術能夠將不同的層整合成一個文件系統(tǒng)黍聂,為這些層提供了一個統(tǒng)一的視角躺苦,隱藏多層的存在,我們看來只是存在一個文件系統(tǒng)产还。

所以當我們安裝的tomcat鏡像大小是600多MB 是因為里面還包含了jdk和centos的鏡像
而centos鏡像復用了宿主機的bootfs 下載的只有rootfs 所以小很多

所以tomcat>jdk(父鏡像)->centos> 所以整個向外暴露就是600MB
鏡像只讀 當從一個鏡像啟動容器時匹厘, 所以docker會在鏡像上面加載一個可讀可寫的文件系統(tǒng)作為容器運行。

https://hub.docker.com/_/tomcat

Docker Commit
主要作用:根據當前容器制作為鏡像文件

流程:

  1. 從docker hub中下載一個tomcat8鏡像文件脐区;
  2. 運行tomcat8鏡像文件 在tomcatwebapps 目錄中新增 mayikt文件夾 index.html
  3. 將當前容器內容根據模板制作為鏡像文件

docker commit提交容器副本使之成為一個新的鏡像
命令:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要創(chuàng)建的目標鏡像名:[標簽名]

  1. 安裝一個tomcat8
    docker run -p 8081:8080 tomcat:8
  2. docker exec -it 3a06b4c779a8 bash
  3. cd webapps
  4. mkdir mayikt
  5. touch index.html
  6. echo "mayikt" >>index.html

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要創(chuàng)建的目標鏡像名:[標簽名]

1.根據當前容器作為模板制作為鏡像文件
docker commit -m="mayikt tomcat" -a="mayikt" 3a06b4c779a8 mayikt-tomcat:1.0
2.在以當前自己制作的鏡像文件運行
docker run -p 8088:8080 mayikt-tomcat:1.0

Docker數據卷

基本的概念
數據卷就是宿主機上的一個文件或目錄
當容器目錄和數據卷(宿主機)目錄綁定愈诚,雙方修改會立即同步操作
一個數據卷可以被多個容器同時掛載
數據卷作用:容器數據的持久化 外部機器和容器間接通信 容器之間數據交換
使用 -v命令。
數據卷添加的方式
容器內與宿主機實現數據的共享
數據卷--添加兩種方式

  1. 直接命令形式添加 docker run -it -v 宿主機絕對路徑目錄:容器內目錄 鏡像文件名稱
  2. Dockerfile方式添加

安裝Nginx實現負載均衡
掛載nginx html文件
https://hub.docker.com/search?q=nginx&type=image

  1. 創(chuàng)建掛載目錄
    mkdir -p /data/nginx/{conf,conf.d,html,logs}

  2. 啟動docker容器
    docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html 虛擬機目錄 --掛載 容器目錄 /usr/share/nginx/html
上傳一個 html 放入到 /data/nginx/html

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html: linux虛擬機目錄
/usr/share/nginx/html 容器中html目錄

nginx .conf文件和日志文件
docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /data/nginx/logs:/var/log/nginx nginx

\反斜杠 表示換行
/usr/share/nginx/html
/usr/share/nginx/conf
/usr/share/nginx/log

Docker實戰(zhàn)部署軟件
安裝Tomcat服務器
docker run -p 8081:8080 tomcat:8

-p 8081 :8080 容器外部(linux虛擬機訪問端口8081):8080(容器端口號)
docker ps 獲取tomcat正在運行的容器id 進入到中
docker exec -it 1210e05f1a59 bash

docker run -p 8081:8080 tomcat:8

-p 8081:8080 8081(linux虛擬機訪問的端口號):8080(容器內部中端口號)

docker run -p 8081:8080 -d tomcat:8 后臺啟動 ---每次運行都會創(chuàng)建一個新的容器

docker run --name mayikt-tomcat -p 8081:8080 -d tomcat:8

--name: 指定容器名稱
-p:指定容器端口號
-d:指定容器后臺運行
docker run --name mayikt-tomcat tomcat

docker run --name mayikt-tomcat1 -p 8081:8080 tomcat
8081(容器外部或者linux虛擬機訪問的端口號 宿主機)
8080 容器內部的端口號
docker run --name mayikt-tomcat2022 -p 8081:8080 -d tomcat:8
-d 后臺啟動
前臺啟動與后臺啟動的區(qū)別
前臺啟動會打印啟動日志信息
后臺啟動不會打印啟動日志信息

安裝Nginx實現靜態(tài)服務
Docker run 運行容器

--name nginx-test:容器名稱牛隅。
-p 8080:80 端口進行映射炕柔,將本地 8080 端口映射到容器內部的 80 端口。
-d nginx: 設置容器在在后臺一直運行媒佣。

docker ps --- 正在運行的容器
docker ps -a 顯示所有的容器 包括為運行的容器
docker ps 容器id

docker run --name nginx-mayikt -p 8080:80 nginx 默認前臺啟動
docker run --name nginx-mayikt -p 8080:80 -d nginx 后臺啟動方式

前臺與后臺啟動區(qū)別:

前臺啟動:會展示容器啟動的日志信息-----
后臺啟動:不會展示啟動日志信息

8080:80 8080 虛擬機本地端口 ---瀏覽器訪問 80 容器內部端口
Elk+kafka---
systemctl stop firewalld

安裝MySQL5.7
1.查詢mysql版本
docker search mysql
2.下載MySQL5.7版本
docker pull mysql:5.7 (這里選擇的是第一個mysql鏡像匕累, :5.7選擇的5.7版本)
3.等待下載完成、創(chuàng)建MySQL容器
docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7
創(chuàng)建容器名稱為mysql3308丈攒,密碼為root

  1. 啟動容器
    docker start mysql3308
  2. 進入到容器
    docker exec -it mysql3308 bash
  3. mysql連接
    mysql -uroot –p
    Docker運行底層原理
  4. 首先啟動docker systemctl start docker
  5. Docker是一個CS架構的系統(tǒng)哩罪,docker守護進程運行在主機上,讓后通過socket連接
    從客戶端訪問巡验,守護進程從客戶端接收命令管理運行在主機上的容器际插。
    ps aux | grep 'docker'

網站“bs”CS
數據卷volumes-from
容器間傳遞共享數據volumes-from

啟動容器報錯了如何解決?
先改為前臺啟動如果沒有問題的情況下显设,在修改為后臺啟動框弛。
容器與容器局域網

DockerFile 解析

一個鏡像文件到底是如何創(chuàng)建?

  1. dockerfile 描述出鏡像文件需要的一些依賴配置和環(huán)境變量 執(zhí)行命令
  2. 將我們dockerfile 文件打包成一個鏡像文件
  3. 直接使用我們的容器運行到該鏡像文件捕捂。
  1. 需要手動編寫一個dockerfile文件
  2. 將該dockerfile docker build 自定義成一個鏡像文件
  3. docker run 運行容器

Centos鏡像文件
docker run -it centos

https://github.com/CentOS/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile

DockerFile編寫規(guī)范
A.#描述注釋
B.指令必須要大寫瑟枫,后面至少需要帶至少一個參數;
C.指令是按照從上到下斗搞,順序執(zhí)行;
DockerFile指令

  1. FROM 指定父鏡像: 基于哪個鏡像image構建 指定基礎鏡像慷妙,必須為第一個命令
  2. MAINTAINER :維護者
  3. RUN: 容器創(chuàng)建的時候執(zhí)行一段命令 構建鏡像時執(zhí)行的命令
  4. ADD: 將本地文件添加到容器中僻焚,tar類型文件會自動解壓(網絡壓縮資源不會被解壓),可以訪問網絡資源膝擂,類似wget
  5. COPY:功能類似ADD虑啤,但是是不會自動解壓文件,也不能訪問網絡資源
  6. CMD:構建容器后調用架馋,也就是在容器啟動時才進行調用狞山。 .sh執(zhí)行文件
  7. ENV: 設置環(huán)境變量
  8. EXPOSE: 指定于外界交互的端口
  9. VOLUME 用于指定持久化目錄
  10. WORKDIR 設置進入容器時的路徑 默認訪問的目錄
    Tomcat-----jdk環(huán)境

Tomcat docker File:
https://github.com/docker-library/tomcat/blob/385e8403a38fab7097d4c3fed2484caba7dfd099/8.5/jdk8/openjdk-slim-buster/Dockerfile

https://github.com/docker-library/redis/blob/231905d0841f52ee4f3a5b8b42d62cd6d14a1a93/6.2/Dock

進入tomcat 容器----/data
redis容器/data
/
DockerFile案例
Base鏡像(scratch) docker hub中的鏡像都是通過base鏡像中安裝和配置需要的軟件構建的。
構建自己centos鏡像
docker run -it centos

  1. 需求定制修改centos根目錄叉寂;
  2. 實現支持vim插件萍启;

yum -y install vim

  1. 需要自己制作一個dockerfile文件
  2. 繼承docker hub中的centos
  3. 在docker hubcentos 上加入以下兩個功能
    A.進入容器中 默認訪問目錄/usr
    B.實現支持vim插件

需要將該dockerfile文件打包成一個鏡像文件 交給我們容器執(zhí)行

https://github.com/CentOS/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile

定制CentOS鏡像
FROM centos
MAINTAINER mayikt-yushengjun
ENV MYPATH /usr
WORKDIR $MYPATH
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash

Dockerfile→使用docker 將該Dockerfile實現打包成鏡像文件→
容器運行該鏡像文件。

docker build---將該Dockerfile實現打包成鏡像文件

將該dockerfile文件上傳到linux服務器中
使用docker build -f Dockerfile -t mycs:1 .
Dockerfile ------配置文件
mycs----打包鏡像文件名稱
1 tag 版本號碼

docker run -it mycs:1
將springboot項目打包部署

  1. 基于docker原生方式 部署我們的springboot項目
    Dockerfile
    2.dockercompose----- 容器編排技術

springboot項目----變成鏡像文件---容器運行

  1. 將我們springboot項目---打成一個jar包

2.定義dockerfile文件-----描述出springboot項目 配置依賴和環(huán)境變量
JDK
注意:springboot內置嵌入我們的tomcat服務器 所以不需要額外的tomcat容器來
運行屏鳍。
原生方式運行我們的jar包
Java- jar指令

  1. 需要先將我們外部jar勘纯,拷貝到容器中
  2. 容器運行成功執(zhí)行java -jar
    2.將該dockerfile文件打包成鏡像文件-
  1. 將springboot項目打包;

  2. 制作dockerfile文件钓瞭;
    A. 繼承我們的jdk環(huán)境
    B. 將我們本地的jar包拷貝到容器中
    C. Java -jar

  3. 將dockerfile文件打包成鏡像文件屡律;

  4. 運行該鏡像文件即可;

將springboot項目打包
mvn clean package
制作dockerfile文件

基礎鏡像使用java

FROM java:8

作者

MAINTAINER www.mayikt.com

VOLUME 指定了臨時文件目錄為/tmp降淮。

其效果是在主機 /var/lib/docker 目錄下創(chuàng)建了一個臨時文件,并鏈接到容器的/tmp

VOLUME /tmp

將jar包添加到容器中并更名為mayikt.jar

ADD mayikt-thymeleaf-1.0-SNAPSHOT.jar mayikt.jar

運行jar包

RUN bash -c 'touch /mayikt.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/mayikt.jar"]

暴露8080端口

EXPOSE 8080

打包成鏡像文件
docker build -f Dockerfile -t mayikt-member:1 .
docker build -f Dockerfile -t mayikt-member:1 .
啟動容器
docker run -p 8070:8080 mayikt-member:1

訪問測試

Docker Compose

Sit pre prd環(huán)境
為什么需要使用Docker Compose
Docker Compose 容器編排技術

容器編排技術

1.現在我們有一個springboot項目搏讶,需要依賴Redis佳鳖、mysql5.7、nginx媒惕。
如果使用docker原生部署的話系吩,則需要安裝Redis、mysql5妒蔚、nginx容器穿挨,在才可以啟動我們springboot項目,這樣的話部署項目的流程非常復雜肴盏,所以需要引入我們的
Docker compose實現容器編排技術科盛。

基本的概念
Docker-Compose項目是Docker官方的開源項目,負責實現對Docker容器集群的快速編排菜皂。
Docker-Compose將所管理的容器分為三層贞绵,分別是工程(project),服務(service)以及容器(container)恍飘。
開發(fā)一個springboot項目---大工程

  1. 依賴mysql
  2. 依賴redis
  3. 依賴zk
    等榨崩。
    需要在docker-compose.yml 配置項目工程依賴環(huán)境配置

Docker-Compose運行目錄下的所有文件(docker-compose.yml谴垫,extends文件或環(huán)境變量文件等)組成一個工程,若無特殊指定工程名即為當前目錄名母蛛。一個工程當中可包含多個服務翩剪,每個服務中定義了容器運行的鏡像,參數彩郊,依賴前弯。一個服務當中可包括多個容器實例,Docker-Compose并沒有解決負載均衡的問題焦辅,因此需要借助其它工具實現服務發(fā)現及負載均衡博杖。

Docker-Compose的工程配置文件默認為docker-compose.yml,可通過環(huán)境變量COMPOSE_FILE或-f參數自定義配置文件筷登,其定義了多個有依賴關系的服務及每個服務運行的容器剃根。

Compose 中有兩個重要的概念:

服務 (service) :一個應用的容器,實際上可以包括若干運行相同鏡像的容器實例前方。
項目 (project) :由一組關聯的應用容器組成的一個完整業(yè)務單元狈醉,在 docker-compose.yml 文件中定義。
一個項目可以由多個服務(容器)關聯而成惠险,Compose 面向項目進行管理苗傅,通過子命令對項目中的一組容器進行便捷地生命周期管理。

Compose 項目由 Python 編寫班巩,實現上調用了 Docker 服務提供的 API 來對容器進行管理渣慕。因此,只要所操作的平臺支持 Docker API抱慌,就可以在其上利用 Compose 來進行編排管理逊桦。

Docker-Compose分成三層
1.項目層 springboot項目依賴于我們的mysql redis、nginx等 一個項目是由多個容器組成的抑进。
2.服務層 運行一個鏡像的實例 ---

Compose環(huán)境安裝(離線安裝)

  1. 訪問docker compose github 官網
  1. docker-compose-Linux-x86_64 上傳到服務器中强经,然后執(zhí)行如下命令將其移動到/usr/local/bin/目錄中 并且更名為docker-compose
    mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
  2. 執(zhí)行如下命令:添加可執(zhí)行的權限
    sudo chmod +x /usr/local/bin/docker-compose
  3. 驗證docker-compose
    docker-compose -v

Compose常用命令
docker-compose -h # 查看幫助

docker-compose up # 創(chuàng)建并運行所有容器
docker-compose up -d # 創(chuàng)建并后臺運行所有容器
docker-compose -f docker-compose.yml up -d # 指定模板
docker-compose down # 停止并刪除容器、網絡寺渗、卷匿情、鏡像。

docker-compose logs # 查看容器輸出日志
docker-compose pull # 拉取依賴鏡像
dokcer-compose config # 檢查配置
dokcer-compose config -q # 檢查配置信殊,有問題才有輸出

docker-compose restart # 重啟服務
docker-compose start # 啟動服務
docker-compose stop # 停止服務

Compose入門案例

流程:

  1. 需要定義一個docker-compose.yml文件----工程
  2. 需要在docker-compose文件配置依賴服務
  3. docker-compose up 執(zhí)行該文件
  1. 創(chuàng)建一個docker-compose.yml炬称;
  2. 定制docker-compose 內容;
  3. 運行 docker-compose up 涡拘;

version: '3.0'
services:
tomcat: ##服務名稱
image: tomcat:8 #鏡像文件名稱
ports:
- 8080:8080

Compose模板文件
version: '3.0'
services:
tomcat80: ##服務名稱
#container_name: tomcat8080 指定容器名稱
image: tomcat:8 #鏡像文件名稱 run images
ports: ###端口號的映射 -p
- 8080:8080
volumes: ## 數據源 宿主機與容器數據共享 -v
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks: ###定義網絡的橋
- mayikt

tomcat81: ##服務名稱
#container_name: tomcat8080 指定容器名稱
image: tomcat:8 #鏡像文件名稱
ports: ###端口號的映射
- 8081:8080
volumes: ## 數據源 宿主機與容器數據共享
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks:
- mayikt
networks: ## 定義服務的橋
mayikt:

Compose常用命令

docker-compose ps 列出項目中所有的容器
docker-compose stop 停止docker-compose
docker-compose logs 查看容器中日志信息
docker-compose pull 拉取服務依賴的鏡像

Compose常用配置

Image 鏡像名稱转砖;
Build 根據docker file 打包 成鏡像;
Context 指定docker file文件位置;
Commond 使用command可以覆蓋容器啟動后默認執(zhí)行的命令府蔗;
Container_name 容器名稱晋控;
depends_on 指定依賴那個服務;
Ports 映射的端口號姓赤;
extra_hosts 會在/etc/hosts文件中添加一些記錄赡译;
Volumes 持久化目錄;
volumes_from 從另外一個容器掛在數據卷不铆;
Dns 設置dns

Compose部署springboot項目
定義Compose文件
version: "3.0"
services:
mysql: # mysql服務
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password #解決外部無法訪問
ports:
- "3306:3306" #容器端口映射到宿主機的端口
environment:
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'mayikt'
MYSQL_USER: 'mayikt'
MYSQL_PASSWORD: 'mayikt'
networks:
- mayikt_web
mayikt-web: #自己單獨的springboot項目
hostname: mayikt
build: ./ #需要構建的Dockerfile文件
ports:
- "38000:8080" #容器端口映射到宿主機的端口
depends_on: #web服務依賴mysql服務蝌焚,要等mysql服務先啟動
- mysql
networks:
- mayikt_web
networks: ## 定義服務的橋
mayikt_web:

Spring項目配置
spring:
profiles:
active: prd
datasource:
url: jdbc:mysql://mysql:3306/mayikt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
server:

端口號

port: 8080
servlet:
##設置springboot項目訪問路徑
context-path: /mayikt

演示效果
http://192.168.163.129:38000/mayikt/insertUser?userName=mayikt&userAge=22

Docker可視化工具使用
Portainer
Portainer是一款Docker可視化管理工具,允許我們在網頁中方便的查看和管理Docker容器誓斥。
要使用Portainer很簡單只洒,運行下面兩條命令即可。這些命令會創(chuàng)建一個Portainer專用的卷劳坑,然后在8000和9000端口創(chuàng)建容器并運行毕谴。

啟動:
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

CentOS Docker 安裝
docker rm (docker ps -aq) docker stop(docker ps -q) & docker rm (docker ps -aq) ---刪除所有的容器 docker rmi(docker images -q)
docker network ls
Linux關閉防火墻命令
systemctl stop firewalld

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市距芬,隨后出現的幾起案子涝开,更是在濱河造成了極大的恐慌,老刑警劉巖框仔,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舀武,死亡現場離奇詭異,居然都是意外死亡离斩,警方通過查閱死者的電腦和手機银舱,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跛梗,“玉大人纵朋,你說我怎么就攤上這事∏研洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵嘁锯,是天一觀的道長宪祥。 經常有香客問我,道長家乘,這世上最難降的妖魔是什么蝗羊? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仁锯,結果婚禮上耀找,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好野芒,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布蓄愁。 她就那樣靜靜地躺著,像睡著了一般狞悲。 火紅的嫁衣襯著肌膚如雪撮抓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天摇锋,我揣著相機與錄音丹拯,去河邊找鬼。 笑死荸恕,一個胖子當著我的面吹牛乖酬,可吹牛的內容都是我干的。 我是一名探鬼主播融求,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咬像,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了双肤?” 一聲冷哼從身側響起施掏,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茅糜,沒想到半個月后七芭,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蔑赘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年狸驳,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩赛。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耙箍,死狀恐怖,靈堂內的尸體忽然破棺而出酥馍,到底是詐尸還是另有隱情辩昆,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布旨袒,位于F島的核電站汁针,受9級特大地震影響,放射性物質發(fā)生泄漏砚尽。R本人自食惡果不足惜施无,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望必孤。 院中可真熱鬧猾骡,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至襟企,卻和暖如春嘱么,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顽悼。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工曼振, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔚龙。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓冰评,卻偏偏與公主長得像,于是被迫代替她去往敵國和親木羹。 傳聞我的和親對象是個殘疾皇子甲雅,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容

  • 1.Docker基礎簡介 開源容器引擎,go語言編寫坑填,遵循apache2.0協議開源 Docker是微服務階段產物...
    hadoop_a9bb閱讀 1,056評論 0 0
  • Docker應用容器 1. 初識 Docker 我們寫的代碼會接觸到好幾個環(huán)境:開發(fā)環(huán)境抛人、測試環(huán)境以及生產環(huán)境。 ...
    itlu閱讀 312評論 0 5
  • 轉載自:黑馬程序員java課程 一脐瑰、系統(tǒng)發(fā)展趨勢:實體機——>虛擬機-——>容器 二妖枚、Docker簡介 1. Do...
    ThompsonHen閱讀 273評論 0 0
  • 一篇文章學會docker docker安裝 docker在線安裝 1.更新yum到最新 2.卸載舊版本 3.安裝需...
    饒一熊閱讀 763評論 0 1
  • Docker 容器本質上是宿主機上的一個進程。Docker 通過 namespace 實現了資源隔離苍在,通過 cgr...
    Linux丶晨星閱讀 8,119評論 1 5