在Windows7中Docker Toolbox的坑

最近在數據持久化,因此從Docker入手,下面總結下在Windows7下Docker遇到的問題。mysql

Docker自己在Windows下有兩個軟件,一個就是Docker,另外一個是Docker Toolbox。這裏我選擇的是Docker Toolbox,爲何呢?參見官方文檔:redis

https://blog.docker.com/2015/08/docker-toolbox/sql

首先咱們從官網下載最新版的Windows Docker Toolbox。安裝後會安裝一個VirtualBox虛擬機,一個Kitematic,這是GUI管理Docker的工具,沒有發佈正式版,不推薦使用,另外還有就是咱們在命令行下用到的docker-machine和docker命令了。docker

基本使用 安裝完成Toolbox後會有一個Docker Quickstart Terminal的快捷方式,雙擊運行若是報錯,那多是由於你已經安裝了Hyper-v,因此VirtualBox沒法用64位的虛擬機。須要卸載Hyper-v。express

運行後會在Virtualbox中建立一個叫作default的虛擬機,而後頗有可能會卡在waiting for an IP的命令下,而後就死活不動了。個人作法是完全放棄Docker Quickstart Terminal,根本不用這玩意兒,關掉,咱們用PowerShell進行虛擬機的管理。windows

打開PowerShell,輸入:服務器

docker-machine lsssh

咱們能夠看到咱們當前的Docker虛擬機的狀態。若是什麼都沒有的話,那麼咱們可使用如下命令建立一個Docker虛擬機。工具

docker-machine create --driver=virtualbox defaultui

建立完畢後,咱們在用docker-machine ls確認咱們的Docker虛擬機在運行中。

而後使用如下命令得到虛擬機的環境變量:

docker-machine env default

HJIV9ITYQI8S$2OLZIZS)U0.png

按提示來操做。

T916990YNS%4E%{71Y@%@@7.png(每一個機器可能不同,這句操做重要)

這樣咱們就把當前的PowerShell和虛擬機裏面的Docker Linux創建的鏈接,接下來就能夠在PowerShell中使用docker命令了。

建立docker-compose.yml 文件

version: '3.1'  
services:  
 mongo:  
 image: mongo  
 restart: always  
 ports:  
 - 27017:27017  
 mongo-express:  
 image: mongo-express  
 restart: always  
 ports:  
 - 8081:8081  
 mysql:  
 image: mysql  
 command: --default-authentication-plugin=mysql\_native\_password  
 restart: always  
 environment:  
 MYSQL\_ROOT\_PASSWORD: example  
 ports:  
 - 3306:3306  
 adminer:  
 image: adminer  
 restart: always  
 ports:  
 - 8080:8080  
 redis:  
 image: redis  
 ports:  
 - "6379:6379"

運行docker-compose up。

F_F2$V)9)]DD@ROMPSQIYIO.png

Docker虛擬機文件地址修改 默認狀況下,docker-machine建立的虛擬機文件,是保存在C盤的C:\Users\用戶名.docker\machine\machines\default 目錄下的,若是下載和使用的鏡像過多,那麼必然致使該文件夾膨脹過大,若是C盤比較吃緊,那麼咱們就得考慮把該虛擬機移到另外一個盤上。具體操做以下:

1.使用docker-machine stop default停掉Docker的虛擬機。

2.打開VirtualBox,選擇「管理」菜單下的「虛擬介質管理」,咱們能夠看到Docker虛擬機用的虛擬硬盤的文件disk。

3.選中「disk」,而後點擊菜單中的「複製」命令,根據嚮導,把當前的disk複製到另外一個盤上面去~~~~。

4.回到VirtualBox主界面,右鍵「default」這個虛擬機,選擇「設置」命令,在彈出的窗口中選擇「存儲」選項。

5.把disk從「控制器SATA」中刪除,而後從新添加咱們剛纔複製到另一個磁盤上的那個文件。

這是我設置好後的界面,能夠看到我在步驟3複製的時候,複製到E:\VirtualBox\default\dockerdisk.vdi文件去了。

image

6.肯定,回到PowerShell,咱們使用docker-machine start default就能夠啓動新地址的Docker虛擬機了。確保新磁盤的虛擬機沒有問題。就能夠把C盤那個disk文件刪除了。

【注意:不要在Window中直接去複製粘貼disk文件,這樣會在步驟5的時候報錯的,報錯的內容以下,因此必定要在VirtualBox中去複製!】

Failed to open the hard disk file D:\Docker\boot2docker-vm\boot2docker-vm.vmdk. Cannot register the hard disk 'D:\Docker\boot2docker-vm\boot2docker-vm.vmdk' {9a4ed2ae-40f7-4445-8615-a59dccb2905c} because a hard disk C:\Users\用戶名.docker\machine\machines\default\disk.vmdk' with UUID {9a4ed2ae-40f7-4445-8615-a59dccb2905c} already exists. Result Code: E_INVALIDARG (0x80070057) Component: VirtualBox Interface: IVirtualBox {fafa4e17-1ee2-4905-a10e-fe7c18bf5554} Callee RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)

鏡像加速 在國內使用Docker Hub的話就特別慢,爲此,咱們能夠給Docker配置國內的加速地址。我看了一下,DaoCloud和阿里雲的鏡像加速還不錯,另外還有網易的蜂巢。選一個就好了。以DaoClound爲例,註冊帳號,而後在https://www.daocloud.io/mirror 就能夠看到DaoClound提供給您的鏡像加速的URL。而後到PowerShell中去依次執行:

docker-machine ssh default sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile exit docker-machine restart default 這樣重啓Docker後就能夠用國內的鏡像來加速下載了。

試一下下載一個mysql看看快不快:

docker pull mysql

下載完鏡像,咱們運行一個容器:

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest

接下來咱們打開windows下的mysql客戶端,服務器地址填docker虛擬機的IP地址,經過docker-machine env能夠看到,我這裏是192.168.99.100,而後用戶名root,密碼123,這樣咱們就能夠鏈接到docker容器裏面的mysql了。

【注意,Docker容器是在VirtualBox的虛擬機裏面,不是在Windows裏面,因此不能用127.0.0.1訪問】

相關文章
相關標籤/搜索