docker學習

一.1. docker

一.1.1. docker安裝

一.1.1.1. 安裝過程

下載:linux

https://docs.docker.com/installation/windowsnginx

而後安裝git

我下載了Install Docker Desktop for Windows,可是因爲個人OSwindows10home版的,不支持,聽說只支持windows prowindows serverweb

因而,只能下載DockerToolbox,下載之後安裝。docker

 

安裝成功之後能夠經過如下方式登錄:ubuntu

1. 打開gitbashcddocker目錄,執行start.shvim

2. 執行Docker Quickstart Terminalwindows

3. 能夠在secureCRT中配置ssh2鏈接,用戶名密碼是:docker/tcuserbash

一.1.1.2. 踩過的坑

執行Docker Quickstart Terminal網絡

報錯:

找不到bash.sh

分析:

這個是因爲個人git安裝目錄和默認安裝路徑不同所致,

解決:

只要修改快捷鍵Docker Quickstart Termina」的啓動屬性中的目標,把bash.sh的路徑按照我本身的安裝路徑寫正確便可。修改之後爲:"H:\Program Files\Git\bin\bash.exe" --login -i "H:\Program Files\Docker Toolbox\start.sh"

 

報錯:

處理步驟:

關閉電腦,再重啓,進入BIOS,找到CPU Configuration> Intel Virtualization Technology,設置爲Enabled

這個時候,會顯示虛擬化啓動成功:

再次執行Docker Quickstart Terminal,就能夠成功了,中間須要等待一段時間。

下次打開docker,能夠在gitbash中進入到docker.exe,再執行docker.exe

H:\Program Files\Docker Toolbox\docker.exe

若是出現報錯,能夠執行:gitbash中進入到start.sh,再執行start.sh:

$cd /h/’Program Files’/’Docker Toolbox’

$start.sh

一.1.2. docker操做命令

一.1.2.1. 基本概念

鏡像:相似於虛擬機鏡像,能夠理解爲一個面向docker引擎的只讀模板,包含了文件系統。

容器:是從鏡像建立的應用運行實例,能夠將其啓動、開始、中止、刪除,這些容器都是相互隔離、互不可見的。

倉庫:是docker集中存放鏡像文件的場所。

一.1.2.2. 基本操做

1.鏡像

國內鏡像地址:網易鏡像中心:https://c.163.com/hub#/m/home/ 
daocloud鏡像市場:https://hub.daocloud.io/

從網易獲取鏡像過程:登錄網址https://c.163.com/hub#/m/home/,用戶名密碼:282660642@qq.com/ypb0228,搜索相應鏡像,而後複製下載地址,到docker中執行即可,好比:docker pull hub.c.163.com/library/registry:latest

獲取鏡像:docker pull ubuntu:14.4

                                       ^       ^

                                  鏡像名稱  tag

          帶倉庫地址的命令:docker  pull dl.dockerpool.com:5000/ubuntu

查看鏡像信息:docker images

爲本地鏡像添加新標籤:docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest

查看鏡像詳細信息:docker inspect yourImageID

搜索鏡像:docker search yourImageName

刪除鏡像:docker rmi yourImageIDOrTag

2.容器

建立容器:docker create -it ubuntu:latest

建立具名容器:docker create -it --name myName ubuntu

(相關容器操做中除了可使用容器id,就還可使用方便記憶的容器名稱了)

查看已建立容器:docker  -a

查看已建立未啓動容器:docker -a -q

運行一個容器,然後自動中止:docker run ubuntu /bin/echo ‘Hello’

運行一個容器,保持僞終端打開:docker run -t -i ubuntu /bin/bash

守護態啓動容器:docker run -d ubuntu /bin/sh -c ‘while true;do echo ‘1’;sleep 1;done;’

啓動一個容器:docker start yourDockerID

中止一個容器:docker  stop yourDockerID

重啓一個容器:docker restart yourDockerID

進入容器:docker attach yourDockerID

導出容器:docker export yourDockerId >yourFileName.tar

導入容器:docker import yourFileName.tar demo:v1.0

(導入進去的容器,就能夠用docker images看到了,能夠用來建立新的容器)

 

3.倉庫

docker本地新建倉庫:

$docker run --name docker-registry -d -p 5001:5001 registry

                                                                     ^     ^

                                                          宿主機port  容器port

倉庫建好之後的測試:docker@default:/$ curl -X GET http://127.0.0.1:5001/           

curl: (52) Empty reply from server

 

4.數據卷操做

