docker目錄和本地目錄互通的實(shí)現(xiàn)
1.docker run使用-v 綁定一個(gè)卷
來實(shí)現(xiàn)容器中的目錄與本地某個(gè)目錄的聯(lián)通,這樣可以讓容器中的數(shù)據(jù)在容器銷毀之后仍然可以被保留下來。下面是一些基本的步驟:
創(chuàng)建一個(gè)本地目錄,用于存儲(chǔ)容器中的數(shù)據(jù)。例如,我們可以在本地創(chuàng)建一個(gè)目錄 /data,用于存儲(chǔ)容器中的數(shù)據(jù)。
在運(yùn)行容器時(shí),使用 -v 參數(shù)將本地目錄掛載到容器內(nèi)部的目錄上。例如,如果我們要運(yùn)行一個(gè) MySQL 容器,并將本地的 /data 目錄掛載到容器內(nèi)部的 /var/lib/mysql 目錄上,可以使用如下命令:
docker run -d \ --name my-mysql \ -v /data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ mysql:latest
在這個(gè)命令中,我們使用 -v 參數(shù)將本地的 /data 目錄掛載到容器內(nèi)部的 /var/lib/mysql 目錄上。這樣,在容器內(nèi)部的數(shù)據(jù)就會(huì)被保存到本地的 /data 目錄中。
運(yùn)行容器后,容器中的數(shù)據(jù)就可以和本地的 /data 目錄保持聯(lián)通了。例如,如果我們要在 MySQL 容器中創(chuàng)建一個(gè)名為 mydatabase 的數(shù)據(jù)庫,可以使用如下命令:
docker exec -it my-mysql mysql -uroot -pmy-secret-pw -e "CREATE DATABASE mydatabase;"
在這個(gè)命令中,我們使用 docker exec 命令進(jìn)入到運(yùn)行中的 MySQL 容器中,并執(zhí)行一個(gè) SQL 命令來創(chuàng)建一個(gè)名為 mydatabase 的數(shù)據(jù)庫。由于我們已經(jīng)將容器內(nèi)部的 /var/lib/mysql 目錄掛載到了本地的 /data 目錄上,因此在容器內(nèi)部創(chuàng)建的數(shù)據(jù)也會(huì)被保存到本地的 /data 目錄中。
總之,使用數(shù)據(jù)卷可以讓容器中的目錄和本地的某個(gè)目錄保持聯(lián)通,從而實(shí)現(xiàn)容器數(shù)據(jù)的持久化。
2.docker-compose.yml中使用數(shù)據(jù)卷(Volume)
在 Docker Compose 中,可以使用 volumes 來實(shí)現(xiàn)容器中的目錄與本地某個(gè)目錄的聯(lián)通。下面是一個(gè)基本的例子:
假設(shè)我們有一個(gè) Django 應(yīng)用程序和一個(gè) MySQL 數(shù)據(jù)庫。我們想要將 Django 應(yīng)用程序和 MySQL 數(shù)據(jù)庫分別運(yùn)行在兩個(gè)容器中,并且想要將 MySQL 數(shù)據(jù)庫中的數(shù)據(jù)保存到本地的 /data/mysql 目錄中。在這種情況下,我們可以創(chuàng)建一個(gè) docker-compose.yml 文件,并在其中指定 volumes,如下所示:
version: "3" services: ? db: ? ? image: mysql ? ? volumes: ? ? ? - /data/mysql:/var/lib/mysql ? ? environment: ? ? ? MYSQL_ROOT_PASSWORD: my-secret-pw ? web: ? ? build: . ? ? volumes: ? ? ? - .:/code ? ? ports: ? ? ? - "8000:8000" ? ? depends_on: ? ? ? - db ? ? environment: ? ? ? DB_HOST: db ? ? ? DB_NAME: mydatabase ? ? ? DB_USER: root ? ? ? DB_PASSWORD: my-secret-pw
在上面的 docker-compose.yml 文件中,我們定義了兩個(gè)服務(wù):一個(gè) MySQL 服務(wù)(名為 db),一個(gè) Django 服務(wù)(名為 web)。我們還定義了兩個(gè) volumes,一個(gè)用于將本地的 /data/mysql 目錄掛載到 MySQL 容器中的 /var/lib/mysql 目錄上,另一個(gè)用于將當(dāng)前目錄(即 .)掛載到 Django 容器中的 /code 目錄上。
這樣,在運(yùn)行 Docker Compose 時(shí),我們可以使用如下命令:
docker-compose up
Docker Compose 會(huì)自動(dòng)創(chuàng)建并啟動(dòng)兩個(gè)容器,并將它們連接在一起。MySQL 容器中的數(shù)據(jù)會(huì)被保存到本地的 /data/mysql 目錄中,而 Django 容器中的代碼會(huì)被保存到本地的當(dāng)前目錄中。
區(qū)別:
使用 volumes 可以讓容器中的目錄和本地的某個(gè)目錄保持聯(lián)通,從而實(shí)現(xiàn)容器數(shù)據(jù)的持久化。
使用 -v 參數(shù)將本地的目錄掛載到容器中時(shí),Docker 會(huì)將本地目錄中的數(shù)據(jù)直接復(fù)制到容器中,但容器中的數(shù)據(jù)并不會(huì)自動(dòng)同步到本地目錄中。這意味著,如果容器被刪除或本地目錄被刪除,那么數(shù)據(jù)也將被刪除,無法進(jìn)行持久化。
相比之下,使用 volumes 來掛載目錄時(shí),Docker 會(huì)將數(shù)據(jù)存儲(chǔ)在 Docker 所管理的卷中。這些卷可以被 Docker Compose 管理,可以輕松地備份和恢復(fù)。此外,可以使用 docker volume 命令來管理這些卷。使用 volumes,可以更好地管理和持久化容器中的數(shù)據(jù)。
另外,使用 volumes 還可以在容器中共享數(shù)據(jù),并且可以在多個(gè)容器之間共享。這種方法可以減少數(shù)據(jù)復(fù)制的時(shí)間和空間,并減少硬盤的使用量。
綜上所述,使用 volumes 比使用 -v 參數(shù)更加靈活和可管理,可以更好地管理容器中的數(shù)據(jù),可以減少硬盤使用量,并且可以在多個(gè)容器之間共享數(shù)據(jù)。
到此這篇關(guān)于docker目錄和本地目錄互通的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker目錄和本地目錄互通內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker安裝oracle數(shù)據(jù)庫最新版教程
這篇文章主要介紹了如何在Docker中安裝和配置Oracle?11g數(shù)據(jù)庫,包括安裝Docker、拉取Oracle鏡像、創(chuàng)建容器、進(jìn)入容器配置、設(shè)置環(huán)境變量、創(chuàng)建軟連接、修改用戶密碼、重啟數(shù)據(jù)庫以及使用Navicat進(jìn)行連接測(cè)試,需要的朋友可以參考下2025-02-02淺談Docker run 容器處于created狀態(tài)問題
這篇文章主要介紹了解決Docker run 容器處于created狀態(tài)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03使用Docker安裝向量數(shù)據(jù)庫milvus并且安裝圖形化界面的方法
文章介紹了如何在Windows上使用Docker安裝并配置Milvus向量數(shù)據(jù)庫,包括啟用WSL2、安裝Ubuntu、配置Docker倉庫、安裝Milvus服務(wù)端和用戶圖形界面Attu,并提供了一個(gè)修改后的Dockerfile以提高Attu的安裝速度,感興趣的朋友一起看看吧2025-02-02docker部署訪問postgres數(shù)據(jù)庫的實(shí)現(xiàn)方法
本文主要介紹了docker部署訪問postgres數(shù)據(jù)庫的實(shí)現(xiàn)方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令
這篇文章主要為大家介紹了docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04從Docker容器中備份整個(gè)PostgreSQL的操作步驟
現(xiàn)在需要從Docker容器中備份整個(gè)PostgreSQL后,然后,使用備份文件在另外一個(gè)pg的docker容器中恢復(fù)過來,所以本文給大家介紹了從Docker容器中備份整個(gè)PostgreSQL的操作步驟,通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-10-10