docker和docker compose安裝使用、入門進階案例

一、前言

現在可謂是容器化的時代,雲原生的襲來,導致go的崛起,作為一名java開發,現在慌得一批。作為知識儲備,小編也是一直學關於docker的東西,還有一些持續繼承jenkins
提到docker,大家都知道,以前需要在linux中安裝的,現在只需要pull下來鏡像,然後運行就可以直接使用了!非常的乾淨又衛生,但是想想我們一個web應用,是需要mysql、redis、mq等很多個應用組成的,我們使用了docker,就需要一個個的運行,很是麻煩,而且還需要給他們建立一個網橋,因為容器之間是相互隔離的!

當微面臨微服務時,比如有20個微服務項目,並且相互之間有依賴關係。
Docker Compose 來輕鬆高效的管理容器,定義運行多個容器。
這是一個偉大工具插件docker compose來了~

今天就帶大家一起安裝,然後運行,跑一個demo,體驗一下docker compose的快捷之處!

二、安裝docker

安裝Docker

三、Docker Compose 概述

Compose 是一個用於定義和運行多容器 Docker 應用程式的工具。使用 Compose,您可以使用 YAML 文件來配置應用程式的服務。然後,使用一個命令,您可以從您的配置中創建並啟動所有服務。

Compose 適用於所有環境:生產、登台、開發、測試以及 CI 工作流程。

使用 Compose 基本上是一個三步過程:

使用定義您的應用程式的環境,Dockerfile以便可以在任何地方複製它。

定義構成您的應用程式的服務,docker-compose.yml以便它們可以在隔離環境中一起運行。

運行docker compose up,Docker compose 命令啟動並運行您的整個應用程式。您也可以docker-compose up使用 docker-compose 二進位文件運行。

三、安裝docker compose

之前看好多文章都是兩年前的安裝方式,現在小編進去官網已經變了,更加簡單!我們先進入官網,一切以官網為準,任何教學都是來自於官網的教程!

docker compose官網安裝地址

我們直接根據這個安裝即可!
我們看到apt-get命令不是CentOS的命令而是(Debian/Ubuntu)的命令,我們使用CentOSyum進行安裝即可。

在這裡插入圖片描述
輸入:

yum install docker-compose-plugin

在這裡插入圖片描述
我們查看docker compose的版本,是否安裝成功:

docker compose version

在這裡插入圖片描述

鐺鐺鐺,安裝完成,下面我們進行官網例子實戰!!

四、入門案例體驗

入門案例官網網址

1. 創建文件

創建一個文件夾來存放這次案例的文件,並切換到此文件夾下:

mkdir composetest
cd composetest/
pwd

在這裡插入圖片描述

2. 創建python程式

創建一個app.py的文件

vim app.py

添加以下內容:

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

輸入i,粘貼進行,按下Esc,輸入:wq保存並退出!
在這裡插入圖片描述
細節分析:
我們看到腳本的第五行,cache = redis.Redis(host='redis', port=6379)
redis是應用程式網路上的 redis 容器的主機名。本來是host是指向ip的,現在我們交給docker compose,他會幫我們維護一個網路(後面我們在查看),實現容器名稱之間的調用,就像我們微服務之間使用nacos作為註冊中心,各個服務的調用使用服務名稱進行調用即可,這樣更加靈活,切換主機ip,不影響各個應用之間的調用。

3. 創建requirements.txt文件

vim requirements.txt
flask
redis

這裡一個python需要的框架,還有一個就是實現計數的redis服務,創建文件的目的是為了方便書寫docker-compose.yml,裡面可以直接引用此文件!

輸入i,粘貼,按下Esc,輸入:wq保存並退出!

在這裡插入圖片描述

4. 創建 Dockerfile

vim Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

命令解釋:

從 Python 3.7 映像開始構建映像
將工作目錄設置為/code
設置命令使用的環境變數flask
安裝 gcc 和其他依賴項
複製requirements.txt並安裝 Python 依賴項
向鏡像添加元數據以描述容器正在偵聽埠 5000
將項目中的當前目錄複製.到鏡像中的workdir
將容器的默認命令設置為flask run


輸入i,粘貼,按下Esc,輸入:wq保存並退出!

在這裡插入圖片描述

5. 編寫docker-compose.yml

vim docker-compose.yml
version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

這個 Compose 文件定義了兩個服務:web和redis.

web服務:

