05_應(yīng)用容器-Docker

1.初始Docker

1.1.引入

正常情況
圖片.png

異常情況:開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境jdk版本不同即環(huán)境不同,導(dǎo)致代碼出錯(cuò)
圖片.png
解決方式:war包和環(huán)境一起打包放在一個(gè)容器,給測(cè)試,給生產(chǎn)
圖片.png
這個(gè)docker就是這個(gè)容器

1.2.概念

圖片.png

1.3.安裝docker

圖片.png
# 1矾端、yum 包更新到最新 
yum update
# 2、安裝需要的軟件包卵皂, yum-util 提供yum-config-manager功能秩铆,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 設(shè)置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4灯变、 安裝docker殴玛,出現(xiàn)輸入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本添祸,驗(yàn)證是否驗(yàn)證成功
docker -v
  • yum install -y docker-ce執(zhí)行此命令可能會(huì)安裝失敗滚粟,再次安裝即可

1.4.Docker架構(gòu)

圖片.png

安裝完docker,他會(huì)以守護(hù)進(jìn)程(daemon后臺(tái)運(yùn)行)的形式存在,docker內(nèi)部有兩個(gè)東西:鏡像和容器膝捞。鏡像是類坦刀,容器是實(shí)例,host里的鏡像來(lái)源于遠(yuǎn)程的倉(cāng)庫(kù)蔬咬,倉(cāng)庫(kù)分為官方倉(cāng)庫(kù)和私有倉(cāng)庫(kù)鲤遥。客戶端發(fā)送命令給守護(hù)進(jìn)程林艘。來(lái)進(jìn)行操作盖奈。

1.5.配置鏡像加速器

圖片.png
image.png
圖片.png
  • 復(fù)制所有命令并執(zhí)行
  • 阿里云需要登錄,每個(gè)人的地址不一樣 配置完執(zhí)行cat /etc/docker/daemon.json查看內(nèi)容

2.Docker命令

2.1.服務(wù)相關(guān)命令(守護(hù)進(jìn)程相關(guān)命令)

圖片.png

2.2.操作鏡像

  • 查看鏡像(本地)
    image.png
  • 搜索鏡像(遠(yuǎn)程倉(cāng)庫(kù))
    image.png
  • 拉取鏡像(遠(yuǎn)程倉(cāng)庫(kù))不指定版本狐援,默認(rèn)下最新的版本
    image.png
    如果要查看版本需要去https://hub.docker.com/
    image.png
  • 刪除鏡像(本地)
    image.png

    如果 id重復(fù)就會(huì)報(bào)錯(cuò)钢坦,可以通過(guò)名稱加版本進(jìn)行刪除 docker rmi redis:latest

  • 查詢所有鏡像的id究孕。docker images -q
  • 刪除所有的鏡像docker rmi `docker images -q`
  • 總結(jié)
    image.png

2.3.操作容器(最重要)

image.png

容器是由鏡像這個(gè)物理文件運(yùn)行起來(lái)的實(shí)例

  • 創(chuàng)建并進(jìn)入容器
    image.png

    -i表示容器一直運(yùn)行 -t表示給容器分配一個(gè)偽終端(輸入完該指令立刻進(jìn)入容器) --name給容器起個(gè)名字 指定鏡像以及版本 /bin/bash進(jìn)入容器的初始化指令

  • --name=c1 --name c1 等號(hào)空格都可以
  • 退出容器 exit
  • 查看容器(正在運(yùn)行以及歷史運(yùn)行的記錄)
    image.png
  • 創(chuàng)建容器不進(jìn)入,后臺(tái)運(yùn)行
    image.png

    -d 后臺(tái)運(yùn)行 不進(jìn)入不需要寫/bin/bash

  • 查看容器
    image.png
  • 進(jìn)入容器
    image.png
  • 通過(guò)-id方式創(chuàng)建容器 通過(guò)exec進(jìn)入容器爹凹,這種方式退出exit厨诸,容器不會(huì)關(guān)閉
  • 小結(jié)
    image.png

    進(jìn)入容器可以加/bin/bash,可以不加禾酱,不加默認(rèn)也是此

  • 啟動(dòng)容器 docker start c4
  • 關(guān)閉容器 docker stop c4
  • 刪除容器 docker rm c4 (也可以加容器的id)
  • 刪除容器 docker rm c1 c2 c3 c4
  • 刪除所有容器 docker rm docker ps -aq 不能包含正在運(yùn)行的容器
  • 查看容器信息 docker inspect c4
  • 小結(jié)
    image.png

