標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2019年7月10日 星期三

Ubuntu 16.04 利用shell透過Docker套件庫安裝最新版本與相關指令


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 的差別

檢查log(程式日誌)
指令: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 命令

沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html