docker目錄和本地目錄互通的實現(xiàn)
1.docker run使用-v 綁定一個卷
來實現(xiàn)容器中的目錄與本地某個目錄的聯(lián)通,這樣可以讓容器中的數(shù)據(jù)在容器銷毀之后仍然可以被保留下來。下面是一些基本的步驟:
創(chuàng)建一個本地目錄,用于存儲容器中的數(shù)據(jù)。例如,我們可以在本地創(chuàng)建一個目錄 /data,用于存儲容器中的數(shù)據(jù)。
在運行容器時,使用 -v 參數(shù)將本地目錄掛載到容器內部的目錄上。例如,如果我們要運行一個 MySQL 容器,并將本地的 /data 目錄掛載到容器內部的 /var/lib/mysql 目錄上,可以使用如下命令:
docker run -d \
--name my-mysql \
-v /data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
mysql:latest在這個命令中,我們使用 -v 參數(shù)將本地的 /data 目錄掛載到容器內部的 /var/lib/mysql 目錄上。這樣,在容器內部的數(shù)據(jù)就會被保存到本地的 /data 目錄中。
運行容器后,容器中的數(shù)據(jù)就可以和本地的 /data 目錄保持聯(lián)通了。例如,如果我們要在 MySQL 容器中創(chuàng)建一個名為 mydatabase 的數(shù)據(jù)庫,可以使用如下命令:
docker exec -it my-mysql mysql -uroot -pmy-secret-pw -e "CREATE DATABASE mydatabase;"
在這個命令中,我們使用 docker exec 命令進入到運行中的 MySQL 容器中,并執(zhí)行一個 SQL 命令來創(chuàng)建一個名為 mydatabase 的數(shù)據(jù)庫。由于我們已經將容器內部的 /var/lib/mysql 目錄掛載到了本地的 /data 目錄上,因此在容器內部創(chuàng)建的數(shù)據(jù)也會被保存到本地的 /data 目錄中。
總之,使用數(shù)據(jù)卷可以讓容器中的目錄和本地的某個目錄保持聯(lián)通,從而實現(xiàn)容器數(shù)據(jù)的持久化。
2.docker-compose.yml中使用數(shù)據(jù)卷(Volume)
在 Docker Compose 中,可以使用 volumes 來實現(xiàn)容器中的目錄與本地某個目錄的聯(lián)通。下面是一個基本的例子:
假設我們有一個 Django 應用程序和一個 MySQL 數(shù)據(jù)庫。我們想要將 Django 應用程序和 MySQL 數(shù)據(jù)庫分別運行在兩個容器中,并且想要將 MySQL 數(shù)據(jù)庫中的數(shù)據(jù)保存到本地的 /data/mysql 目錄中。在這種情況下,我們可以創(chuàng)建一個 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 文件中,我們定義了兩個服務:一個 MySQL 服務(名為 db),一個 Django 服務(名為 web)。我們還定義了兩個 volumes,一個用于將本地的 /data/mysql 目錄掛載到 MySQL 容器中的 /var/lib/mysql 目錄上,另一個用于將當前目錄(即 .)掛載到 Django 容器中的 /code 目錄上。
這樣,在運行 Docker Compose 時,我們可以使用如下命令:
docker-compose up
Docker Compose 會自動創(chuàng)建并啟動兩個容器,并將它們連接在一起。MySQL 容器中的數(shù)據(jù)會被保存到本地的 /data/mysql 目錄中,而 Django 容器中的代碼會被保存到本地的當前目錄中。
區(qū)別:
使用 volumes 可以讓容器中的目錄和本地的某個目錄保持聯(lián)通,從而實現(xiàn)容器數(shù)據(jù)的持久化。
使用 -v 參數(shù)將本地的目錄掛載到容器中時,Docker 會將本地目錄中的數(shù)據(jù)直接復制到容器中,但容器中的數(shù)據(jù)并不會自動同步到本地目錄中。這意味著,如果容器被刪除或本地目錄被刪除,那么數(shù)據(jù)也將被刪除,無法進行持久化。
相比之下,使用 volumes 來掛載目錄時,Docker 會將數(shù)據(jù)存儲在 Docker 所管理的卷中。這些卷可以被 Docker Compose 管理,可以輕松地備份和恢復。此外,可以使用 docker volume 命令來管理這些卷。使用 volumes,可以更好地管理和持久化容器中的數(shù)據(jù)。
另外,使用 volumes 還可以在容器中共享數(shù)據(jù),并且可以在多個容器之間共享。這種方法可以減少數(shù)據(jù)復制的時間和空間,并減少硬盤的使用量。
綜上所述,使用 volumes 比使用 -v 參數(shù)更加靈活和可管理,可以更好地管理容器中的數(shù)據(jù),可以減少硬盤使用量,并且可以在多個容器之間共享數(shù)據(jù)。
到此這篇關于docker目錄和本地目錄互通的實現(xiàn)的文章就介紹到這了,更多相關docker目錄和本地目錄互通內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker 容器指定自定義網段的固定IP/靜態(tài)IP地址
這篇文章主要介紹了Docker 容器指定自定義網段的固定IP/靜態(tài)IP地址的相關資料,需要的朋友可以參考下2016-12-12
使用 VPS 下載 Docker 鏡像并導入到本地服務器的過程
這篇文章主要介紹了使用 VPS 下載 Docker 鏡像并導入到本地服務器,通過使用 VPS 下載 Docker 鏡像并將其傳輸?shù)奖镜胤掌?我們可以克服網絡限制,更靈活地管理和部署 Docker 鏡像,需要的朋友可以參考下2024-08-08
docker和docker-compose一鍵安裝教程(支持在線和離線)
這篇文章主要介紹了docker和docker-compose一鍵安裝(支持在線和離線),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Docker容器化部署Spring?Boot項目實戰(zhàn)指南(最新整理)
本文給大家介紹Docker容器化部署Spring?Boot項目實戰(zhàn)指南,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2026-02-02

