欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker跨平臺(tái)和環(huán)境部署的過(guò)程詳解

 更新時(shí)間:2024年11月04日 15:33:18   作者:cyt濤  
Docker是一個(gè)開放源代碼的容器化平臺(tái),它能夠?qū)崿F(xiàn)應(yīng)用及其依賴的打包,從而實(shí)現(xiàn)跨平臺(tái)和環(huán)境的快速部署,本文介紹了Docker的基本概念、優(yōu)勢(shì)和基本使用方法,包括安裝、啟動(dòng)、構(gòu)建鏡像和部署應(yīng)用等步驟

Docker 是一個(gè)開源的容器化平臺(tái),通過(guò)將應(yīng)用程序和其依賴打包在一個(gè)輕量級(jí)、獨(dú)立的容器中,能夠跨平臺(tái)和環(huán)境部署。

1. Docker 基本概念

  • 鏡像 (Image):Docker 鏡像是一個(gè)只讀模板,包含運(yùn)行應(yīng)用程序所需的代碼、庫(kù)、依賴和環(huán)境配置。鏡像類似于一個(gè)模板,可以用來(lái)創(chuàng)建容器。
  • 容器 (Container):容器是鏡像的一個(gè)運(yùn)行實(shí)例,它可以運(yùn)行一個(gè)或多個(gè)進(jìn)程,且具有隔離性。容器的生命周期短暫,可以隨時(shí)啟動(dòng)、停止或銷毀。
  • Dockerfile:Dockerfile 是一組指令文件,用來(lái)定義鏡像的構(gòu)建過(guò)程。開發(fā)者可以通過(guò) Dockerfile 編寫應(yīng)用及其依賴環(huán)境的打包腳本。

倉(cāng)庫(kù) (Repository):Docker 鏡像的存儲(chǔ)位置,類似于代碼的版本控制系統(tǒng)。鏡像可以推送到倉(cāng)庫(kù)中供其他用戶下載使用。Docker Hub 是一個(gè)公共倉(cāng)庫(kù),提供了大量的官方和社區(qū)鏡像。

2. Docker 的優(yōu)勢(shì)

  • 輕量級(jí):Docker 使用系統(tǒng)級(jí)別的虛擬化,而非虛擬機(jī),不需要完整的操作系統(tǒng),容器啟動(dòng)速度更快,占用資源更少。
  • 環(huán)境一致性:Docker 容器包含應(yīng)用運(yùn)行所需的全部環(huán)境配置,確保在不同環(huán)境中行為一致,減少了環(huán)境配置不一致導(dǎo)致的問(wèn)題。
  • 快速部署與擴(kuò)展:Docker 支持快速部署和縮放,可以在幾秒鐘內(nèi)啟動(dòng)多個(gè)實(shí)例,適合大規(guī)模應(yīng)用的部署和擴(kuò)展。
  • 便于 CI/CD:Docker 與 DevOps 流程無(wú)縫集成,支持持續(xù)集成、交付和部署。

3. Docker 安裝

安裝參考Docker官方文檔,地址如下:https://docs.docker.com/engine/install/centos/

3.1 卸載舊版

首先如果系統(tǒng)中已經(jīng)存在舊的Docker,則先卸載:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux 

3.2 配置Docker的yum庫(kù)

首先要安裝一個(gè)yum工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安裝成功后,執(zhí)行命令,配置Docker的yum源:

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

更新yum,建立緩存

sudo yum makecache fast

3.3 安裝Docker

最后,執(zhí)行命令,安裝Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.4 啟動(dòng)和校驗(yàn)

# 啟動(dòng)Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重啟
systemctl restart docker
# 設(shè)置開機(jī)自啟
systemctl enable docker
# 執(zhí)行docker ps命令,如果不報(bào)錯(cuò),說(shuō)明安裝啟動(dòng)成功
docker ps

4. Docker 基本使用

Docker本身包含一個(gè)后臺(tái)服務(wù),我們可以利用Docker命令告訴Docker服務(wù),幫助我們快速部署指定的應(yīng)用。Docker服務(wù)部署應(yīng)用時(shí),首先要去搜索并下載應(yīng)用對(duì)應(yīng)的鏡像,然后根據(jù)鏡像創(chuàng)建并允許容器,應(yīng)用就部署完成了。