3.Docker容器數(shù)據(jù)卷

3.1.數(shù)據(jù)卷概念及作用

image.png
image.png
image.png

3.2.配置數(shù)據(jù)卷

image.png
  • docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
  • 容器中的/root/data目錄下touch a.txt 宿主機(jī)對(duì)應(yīng)目錄也可以看到該文件
  • echo hello > a.txt 無(wú)論在哪個(gè)目錄下的文檔輸入文字 另一個(gè)目錄下文檔都可以查看到內(nèi)容
  • cat a.txt
  • docker中關(guān)閉 刪除容器微酬,宿主機(jī)目錄和內(nèi)容都存在的
  • 再次掛載宿主機(jī)數(shù)據(jù)卷docker run -it --name=c1 -v ~/data:/root/data_container centos:7
  • 一個(gè)容器掛載多個(gè)目錄docker run -it --name=c2 -v ~/data2:/root/data2 -v ~/data3:/root/data3 centos:7
    圖片.png
  • 兩個(gè)容器掛載同一個(gè)數(shù)據(jù)卷docker run -it --name c3 -v ~/data:/root/data centos:7 docker run -it --name c4 -v ~/data:/root/data centos:7
  • 在一個(gè)容器的data目錄下創(chuàng)建目錄 另一個(gè)容器的data目錄下能看到目錄

3.3.配置數(shù)據(jù)卷容器

圖片.png

c3掛載了一個(gè)數(shù)據(jù)卷,c1 c2分別掛載到c3上 颤陶,相當(dāng)于c1 c2 c3掛載到同一個(gè)數(shù)據(jù)卷 c1 c2 c3可以進(jìn)行數(shù)據(jù)傳輸和通信 即使c3掛了 c1c2仍然可以通過(guò)數(shù)據(jù)卷通信
圖片.png
  • 查看容器綁定目錄情況 docker inspect c1
    圖片.png
    圖片.png

    /volume是容器目錄颗管,相當(dāng)于宿主機(jī)目錄沒(méi)有寫,docker會(huì)自動(dòng)分配
    圖片.png
    docker run -it --name c1 --volumes-from c3 centos:7執(zhí)行 c1有volume目錄
    圖片.png
    查看c1滓走,發(fā)現(xiàn)c1綁定的數(shù)據(jù)卷就是c3綁定的數(shù)據(jù)卷

3.4.小結(jié)

圖片.png

4.Docker應(yīng)用部署

4.1.MySQL部署

圖片.png
圖片.png
docker search mysql
docker pull mysql:5.6
cd /opt
mkdir mysql
cd mysql

docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
圖片.png
  • 進(jìn)入容器docker exec -it c_mysql /bin/bash 輸入用戶名 密碼 就可以輸入sql語(yǔ)句了


    圖片.png
    圖片.png

4.2.Tomcat部署

圖片.png
docker search tomcat
docker pull tomcat
mkdir /opt/tomcat
cd /opt/tomcat

docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat 

圖片.png
圖片.png
手動(dòng)創(chuàng)建一個(gè)項(xiàng)目垦江,編寫一個(gè)html,瀏覽器訪問(wèn)http://116.62.133.122:8080/test/index.html

4.3.Nginx部署

圖片.png
mkdir /opt/nginx
cd  /opt/nginx
mkdir conf
cd conf
vim nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

docker search nginx
docker pull nginx

啟動(dòng)ngnix 在/opt/nginx啟動(dòng)
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
圖片.png

編寫html 直接訪問(wèn)http://116.62.133.122/

4.4.Redis部署

圖片.png
圖片.png
圖片.png

5.Dockerfile

5.1.Docker鏡像原理

