天天看點

Docker環境搭建

MacOS

  1. MacOS 我們可以使用 Homebrew 來安裝 Docker。
    1. 下載下傳docker桌面版 https://www.docker.com/get-started
      Docker環境搭建
  1. 鑒于國内網絡問題,後續拉取 Docker 鏡像十分緩慢,需要配置國内鏡像位址
Docker環境搭建
{
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://zjy67cgc.mirror.aliyuncs.com"
  ]
}      
  1. 下載下傳鏡像: https://docker.alibaba-inc.com/#/imageList
    • docker pull reg.docker.alibaba-inc.com/iot-warp/node-red:1.2.2
  2. 下載下傳服務: http://gitlab.alibaba-inc.com/haas-studio/ms-studio
  3.  啟動docker
    • docker run -d -i -t --rm --name="ms-studio" -p 50002:1880 -p 52202:22 -v /Users/dan.wu/work/study/node-red/ms-studio:/data reg.docker.alibaba-inc.com/iot-warp/node-red:1.0.1

Ubuntu

2種安裝方式都可以
  1. 自動安裝:
  • curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • curl -sSL https://get.daocloud.io/docker | sh
  1. 手動安裝(這裡是中國科技大學的源為例)
  • 安裝依賴包:sudo apt-get install apt-transport-https ca-certificates  curl gnupg-agent software-properties-common
  • 添加 Docker 的官方 GPG 密鑰:curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  • 設定穩定版倉庫:sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/   $(lsb_release -cs)   stable"
  • 更新包索引:sudo apt-get update
  • 解除安裝舊版本(如之前安裝過可選):sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安裝最新版本的 Docker Engine-Community和containerd:sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 驗證環境:
$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete                                                                                                                                  Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/      
  1. 鏡像加速

對于使用 systemd 的系統(Ubuntu16.04+、Debian8+、CentOS7)

請通路阿裡雲線上位址 https://cr.console.aliyun.com/#/docker/booster 擷取你的加速器
請在 /etc/docker/daemon.json 中寫入如下内容(如果檔案不存在請建立該檔案):
$ sudo /etc/docker/daemon.json
    添加:{"registry-mirrors":[
            "https://reg-mirror.qiniu.com/",
            "https://<你的阿裡雲id>.mirror.aliyuncs.com"
        ]}
  
重新啟動服務:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker      
  1. 給docker添加sudo權限
$ sudo groupadd docker
$ sudo gpasswd -a <你的使用者名> docker
$ sudo service docker restart
退出shell 重新進入即可      

Docker常用指令

docker run用來運作一個容器

docker run ubuntu:15.10 /bin/echo "Hello world"

  • docker: Docker 的二進制執行檔案。
  • run: 與前面的 docker 組合來運作一個容器。
  • ubuntu:15.10 指定要運作的鏡像,Docker 首先從本地主機上查找鏡像是否存在,如果不存在,Docker 就會從鏡像倉庫 Docker Hub 下載下傳公共鏡像。
  • /bin/echo "Hello world": 在啟動的容器裡執行的指令

docker run -i -t ubuntu:15.10 /bin/bash

  • -t: 在新容器内指定一個僞終端或終端。
  • -i: 允許你對容器内的标準輸入 (STDIN) 進行互動。

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

  • -d: 在新容器運作在背景。

docker ps 來檢視容器程序:

  • CONTAINER ID: 容器 ID。
  • IMAGE: 使用的鏡像。
  • COMMAND: 啟動容器時運作的指令。
  • CREATED: 容器的建立時間。
  • STATUS: 容器狀态。
    • created(已建立)
    • restarting(重新開機中)
    • running 或 Up(運作中)
    • removing(遷移中)
    • paused(暫停)
    • exited(停止)
    • dead(死亡)

docker logs 檢視容器内的标準輸出

docker images 來列出本地主機上的鏡像。

docker pull 下載下傳容器鏡像,會根據你配置的鏡像倉庫位址來下載下傳鏡像

阿裡雲鏡像倉庫:

阿裡雲容器鏡像服務:

https://cr.console.aliyun.com/

如: docker pull reg.docker.alibaba-inc.com/iot-warp/node-red:1.2.2

有時候報latest not found: manifest unknown: manifest unknown,說明找不到latest版本,請帶上版本号

制作docker鏡像

當我們從 docker 鏡像倉庫中下載下傳的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。

1.commit方式:基礎鏡像運作生成容器,容器中安裝需要工具,送出鏡像。

  • 登入阿裡雲容器鏡像服務
    • 建立鏡像倉庫,并使用本地代碼源(即通過本地上傳的方式,上傳鏡像)
    • 在“通路憑證”标簽裡設定固定密碼
  • 先用docker run運作一個基礎的容器鏡像,如ubuntu:16.04
    • 在容器裡做一些更新:如安裝一些工具,軟體包,下載下傳一些源代碼
    • exit指令退出容器
  • docker ps -a檢視剛才修改過的容器,找到id,如e218edb10161
  • docker commit -m="has update" -a="shenping.sp" e218edb10161 runoob/ubuntu:v2
    • -m: 送出的描述資訊
    • -a: 指定鏡像作者
    • e218edb10161:容器 ID
    • runoob/ubuntu:v2: 指定要建立的目标鏡像名
  • 使用docker imags檢視imageID
  • 将鏡像推送到Registry:
    • $ sudo docker login --username=iotx_develop_hacklab registry.cn-shanghai.aliyuncs.com
    • $ sudo docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/haas-studio/codebase:[鏡像版本号]
    • $ sudo docker push registry.cn-shanghai.aliyuncs.com/haas-studio/codebase:[鏡像版本号]