Docker on Windows--Installation Problems

【1】 Failed to start machine boot2docker-vm exit status:1

a) Enabled VT-x in your BIOS
b) Replace uxtheme.dll under windows\system32 if your win7 OS are not legal copy. see here

【2】start.sh: line 36: cd: HOME not set

This problem was resolved by adding the following line in empty one at #53:

export HOME=$HOMEPATH

【3】Are you trying to connect to a TLS-enabled daemon without TLS?

【on windows cmd page】

set DOCKER_HOST=tcp://192.168.99.100:2376
set DOCKER_MACHINE_NAME=default
set DOCKER_TLS_VERIFY=1
set DOCKER_CERT_PATH=C:\Users\Administrator.docker\machine\machines\default

【4】docker run -i -t ubuntu /bin/bash [error]

(http://stackoverflow.com/questions/30132231/boot2docker-windows-cant-run-bash-on-ubuntu-container)

$ docker run -i -t ubuntu /bin/bash
exec: "C:/Program Files (x86)/Git/bin/bash": stat C:/Program Files (x86)/Git/bin/bash: no such file or directory
FATA[0000] Error response from daemon: Cannot start container 5e985b0b101bb9584ea3e40355089a54d1fba29655d5a1e0900c9b32c4f7e4c4: [8] System error: exec: "C:/Program Files (x86)/Git/bin/bash": stat C:/Program Files (x86)/Git/bin/bash: no such file or directory

Try this way: docker run -t -i ubuntu //bin/bash

【5】”cannot enable tty mode on non tty input”
Follow this way
started Docker Quickstarter Terminal and input this.

docker-machine ssh default

———————————————————————————————————————————————————————————————————————

【1】基礎知識:

好文推薦:
利用Docker構建開發環境
更多推薦
docker快速部署node.js應用

  • Docker的核心底層技術是LXC(Linux Container);
  • Docker爲App提供了一種自動化構建機制(Dockerfile),包括打包,基礎設施依賴管理和安裝等等;
  • Docker提供了一種類似git的Container版本化的機制,允許你對你創建過的容器進行版本管理;
  • Docker使用了一種叫AUFS的文件系統,這種文件系統可以讓你一層一層地疊加修改你的文件,最底下的文件系統是隻讀的,如果需要修改文件,AUFS會增加一個可寫的層(Layer),這樣有很多好處,例如不同的Container可以共享底層的只讀文件系統(同一個Kernel),使得你可以跑N多個Container而不至於你的硬盤被擠爆了!這個只讀的層就是Image!而如你所看到的,一個可寫的層就是Container。你可以使用docker commit 命令,將你的Container變成一個Image
  • 對內存、磁盤和cpu的消耗相比傳統的虛擬機要低許多,這些都要歸功於AUFS和LXC這兩大神奇的技術

a) Docker能處理的事情包括:
- 隔離應用依賴
- 創建應用鏡像並進行復制
- 創建容易分發的即啓即用的應用
- 允許實例簡單、快速地擴展
- 測試應用並隨後銷燬它們
b)

這裏寫圖片描述

【2】架構知識

  • boot2docker-vm.vmdk文件則是你的虛擬機磁盤,你所有的持久化數據都存放在這裏,包括docker創建的lxc容器等文件;
  • docker-daemon跑在虛擬機上,這個程序實際上就是接收docker-client發送過來的消息命令,創建、啓動和銷燬lxc容器,以及docker本身的版本管理、映像存儲等等 ;
  • docker-client會通過一個叫DOCKER_HOST的環境變量讀取服務地址和端口;

——————————————————————————————————————————————————————————

【1】基本操作

好文推薦:實踐在windows下用docker進行web開發

  1. 構建基礎Image
docker pull ubuntu:13.10 

FROM ubuntu:13.10 
RUN apt-get update 
RUN apt-get install -y ruby ruby-dev gem 
RUN gem install bundler 

docker build --rm -t dev:base . 

2.指定Image入口
a) 前臺shell式

    docker run --rm -ti ubuntu /bin/bash
 - --rm:告訴Docker一旦運行的進程退出就刪除容器。這在進行測試時非常有用,可免除雜亂;
 - -ti:告訴Docker分配一個僞終端並進入交互模式,-i表示同步container的stdin,-t表示同步container的輸出。這將進入到容器內,對於快速原型開發或嘗試很有用,但不要在生產容器中打開這些標誌;
 -  ubuntu:這是容器立足的鏡像; 
 - /bin/bash:要運行的命令,因爲我們以交互模式啓動,它將顯示一個容器的提示符;

b) 後臺運行式
Dockerfile提供了CMD和ENTRYPOINT這2個指令,允許你指定一個Image啓動時的默認命令。CMD和ENTRYPOINT的區別是CMD的參數可以由docker run指令指定的參數覆蓋,而ENTRYPOINT則不可以;

FROM ubuntu:13.10 
RUN apt-get install -y memcached CMD memcached -u root -p 40000 
#*********************************
docker build -t dev:memcache .
#*********************************
docker run --name memcache_service -d dev:memcache 

這樣這個container就會作爲後臺進程運行了,接着你可以使用docker ps命令查看是否有在運行。

3.磁盤映射
這裏寫圖片描述
- 首先,VM裏面的/mnt/sda1/dev/目錄(你需要自己創建)通過sshfs命令mount到了host主機(Mac)的~/workspace/dev/目錄 ,
- 而VM裏的/mnt/sda1/dev/目錄又被映射到了Container的/src/目錄下,這樣你就可以在Container裏面的/src/目錄下訪問你的host文件了。
- 具體如何做呢?
在 windows 下的 VitrualBox 與 docker 之間的磁盤映射操作過程

C:/Program Files/Oracle/VirtualBox/VBoxManage sharedfolder add boot2docker-vm -name /opt/my/folder/with/code -hostpath c:/my/folder/with/code

雙擊 vitrualbox 上面的虛機,docker會自動啓動進入虛機操作界面;
cd ../
ls
cd /mnt
mkdir zhcshared
mount -t vboxsf expressD  /mnt/zhcshared 
cd zhcshared 
ls

  • Container裏持久化的一切內容,最終都持久化到docker虛擬機裏
  • 正常的linux系統只要往/etc/fstab文件或者/etc/rc.local文件裏寫執行語句,系統啓動時就會自動執行,但是往docker虛擬機的自啓動文件裏寫語句的話,下次啓動就不見了;因此docker虛擬機根目錄/下的東西(包括/home)根本不會持久化,只有/mnt/sda1這個目錄下的才能持久化

4.端口映射

  • 首先你需要設置VirtualBox的端口映射,然後再將Container的端口映射到你的VM裏面;
    這裏寫圖片描述
cd c:/
cd "program files"
cd oracle/virtualbox/
VBoxManage controlvm "default" natpf1 "tcp-port49160,tcp,,49160,,49160"or 直接打開vbox-->network-->settings(in NAT model)-->port forward-->】
docker run -p 49160:8080 -d <your username>/centos-node-hello

docker logs <container id>

curl -i localhost:49160
  • 實際上在VM裏面,你是可以直接訪問所有的Container的端口的,因爲VM到Container的網絡都是橋接的。

`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章