4.1 Docker 命令

默認(rèn)情況下,每次重啟虛擬機(jī)我們都需要手動(dòng)啟動(dòng)Docker和Docker中的容器。通過(guò)命令可以實(shí)現(xiàn)開機(jī)自啟:

# Docker開機(jī)自啟
systemctl enable docker
# Docker容器開機(jī)自啟
docker update --restart=always [容器名/容器id]

4.2 Docker部署MySQL服務(wù)示例

docker run -d \                                 # 以后臺(tái)模式啟動(dòng)容器(detached mode)。
  --name mysql \                                # 將容器命名為 "mysql",便于管理。
  -p 3306:3306 \                                # 將主機(jī)的 3306 端口映射到容器的 3306 端口,方便本地主機(jī)訪問(wèn) MySQL 服務(wù)。
  -e TZ=Asia/Shanghai \                         # 設(shè)置容器的時(shí)區(qū)為上海時(shí)間(Asia/Shanghai),以確保時(shí)間一致。
  -e MYSQL_ROOT_PASSWORD=123 \                  # 設(shè)置 MySQL root 用戶的密碼為 "123"(實(shí)際環(huán)境中應(yīng)使用復(fù)雜密碼)。
  -v ./mysql/data:/var/lib/mysql \              # 掛載本地?cái)?shù)據(jù)目錄到容器的 MySQL 數(shù)據(jù)目錄,以持久化存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù)。
  -v ./mysql/conf:/etc/mysql/conf.d \           # 掛載本地配置目錄到容器的 MySQL 配置目錄,以便加載自定義配置文件。
  -v ./mysql/init:/docker-entrypoint-initdb.d \ # 掛載本地初始化腳本目錄到容器,容器啟動(dòng)時(shí)將執(zhí)行目錄中的腳本。
  mysql                                         # 使用官方 MySQL 鏡像。

鏡像的名稱不是隨意的,而是要到DockerRegistry中尋找,鏡像運(yùn)行時(shí)的配置也不是隨意的,要參考鏡像的幫助文檔,這些在DockerHub網(wǎng)站或者軟件的官方網(wǎng)站中都能找到。

4.3 Dockerfile制作鏡像

鏡像的來(lái)源有兩種:

(1)直接去DockerRegistry下載

(2)基于官方基礎(chǔ)鏡像自己制作

由于制作鏡像的過(guò)程中,需要逐層處理和打包,比較復(fù)雜,所以Docker就提供了自動(dòng)打包鏡像的功能。我們只需要將打包的過(guò)程,每一層要做的事情用固定的語(yǔ)法寫下來(lái),交給Docker去執(zhí)行即可。

而這種記錄鏡像結(jié)構(gòu)的文件就稱為Dockerfile,其對(duì)應(yīng)的語(yǔ)法可以參考官方文檔:

https://docs.docker.com/engine/reference/builder

例如,要基于Ubuntu鏡像來(lái)構(gòu)建一個(gè)Java應(yīng)用,其Dockerfile內(nèi)容如下:

# 基礎(chǔ)鏡像
FROM openjdk:11.0-jre-buster
# 設(shè)定時(shí)區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷貝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

然后,執(zhí)行命令,構(gòu)建鏡像:

# 使用 Docker 從指定目錄中的 Dockerfile 構(gòu)建鏡像
docker build -t docker-demo:1.0 /root/demo
# 參數(shù)說(shuō)明:
# docker build                # Docker 命令,用于從 Dockerfile 構(gòu)建鏡像
# -t docker-demo:1.0          # 使用 -t 參數(shù)為鏡像指定名稱和標(biāo)簽(版本號(hào))
#   docker-demo               # 鏡像的名稱,用于標(biāo)識(shí)構(gòu)建出的鏡像
#   1.0                       # 鏡像的版本號(hào)(tag),用于區(qū)分不同版本,格式為 <鏡像名>:<版本號(hào)>
# /root/demo                  # 指定 Dockerfile 所在的目錄路徑,Docker 將在該目錄中查找名為 Dockerfile 的文件

