1.透過Docker 套件庫安裝最新版本
#安裝apt-transport-https
$ sudo apt-get install apt-transport-https
#取得金鑰
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
#將deb https://get.docker.io/ubuntu docker main 寫入 /etc/apt/sources.list.d/docker.list
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
#套件更新
$ sudo apt-get update
#安裝docker
$ sudo apt-get install -y lxc-docker
#啟動 docker
$ sudo service docker start
將上述的指令寫成 shell 檔
檔名:DockerInstall.sh
其內容如下:
#!/bin/bash
apt-get install apt-transport-https
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
apt-get update
apt-get install -y lxc-docker
service docker start
下載後,需打上指令如下:
$sudo chmod +x DockerInstall.sh
$sudo sh DockerInstall.sh
安裝過程如下圖:
安裝過程如下圖:
更新docker
$sudo apt-get update -y lxc-docker
現在我們將docker 的三類:映像檔(Image)、容器(Container)、倉庫(Repositry)與其指令之相互關係,整理成圖表。
取得映像檔(image)
指令: docker pull
ex: 到公有倉庫(Repository)取得ubuntu 18.04 映像檔
sudo docker pull ubuntu:18.04
建立一個容器(container),讓其中執行 bash
$ sudo docker run -t -i ubuntu:18.04 /bin/bash
-i:以交互模式運行容器,通常與-t同時使用;
-t:為容器重新分配一個偽輸入終端,通常與-i同時使用;
顯示本機已有的映像檔(image)
docker images
ex:
$ sudo docker images
執行web 程式
在docker容器中執行Python Flask 程式來執行一個web程式。
#取得training/webapp 的映像檔(image)
$sudo pull training/webapp
建立一個容器(container),讓其中執行python app.py
$sudo docker run -d -P training/webapp python app.py
-d:讓容器在後台運行。
-P:將容器內部使用的網絡埠(port)映射(mapping)到主機上。
檢查 WEB程式容器(container)
指令:docker ps
#檢查所有正在運行的容器(container)
ex:$ sudo docker ps
網絡埠(port) 訊息
Docker 的容器(container)開啟網絡埠(port)號:5000 (預設 Python Flask 網絡埠)映射到主機網絡埠號:32768 上。
主機IP為 192.168.32.134
打開瀏覽器 打上 http://192.168.32.134:32768
若要更改容器(container)的網絡埠(port)號,則要使用 -p
ex: $sudo docker run -d -p 5000:5000 training/webapp python app.py
若只是單純檢查容器(container)的網絡埠(port),可以下指令 docker port +容器IP
那容器ID 的取得,可從 docker ps 取得
所以我們可以檢查 27bea7994a3d
$sudo docker port 27bea7994a3d
比較指令 docker ps 與 docker port 的差別
指令:docker logs -f
-f :輸出容器(container)內部的標準輸出
ex:
$sudo docker logs -f ae433e5debba
檢查 Docker容器(container)的配置和狀態信息
指令為 docker inspect + 容器名稱(name)
ex: $ sudo docker inspect silly_noyce
處理docker 啟動(停止、重啟、刪除) 容器(container)
docker start (stop、restart、rm) + 容器(container)的名稱(name)
ex: sudo docker start (stop、restart、rm) silly_noyce
注意事項:刪除之前,需先停止容器(container)。即指令下法為
$sudo docker stop silly_noyce
$sudo docker rm silly_noyce
建立映像檔
(1) 修改現有映像檔
#下載映像檔 training/sinatra
$sudo docker pull training/sinatra
#建立一個容器(container),讓其中執行 bash
$sudo docker run -t -i training/sinatra /bin/bash
此時容器(container) 的ID為12bf15cd160c,即上圖綠色圈處。
在容器中安裝套件gem(加入json)
root@12bf15cd160c:/# gem install json
退出
root@12bf15cd160c:/# exit
提交"更新後的副本"指令:docker commit
$sudo docker commit -m "Added json gem" -a "Docker AddJsonGem" 12bf15cd160c ouruser/sinatra:v2
-m 指定提交映像檔的說明信息
-a 可以指定更新的使用者信息
查看所有映像檔 :docker images
$sudo docker images
可以直接使用ouruser/sinatra:v2
$sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
(2)利用 Dockerfile 建立映像檔
建立映像檔指令:docker build ,用docker build前,需先建立Dockerfile。
流程:Dockerfile ----> docker build
A.建立目錄與檔案
#建立目錄sinatra
$ mkdir sinatra
#進入目錄sinatra
$ cd sinatra
#建立檔案Dockerfile
$ touch Dockerfile
#編輯 Dockerfile
$sudo pico Dockerfile
B.Dockerfile 內容為
# FROM 告訴 docker 以 ubuntu:14.04 為 image
FROM ubuntu:14.04
# MAINTAINER 維護者 與 Email
MAINTAINER Docker Newbee <newbee@docker.com>
#RUN 在docker build 時執行 apt-get 更新、install 與 gem install
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
C.建立映像檔
指令:docker build
$sudo docker build -t="ouruser/sinatra:v2" .
但是出現錯誤訊息:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
資料來源:
1.Docker —— 從入門到實踐
2.Docker run 命令
沒有留言:
張貼留言