接下來演示借助Docker Compose進(jìn)行多容器部署。 前邊的章節(jié)演示盡管可以實(shí)現(xiàn)需求功能,但是在生產(chǎn)環(huán)境當(dāng)中,維護(hù)起來顯然很麻煩,所以下邊演示借助Docker Compose功能,實(shí)現(xiàn)一鍵部署! 一個完整的項(xiàng)目需要多個容器(比如Web、Nginx、SqlServer、Mysql、Redis等)協(xié)調(diào)運(yùn)行相互支持,一個個的部署很顯然會很麻煩,而且還要為各個容器之間的網(wǎng)絡(luò)連接而苦惱。 還好,借助Docker Compose,我們可以編寫一個 第一步:安裝 Docker Compose 依次執(zhí)行以下命令:截止目前最新版本是 1.27.4 sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version 第二步:編輯 在服務(wù)器上的web應(yīng)用根目錄下新建一個 然后編寫如下內(nèi)容: version: external: image: /myapidemo: - - /root/apilogs/logs:/app/ - - - - /root/nginx/www:/usr/share/nginx/ - /root/nginx/conf.d/.conf:/etc/nginx/conf.d/ - /root/nginx/logs://log/ - /root/nginx/certs:/etc/nginx/ - image: mysql: - TZ: Asia/ - - command: redis-server --requirepass - test_network 代碼解釋:一份標(biāo)準(zhǔn)配置文件應(yīng)該包含 version、services、networks 三大部分,其中最關(guān)鍵的就是 services 和 networks 兩個部分,這是它基本結(jié)構(gòu) version: '3.8' 表示版本,截止目前最新是 3.8,可以參考文檔:https://docs./compose/compose-file/ services 節(jié)點(diǎn)下定義每個容器服務(wù),其中:myapidemo、nginxapi、mysql、redistest等表示容器名稱 image: 1312958948/myapidemo:1.1 指定鏡像名稱和tag版本,如果該鏡像不存在,則會自動拉取或創(chuàng)建鏡像;如果已經(jīng)存在則會直接使用 container_name: myapidemo 指定容器名 restart: always 表示關(guān)機(jī)或者重啟docker時,自動重啟容器 build: . 指定 Dockerfile 所在文件夾的路徑(點(diǎn) . 表示當(dāng)前目錄)。Compose 將會利用它自動構(gòu)建這個鏡像,然后使用這個鏡像啟動服務(wù)容器 ports: - "9020:5000" 端口 volumes: - /root/apilogs/logs:/app/logs 掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器,(例如:將/root/apilogs/logs目錄 映射到 容器內(nèi)的 /app/logs目錄) networks: - test_network 連接到自定義網(wǎng)橋 test_network 特別提醒:因?yàn)榍斑呎鹿?jié)我已經(jīng)提前創(chuàng)建好 test_network 網(wǎng)橋了,所以在這里直接使用,下邊這段話表示使用已存在的網(wǎng)橋 networks: test_network: external: true environment: 為容器設(shè)置環(huán)境變量,等同于 docker run -e MYSQL_ROOT_PASSWORD=Aa123456 (注意前邊沒有橫杠 -) environment: MYSQL_ROOT_PASSWORD: Aa123456 MYSQL_DATABASE: MyTest TZ: Asia/Shanghai command: redis-server --requirepass 123456 指定一個容器啟動后執(zhí)行的命令,例如:這里給 redis 設(shè)置密碼 其他還有很多,不依依舉栗了。 參考文檔: https://blog.csdn.net/zhiaini06/article/details/45287663 https://blog.csdn.net/qq_35720307/article/details/87256684 第三步:一鍵部署容器 使用以下命令創(chuàng)建并運(yùn)行容器, -d 表示后臺運(yùn)行 docker-compose up -d 如果鏡像都已經(jīng)存在,則會直接創(chuàng)建容器并運(yùn)行 如果鏡像不存在,則會嘗試?yán)』蚋鶕?jù) build指定的路徑尋找 Dockerfile文件自動創(chuàng)建 從提示可以看出,如果鏡像不存在則自動創(chuàng)建,否則需要調(diào)用 Successfully tagged 1312958948/myapidemo:1.1WARNING: Image for service myapidemo was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. 而提示 xxxx is up-to-date,則表示 Docker Compose 認(rèn)為這些容器已經(jīng)啟動了,沒必要再次啟動 nginxapi is up-to-date mysql is up-to-date redistest is up-to-date 注意:在生產(chǎn)環(huán)境下,禁止使用該命令:docker-compose down xxx 擴(kuò)展:如果要更新迭代應(yīng)用版本,只需要按照下列步驟執(zhí)行即可 1,將最新版本的應(yīng)用上傳更新到服務(wù)器,使用cd命令切到應(yīng)用根目錄 2,停止容器 docker-compose stop 容器名 3,自動更新鏡像并啟動容器 docker-compose up -d --build 4,沒了,就3步 到此結(jié)束! 參考文檔:https://www.bilibili.com/video/BV1ib411w7L7?p=13 |
|