4.4 網(wǎng)絡(luò)

Java項(xiàng)目往往需要訪問(wèn)其它各種中間件,例如MySQL、Redis等。放在同一個(gè)網(wǎng)絡(luò)中,我們的容器之間能互相訪問(wèn)。

4.5 Docker Compose

Docker Compose 是一個(gè)工具,允許用戶定義并運(yùn)行多個(gè)容器服務(wù)。通過(guò)編寫 docker-compose.yml 文件,用戶可以輕松地配置應(yīng)用的多個(gè)服務(wù)并管理它們。

稍微復(fù)雜的項(xiàng)目,會(huì)有各種各樣的其它中間件,需要部署的東西很多。如果手動(dòng)的逐一部署,就太麻煩了。

而Docker Compose就可以幫助我們實(shí)現(xiàn)多個(gè)相互關(guān)聯(lián)的Docker容器的快速部署。它允許用戶通過(guò)一個(gè)單獨(dú)的 docker-compose.yml 模板文件(YAML 格式)來(lái)定義一組相關(guān)聯(lián)的應(yīng)用容器。

舉例來(lái)說(shuō),用docker run部署MySQL的命令如下:

docker run -d \                                 # 以后臺(tái)模式啟動(dòng)容器(detached mode)。
  --name mysql \                                # 將容器命名為 "mysql",便于管理。
  -p 3306:3306 \                                # 將主機(jī)的 3306 端口映射到容器的 3306 端口,方便本地主機(jī)訪問(wèn) MySQL 服務(wù)。
  -e TZ=Asia/Shanghai \                         # 設(shè)置容器的時(shí)區(qū)為上海時(shí)間(Asia/Shanghai),以確保時(shí)間一致。
  -e MYSQL_ROOT_PASSWORD=123 \                  # 設(shè)置 MySQL root 用戶的密碼為 "123"(實(shí)際環(huán)境中應(yīng)使用復(fù)雜密碼)。
  -v ./mysql/data:/var/lib/mysql \              # 掛載本地?cái)?shù)據(jù)目錄到容器的 MySQL 數(shù)據(jù)目錄,以持久化存儲(chǔ)數(shù)據(jù)庫(kù)數(shù)據(jù)。
  -v ./mysql/conf:/etc/mysql/conf.d \           # 掛載本地配置目錄到容器的 MySQL 配置目錄,以便加載自定義配置文件。
  -v ./mysql/init:/docker-entrypoint-initdb.d \ # 掛載本地初始化腳本目錄到容器,容器啟動(dòng)時(shí)將執(zhí)行目錄中的腳本。
  mysql                                         # 使用官方 MySQL 鏡像。

如果用docker-compose.yml文件來(lái)定義,就是這樣:

# Docker Compose 配置文件,版本為 3.8
version: "3.8"
# 定義多個(gè)服務(wù)
services:
  # 定義 MySQL 服務(wù)
  mysql:
    # 使用官方的 MySQL 鏡像
    image: mysql
    # 指定容器名稱
    container_name: mysql
    # 映射主機(jī)和容器的端口
    ports:
      - "3306:3306"  # 將主機(jī)的 3306 端口映射到容器的 3306 端口
    # 設(shè)置環(huán)境變量
    environment:
      TZ: Asia/Shanghai  # 設(shè)置容器的時(shí)區(qū)為亞洲/上海
      MYSQL_ROOT_PASSWORD: 123  # 設(shè)置 MySQL 根用戶的密碼為 123
    # 掛載主機(jī)目錄到容器中,用于持久化數(shù)據(jù)和自定義配置
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"  # 掛載本地的配置文件夾到容器的 MySQL 配置目錄
      - "./mysql/data:/var/lib/mysql"     # 掛載本地的數(shù)據(jù)文件夾到容器的 MySQL 數(shù)據(jù)目錄
    # 指定網(wǎng)絡(luò)配置
    networks:
      - new  # 將此服務(wù)連接到名為 new 的網(wǎng)絡(luò)