該服務使用從當前目錄中web構建的影像,build: .是使用Dockerfile構建出來鏡像,然後它將容器和主機綁定到暴露的埠:8000.。此示例服務使用 Flask Web 伺服器的默認埠,5000。

redis服務:
該redis服務使用 從 Docker Hub 註冊表中提取的公共Redis映像。

這裡為我們展示了docker-compose.yml中管理的鏡像的兩種方式,一個是使用Dockerfile進行構建鏡像,一個是通過Docker Hub直接拉去鏡像。

在這裡插入圖片描述

6. 構建並運行

我們看到官網的命令提供的運行命令是:docker-compose up,小編試了一下沒有此命令,小編試了一下這個命令就可以了。

在這裡插入圖片描述

docker compose up

這裡雲先拉去redis鏡像,然後使用Dockerfile進行構建鏡像!

在這裡插入圖片描述
小細節:

這裡就是小編前面說的,會幫我們維護一個網路,就可以進行容器之間的調用了 !我們還可以發現,容器的名字是文件夾的名稱-yml文件里服務名稱-副本數量,不難想像最後的副本數量肯定是為了集群準備的哈!

在這裡插入圖片描述

停止應用程式:
方法是docker compose down 在第二個終端的項目目錄中運行,或者在啟動應用程式的原始終端中按 CTRL+C。

7. 訪問測試

輸入://192.168.84.135:8000/

每次刷新斗湖加1,使用redis實現的計數器!

在這裡插入圖片描述

8. 查看運行的容器

docker ps

在這裡插入圖片描述

9. 編輯docker-compose.yml添加綁定掛載

vim docker-compose.yml

覆蓋原來的內容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

小提醒:

volumes密鑰將主機上的項目目錄(當前目錄)掛載到/code容器內,允許您即時修改程式碼,而無需重建映像environment鍵設置 FLASK_ENV環境變數,它告訴flask run在開發模式下運行並在更改時重新載入程式碼。這種模式應該只在開發中使用

在這裡插入圖片描述
我們查看掛載在linux上的文件:
在這裡插入圖片描述

10. 重新構建

docker compose up

在這裡插入圖片描述

11. 重新訪問

輸入://192.168.84.135:8000/
在這裡插入圖片描述

12. 修改app.py文件

由於應用程式程式碼現在使用安裝到容器中,因此您可以對其程式碼進行更改並立即查看更改,而無需重建鏡像

vim app.py

修改最後一行為:

return '我修改了哦! I have been seen {} times.\n'.format(count)

在這裡插入圖片描述

重新刷新頁面:

這裡就實現了測試版本的熱部署
在這裡插入圖片描述

13. 以後台的方式構建

我們剛剛看到了剛剛的運行,我們是無法在使用其他命令了,這時就可以使用以後台的形式運行就不耽誤我們使用其他命令了!

以後台形式構建運行:

docker compose up -d

查看正在運行的鏡像:

docker compose ps

在這裡插入圖片描述
瀏覽器訪問正常:
在這裡插入圖片描述

五、進階案例WordPress

官網進階案例地址

1. 創建新文件夾

mkdir my_wordpress
cd my_wordpress

2. 編寫docker-compose.yml

vim docker-compose.yml
version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

docker卷db_data掛載到wordpress_data持久化 WordPress 對資料庫的更新。
在這裡插入圖片描述

3. 構建項目

先停止剛剛的構建的容器:

docker stop 容器id
docker compose up -d

在這裡插入圖片描述

4. 測試訪問

輸入:192.168.84.135:8000/

在這裡插入圖片描述
後面就不帶大家操作了,小編有篇文章專門寫使用和優化Wordpress的文章,大家喜歡可以看一下哦 !

5分鐘搭建wordpress個人部落格網站 附贈主題和md插件

六、總結

這樣我們對docker compose 有了一定的了解了吧,文章的目的主要為了記錄一下自己跟著官網是否成功,還有就是有一些童鞋不喜歡看,還有就是看不太明白的童鞋提供一些幫助!

一句話送給大家:還是以官網為主,有的教學是以前的版本,你進去官網你會發現很多已經更新,或者有更好的方式了,所以還是要看官網!!

看到這裡了還不給小編一鍵三連起來,有點對不起小編了 !!


有緣人才可以看得到的哦!!!

點擊訪問!小編自己的網站,裡面也是有很多好的文章哦!