docker和docker compose安裝使用、入門進階案例
- 2022 年 6 月 16 日
- 筆記
- 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 Compose 概述
Compose 是一個用於定義和運行多容器 Docker 應用程式的工具。使用 Compose,您可以使用 YAML 文件來配置應用程式的服務。然後,使用一個命令,您可以從您的配置中創建並啟動所有服務。
Compose 適用於所有環境:生產、登台、開發、測試以及 CI 工作流程。
使用 Compose 基本上是一個三步過程:
使用定義您的應用程式的環境,Dockerfile
以便可以在任何地方複製它。
定義構成您的應用程式的服務,docker-compose.yml
以便它們可以在隔離環境中一起運行。
運行docker compose up
,Docker compose 命令啟動並運行您的整個應用程式。您也可以docker-compose up使用 docker-compose 二進位文件運行。
三、安裝docker compose
之前看好多文章都是兩年前的安裝方式,現在小編進去官網已經變了,更加簡單!我們先進入官網,一切以官網為準,任何教學都是來自於官網的教程!
我們直接根據這個安裝即可!
我們看到apt-get
命令不是CentOS
的命令而是(Debian/Ubuntu)
的命令,我們使用CentOS
的yum
進行安裝即可。
輸入:
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
有了一定的了解了吧,文章的目的主要為了記錄一下自己跟著官網是否成功,還有就是有一些童鞋不喜歡看,還有就是看不太明白的童鞋提供一些幫助!
一句話送給大家:還是以官網為主,有的教學是以前的版本,你進去官網你會發現很多已經更新,或者有更好的方式了,所以還是要看官網!!
看到這裡了還不給小編一鍵三連起來,有點對不起小編了 !!
有緣人才可以看得到的哦!!!