# 定義網(wǎng)絡(luò)
networks:
  new:
    name: cyt  # 指定網(wǎng)絡(luò)的名稱為 cyt

編寫好docker-compose.yml文件,就可以部署項(xiàng)目了。常見的命令:

# 啟動(dòng)所有, -d 參數(shù)是后臺(tái)啟動(dòng)
docker compose up -d

5. 部署示例

項(xiàng)目說(shuō)明:

  • cyt:后端代碼
  • cyt-portal:用戶端的前端代碼
  • cyt-admin:管理端的前端代碼

5.1 逐個(gè)部署

5.1.1 部署Java項(xiàng)目

注意:host采用了mysql作為地址,剛好是我們的mysql容器名,只要兩者在一個(gè)網(wǎng)絡(luò),就一定能互相訪問(wèn)。

首先將項(xiàng)目打包;

項(xiàng)目目錄下的Dockerfile/target目錄下的.jar一起上傳到虛擬機(jī)的root目錄。

# 1.首先通過(guò)命令創(chuàng)建一個(gè)網(wǎng)絡(luò)
docker network create cytnet
# 1.構(gòu)建項(xiàng)目鏡像,不指定tag,則默認(rèn)為latest
docker build -t cyt.
# 2.創(chuàng)建并運(yùn)行容器,并通過(guò)--network將其加入hmall網(wǎng)絡(luò),這樣才能通過(guò)容器名訪問(wèn)mysql
docker run -d --name cyt --network cytnet -p 8080:8080 cyt

5.1.2 部署前端

將前端代碼拷貝到nginx的html目錄下,在nginx.conf配置文件,完成對(duì)html下的兩個(gè)靜態(tài)資源目錄做代理。

將整個(gè)nginx目錄上傳到虛擬機(jī)的/root目錄下

docker run -d \
  --name nginx \
  -p 18080:18080 \
  -p 18081:18081 \
  -v /root/nginx/html:/usr/share/nginx/html \
  -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
  --network hmall \
  nginx

5.2 DockerCompose一鍵部署

編寫docker-compose.yml文件

version: "3.8"  # 定義 Docker Compose 文件的版本
services:
  # MySQL 數(shù)據(jù)庫(kù)服務(wù)
  mysql:
    image: mysql  # 使用官方 MySQL 鏡像
    container_name: mysql  # 設(shè)置容器名稱為 "mysql"
    ports:
      - "3306:3306"  # 將主機(jī)的 3306 端口映射到容器的 3306 端口
    environment:
      TZ: Asia/Shanghai  # 設(shè)置容器的時(shí)區(qū)為亞洲/上海
      MYSQL_ROOT_PASSWORD: 123  # 設(shè)置 MySQL 的 root 用戶密碼
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"  # 掛載自定義配置文件目錄到容器中
      - "./mysql/data:/var/lib/mysql"  # 持久化存儲(chǔ) MySQL 數(shù)據(jù)庫(kù)的數(shù)據(jù)
      - "./mysql/init:/docker-entrypoint-initdb.d"  # 初始化 SQL 腳本目錄
    networks:
      - cyt-net  # 連接到名為 "cyt-net" 的自定義網(wǎng)絡(luò)
  # Java 應(yīng)用服務(wù)(cyt)
  cyt:
    build: 
      context: .  # 設(shè)置構(gòu)建上下文為當(dāng)前目錄
      dockerfile: Dockerfile  # 指定構(gòu)建 Java 應(yīng)用的 Dockerfile 文件
    container_name: cyt  # 設(shè)置容器名稱為 "cyt"
    ports:
      - "8080:8080"  # 將主機(jī)的 8080 端口映射到容器的 8080 端口
    networks:
      - cyt-net  # 連接到自定義網(wǎng)絡(luò) "cyt-net"
    depends_on:
      - mysql  # 設(shè)置依賴關(guān)系:確保 MySQL 容器在 cyt 容器之前啟動(dòng)
  # Nginx 反向代理服務(wù)
  nginx:
    image: nginx  # 使用官方 Nginx 鏡像
    container_name: nginx  # 設(shè)置容器名稱為 "nginx"
    ports:
      - "18080:18080"  # 將主機(jī)的 18080 端口映射到容器的 18080 端口(可以根據(jù)需要修改)
      - "18081:18081"  # 將主機(jī)的 18081 端口映射到容器的 18081 端口(可以根據(jù)需要修改)
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"  # 掛載自定義 Nginx 配置文件
      - "./nginx/html:/usr/share/nginx/html"  # 掛載靜態(tài)文件目錄到 Nginx 容器中
    depends_on:
      - cyt  # 設(shè)置依賴關(guān)系:確保 cyt 容器在 nginx 容器之前啟動(dòng)
    networks:
      - cyt-net  # 連接到自定義網(wǎng)絡(luò) "cyt-net"