圖片.png
圖片.png
圖片.png
  • docker啟動(dòng)非常快的原因是docker用的宿主機(jī)的內(nèi)核(bootfs)
  • 自己開(kāi)linux系統(tǒng)就很慢搅方,創(chuàng)建centos容器快比吭,安裝centos系統(tǒng)慢,docker做了一個(gè)復(fù)用腰懂。
  • linux系統(tǒng)裝一個(gè)windows的docker是不行的梗逮,因?yàn)閮?nèi)核不一樣,不能復(fù)用绣溜。
  • 下載tomcat鏡像,首先看有沒(méi)有jdk鏡像娄蔼,沒(méi)有的話先下載jdk,jdk又依賴基礎(chǔ)鏡像怖喻,還需要下基礎(chǔ)鏡像,這三個(gè)組合起來(lái)稱為tomcat鏡像岁诉,對(duì)外暴露的tomcat鏡像
  • 文件疊加的好處:如果再下載centos鏡像锚沸,他也依賴基礎(chǔ)鏡像,如果基礎(chǔ)鏡像docker有涕癣,就不用下載了哗蜈,可以復(fù)用
  • 疊加的操作叫統(tǒng)一文件系統(tǒng)
  • 只讀意思不能改,改了別人就沒(méi)法復(fù)用了


    圖片.png
    圖片.png

    下載的時(shí)候可以看到一層一層下載
    圖片.png
    下載完 看詳細(xì)信息也可以看到分層的信息docker inspect tomcat:latest

5.2.Docker鏡像制作

圖片.png
  • 容器改了一點(diǎn)東西坠韩,可以轉(zhuǎn)換成新的鏡像距潘,期望改的東西傳給其他人(tomcat部署了應(yīng)用)
  • 新的鏡像如何傳給別人(測(cè)試人員),需要壓縮只搁,壓縮文件可以傳輸
  • 測(cè)試人員把壓縮文件還原成鏡像音比,運(yùn)行即可
  • docker里面的id使用的時(shí)候不用復(fù)制全,復(fù)制前幾位不重復(fù)即可
  • 容器目錄掛載的東西(比如 tomcat下 webapps目錄有個(gè)項(xiàng)目test)氢惋,轉(zhuǎn)鏡像的時(shí)候不會(huì)寫入,通過(guò)數(shù)據(jù)卷的方式傳入的東西commit不會(huì)寫入
  • 容器處理掛載的東西洞翩,其他目錄新建的文件在轉(zhuǎn)鏡像的時(shí)候稽犁,會(huì)寫入鏡像
docker ps -a
docker commit 1f04cab bj_tomcat:1.0
docker rmi 0c943f

進(jìn)入容器 在root目錄新建文件
docker exec -it c_tomcat bash
cd ~
touch b.txt

docker save -o bj_tomcat.tar bj_tomcat:1.0
當(dāng)前目錄 會(huì)有一個(gè)tar文件
刪除鏡像 然后把tar文件還原成鏡像
docker load -i bj_tomcat.tar 

5.3.Dockerfile概念及作用

圖片.png

5.4.Dockerfile關(guān)鍵字

圖片.png
圖片.png

5.5.Docker案例1

圖片.png

看一下別人寫好的鏡像創(chuàng)建容器啥樣的
圖片.png
圖片.png
mkdir docker-files
cd docker-files/
vim centos_dockerfile

FROM centos:7
MAINTAINER bj<bj910521@163.com>

RUN yum install -y vim
WORKDIR /usr

cmd /bin/bash

docker build -f ./centos_dockerfile  -t bj_centos:1 .
圖片.png
圖片.png

每一條指令構(gòu)建一層
圖片.png

5.6.Docker案例2

圖片.png
  • 把springboot打成jar包,cmd運(yùn)行java -jar ./springboot-hello-0.0.1-SNAPSHOT.jar
  • put F:\BaiduNetdiskDownload\5.階段五-流行框架\6.docker\代碼\springboot-hello-0.0.1-SNAPSHOT.jar
  • mv springboot-hello-0.0.1-SNAPSHOT.jar docker-files/
  • docker pull java:8 依賴的父鏡像骚亿,可以提前下已亥,也可以不下,如果機(jī)器沒(méi)有會(huì)自動(dòng)下的
FROM java:8
MAINTAINER bj<bj910521@163.com>

ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar
  • docker build -f ./springboot_dockerfile -t app .
  • docker run -id -p9000:8080 app 因?yàn)橹灰\(yùn)行 無(wú)需進(jìn)入 所以不起名字 系統(tǒng)默認(rèn)分配 端口要映射
  • http://116.62.133.122:9000/hello

6.Docker服務(wù)編排

6.1.服務(wù)編排概念

圖片.png

6.2.Docker Compose概述

圖片.png

6.3.案例