建立一個數據主機,利用本機的空間:

docekr create -ti --name dataServer -v /h/tmpData:/datatmp ubuntu

                                                                      ^           ^

                                                              本地空間   主機掛載點

建立一個共享dataServer/datatmp下面的數據捲到/data下面

docker create -ti --name datangix mynginx --volumes-from dataServer /data:/datatmp

建立成功了,可是仍是啓動不了,啓動的時候報錯:

docker@default:/$ docker start datangix2

Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"--volumes-from\": executable file not found in $PATH": unknown

Error: failed to start containers: datangix2

解決方法:

docker create -ti --name datangix mynginx /bin/bash --volumes-from dataServer /data:/datatmp

 

5.網絡操做

docker create -ti --name mynginx -p 192.168.99.100:8089:80 mynginx /bin/bash

#-p 說明,192.168.99.100dockerip808980,是把mynginx中的端口80映射到8089

 

6.踩過的坑:

問題:

$ docker attach b16cc744c3ed

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

解決:將winpty放到最前面

$ winpty docker attach b16cc744c3ed

 

問題:

導出的ubuntu鏡像重命名之後再次導入,create container的時候報錯:

$ docker create -it somename:v1.0

Error response from daemon: No command specified

解決:

再最後加參數:

docker create -it --name mydemo somename:v1.0 /bin/bash

 

問題:

啓動docker容器之後,就是沒法attach

$ winpty docker attach mydemo2

You cannot attach to a stopped container, start it first

解決:

建立的時候少了 -ti參數致使。

建立的時候加上 -ti參數便可:

docker create -ti --name mydemo2 mydemo:v1.0

 

問題:

建立一個共享dataServer/datatmp下面的數據捲到/data下面

docker create -ti --name datangix mynginx --volumes-from dataServer /data:/datatmp

建立成功了,可是仍是啓動不了,啓動的時候報錯:

docker@default:/$ docker start datangix2

Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"--volumes-from\": executable file not found in $PATH": unknown

Error: failed to start containers: datangix2

解決方法:

docker create -ti --name datangix mynginx /bin/bash --volumes-from dataServer /data:/datatmp

 

 

一.1.3. docker實戰

一.1.3.1. 建立容器,並在宿主機訪問

docker中新建一個nginx容器,而後在宿主機進行訪問

 

先從網易docker鏡像庫下載nginx

在本地執行docker pull命令,若是網絡有問題,可是ping 8.8.8.8沒有問題,就重啓一下虛擬機docker再試試。

下好之後,打個tag方便使用:

$docker tag hub.c.163.com/library/nginx mynginx

再建立nginx容器,並啓動:

$docker run --detach --publish 8009:80 --name webserver mynginx:latest

docker中可使用curl進行測試:

dockerifconfig找到相應ip

docker中使用curl進行測試,測試結果:

在宿主機進行測試,宿主機測試結果以下:

若是想建容器之後,在容器內部啓動nginx

先建立容器:

docker run --detach --publish 8089:80 -ti --name mynginx3 mynginx /bin/bash

進入容器

docker attach mynginx3

$cd sbin;nginx

而後進入到docker中,用curl進行測試,ok,是通的。

一.1.3.2. 安裝vim

因爲官方鏡像多無vim,操做起來很不方便,須要安裝vim,而國外鏡像下載速度慢多以失敗了結,所以須要先修改到國內鏡像地址。

$cd etc/apt

mv sources.list sources.list_bak

而後用>>sources.list 中添加內容:

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse'>>sources.list

echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse'>>sources.list

echo 'deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse'>>sources.list

然後,再使用apt-get update

apt-get install vim進行安裝

一.1.3.3. 容器能夠經過ssh進行訪問

安裝ssh

$apt-get install openssh-server

$mkdir /var/run/sshd

啓動ssh服務:

$/usr/sbin/sshd -D &

使用netstat查看一下,發現netstat未安裝,$apt-get install net-tools

而後使用netstat確實能夠看到已經在22端口進行監聽。

而後,使用docker commit 保存鏡像,

再次按照保存好的鏡像建立一個容器,啓動sshd服務,把docker10022端口映射到容器的22端口中。

 

問題:

可是使用sshdocker中登錄的時候,提示密碼錯誤。不曉得如何解決。

docker$ssh 192.168.99.100 #tcuser爲密碼能夠登錄,可是$ssh 192.168.99.100 -p 10022 #tcuser 爲密碼提示密碼錯誤

緣由分析:

 

相關文章
相關標籤/搜索