# 定義自定義網(wǎng)絡(luò)
networks:
  cyt-net:
    name: cyt  # 將自定義網(wǎng)絡(luò)命名為 "cyt"

在終端中運(yùn)行以下命令,Docker Compose 會(huì)讀取 docker-compose.yml 文件并啟動(dòng)配置的服務(wù)

# 啟動(dòng)所有, -d 參數(shù)是后臺(tái)啟動(dòng)
docker compose up -d

到此這篇關(guān)于Docker跨平臺(tái)和環(huán)境部署的文章就介紹到這了,更多相關(guān)Docker跨平臺(tái)部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker容器如何指定utf-8編碼

    docker容器如何指定utf-8編碼

    這篇文章主要介紹了docker容器如何指定utf-8編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 解決docker日志掛載的問(wèn)題

    解決docker日志掛載的問(wèn)題

    這篇文章主要介紹了解決docker日志掛載的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker安裝部署Mysql8的過(guò)程(以作數(shù)據(jù)持久化)

    Docker安裝部署Mysql8的過(guò)程(以作數(shù)據(jù)持久化)

    這篇文章主要介紹了Docker安裝部署Mysql8(以作數(shù)據(jù)持久化),首先創(chuàng)建容器并進(jìn)行持久化處理,接著配置遠(yuǎn)程連接并嘗試,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • docker上部署MySQL的示例

    docker上部署MySQL的示例

    這篇文章主要介紹了docker上部署MySQL的示例,幫助大家更好的理解和學(xué)習(xí)使用docker,感興趣的朋友可以了解下
    2021-04-04
  • 如何監(jiān)控docker容器運(yùn)行狀態(tài) shell 腳本

    如何監(jiān)控docker容器運(yùn)行狀態(tài) shell 腳本

    這篇文章主要介紹了如何監(jiān)控docker容器運(yùn)行狀態(tài) shell 腳本的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Docker鏡像壓縮與優(yōu)化操作

    Docker鏡像壓縮與優(yōu)化操作

    這篇文章主要介紹了Docker鏡像壓縮與優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker 徹底刪除私有庫(kù)鏡像的操作

    Docker 徹底刪除私有庫(kù)鏡像的操作

    這篇文章主要介紹了Docker 徹底刪除私有庫(kù)鏡像的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • docker通過(guò)Dockerfile構(gòu)建mysql鏡像的方法

    docker通過(guò)Dockerfile構(gòu)建mysql鏡像的方法

    這篇文章主要介紹了docker通過(guò)Dockerfile構(gòu)建mysql鏡像,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Ubuntu上安裝Docker及可視化管理工具的流程步驟

    Ubuntu上安裝Docker及可視化管理工具的流程步驟

    本文詳細(xì)介紹了在Ubuntu?24.04?LTS上安裝、配置和卸載Docker,以及如何使用Portainer進(jìn)行可視化管理,還覆蓋了Docker的基本命令和常見問(wèn)題處理,需要的朋友可以參考下
    2025-02-02
  • docker鏡像消失的問(wèn)題及臨時(shí)解決方案

    docker鏡像消失的問(wèn)題及臨時(shí)解決方案

    本文主要介紹了docker鏡像消失的問(wèn)題及臨時(shí)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評(píng)論