# Compose目前已經(jīng)完全支持Linux来屠、Mac OS和Windows虑椎,在我們安裝Compose之前,需要先安裝Docker的妖。下面我 們以編譯好的二進(jìn)制包方式安裝在Linux系統(tǒng)中绣檬。 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 設(shè)置文件可執(zhí)行權(quán)限 
chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version
# 二進(jìn)制包方式安裝的,刪除二進(jìn)制文件即可
rm /usr/local/bin/docker-compose

使用docker compose編排nginx+springboot項(xiàng)目

mkdir ~/docker-compose
cd ~/docker-compose
#編寫 docker-compose.yml 文件
version: '3'
services:
  nginx:
   image: nginx
   ports:
    - 80:80
   links:
    - app
   volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d
  app:
    image: app
    expose:
      - "8080"
#創(chuàng)建./nginx/conf.d目錄
mkdir -p ./nginx/conf.d
#在./nginx/conf.d目錄下 編寫itheima.conf文件
server {
    listen 80;
    access_log off;

    location / {
        proxy_pass http://app:8080;
    }
   
}
#在~/docker-compose 目錄下 使用docker-compose 啟動(dòng)容器
docker-compose up

7.Docker私有倉(cāng)庫(kù)

7.1.搭建私有倉(cāng)庫(kù)

# 1嫂粟、拉取私有倉(cāng)庫(kù)鏡像 
docker pull registry
# 2娇未、啟動(dòng)私有倉(cāng)庫(kù)容器 
docker run -id --name=registry -p 5000:5000 registry
# 3、打開(kāi)瀏覽器 輸入地址http://私有倉(cāng)庫(kù)服務(wù)器ip:5000/v2/_catalog星虹,看到{"repositories":[]} 表示私有倉(cāng)庫(kù) 搭建成功
# 4零抬、修改daemon.json   
vim /etc/docker/daemon.json    
# 在上述文件中添加一個(gè)key,保存退出宽涌。此步用于讓 docker 信任私有倉(cāng)庫(kù)地址平夜;注意將私有倉(cāng)庫(kù)服務(wù)器ip修改為自己私有倉(cāng)庫(kù)服務(wù)器真實(shí)ip 
{"insecure-registries":["私有倉(cāng)庫(kù)服務(wù)器ip:5000"]} 
# 5、重啟docker 服務(wù) 
systemctl restart docker
docker start registry
圖片.png

7.2.上傳鏡像到私有倉(cāng)庫(kù)

# 1卸亮、標(biāo)記鏡像為私有倉(cāng)庫(kù)的鏡像     
docker tag centos:7 私有倉(cāng)庫(kù)服務(wù)器IP:5000/centos:7
 
# 2忽妒、上傳標(biāo)記的鏡像     
docker push 私有倉(cāng)庫(kù)服務(wù)器IP:5000/centos:7
圖片.png

7.3.從私有倉(cāng)庫(kù)拉取鏡像

#拉取鏡像 
docker pull 私有倉(cāng)庫(kù)服務(wù)器ip:5000/centos:7

8.Docker相關(guān)概念

8.1.Docker容器虛擬化與傳統(tǒng)虛擬機(jī)比較

圖片.png
圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兼贸,隨后出現(xiàn)的幾起案子段直,更是在濱河造成了極大的恐慌,老刑警劉巖溶诞,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸯檬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡螺垢,警方通過(guò)查閱死者的電腦和手機(jī)喧务,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枉圃,“玉大人功茴,你說(shuō)我怎么就攤上這事⊙镀眩” “怎么了痊土?”我有些...
    開(kāi)封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)墨林。 經(jīng)常有香客問(wèn)我赁酝,道長(zhǎng)犯祠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任酌呆,我火速辦了婚禮衡载,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘隙袁。我一直安慰自己痰娱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布菩收。 她就那樣靜靜地躺著梨睁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娜饵。 梳的紋絲不亂的頭發(fā)上坡贺,一...
    開(kāi)封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音箱舞,去河邊找鬼遍坟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晴股,可吹牛的內(nèi)容都是我干的愿伴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼电湘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼隔节!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起寂呛,我...
    開(kāi)封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤官帘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后昧谊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酗捌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年呢诬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖缤。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尚镰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哪廓,到底是詐尸還是另有隱情狗唉,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布涡真,位于F島的核電站分俯,受9級(jí)特大地震影響肾筐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缸剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一吗铐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杏节,春花似錦唬渗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嫉鲸,卻和暖如春撑蒜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背充坑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工减江, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捻爷。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓辈灼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親也榄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巡莹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容