【Docker】Ubuntu 環境安裝配置 & 常用命令大全

Table of Content

  1. Overview
  2. Installation
  3. Instruction
  4. Docker Hub

Overview

在不同計算機上進行相同的環境配置一直是一大難題,虛擬機(virtual machine)是一種傳統的解決方案,然而具有啓動慢、資源佔用多、冗餘步驟多等缺點。

由於虛擬機的這些缺點,Linux 發展出了另一種虛擬化技術:Linux 容器(Linux Containers,縮寫爲 LXC)。Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離。或者說,在正常進程的外面套了一個保護層。對於容器裏面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。由於容器是進程級別的,相比虛擬機有體積小、啓動快、資源佔用少等優勢。

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。

Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。

總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。

Docker 的主要用途,目前有提供一次性的環境、提供彈性的雲服務、組建微服務架構三大類。

Installation

Docker 是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫爲 CE)和企業版(Enterprise Edition,縮寫爲 EE)。企業版包含了一些收費服務,個人開發者一般用不到。

這裏只介紹在 Ubuntu x86_64 上安裝 Docker CE 的相關步驟:

安裝 Docker

  • 刪除舊版本
sudo apt-get remove docker docker-engine docker.io containerd runc
  • 安裝新版本
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 驗證是否安裝成功
sudo docker version # 或 sudo docker info
  • 啓動 Docker 服務
sudo service docker start # 或 sudo systemctl start docker

安裝 NVIDIA Docker

爲了在 Docker 中使用 GPU,還需要安裝 NVIDIA Docker

  • 刪除舊版本
sudo docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
  • 安裝新版本
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
  • 驗證是否安裝成功
sudo docker run --runtime=nvidia --rm nvidia/cuda:8.0-cudnn6-runtime nvidia-smi

運行使用 GPU 的 Docker 時,需要使用 nvidia-docker … 命令替代原有的 docker … 命令

鏡像加速

通過 Docker 官方鏡像加速,中國區用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像託管於中國大陸,本地用戶現在將會享受到更快的下載速度和更強的穩定性,從而能夠更敏捷地開發和交付 Docker 化應用。

使用 sudo 權限打開 /etc/default/docker 文件,在文件底部加上一行:

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

重啓服務:

sudo service docker restart

Instruction

【注】下文中:

REPO 表示雲端網址或官方/本地鏡像名

TAG 表示所屬鏡像的特定標籤,如果不指定 TAG 則默認標籤爲 latest

ID 表示通過 ls 查看到的鏡像或容器的 id

查看已有鏡像/容器信息

sudo docker image ls -a # 查看所有鏡像列表
sudo docker container ls -a # 查看所有容器列表

登錄鏡像站(雲)

sudo docker login --username=USER SITE

拉取(下載)鏡像

sudo docker pull REPO:TAG

推送(上傳)鏡像

sudo docker push REPO:TAG

查找鏡像

sudo docker search REPO

創建一個容器運行鏡像

sudo nvidia-docker run -it --user root REPO:TAG /bin/bash

其中,參數 -it 表示將容器的 Shell 映射到當前的 Shell,然後在本機窗口輸入的命令,就會傳入容器;可選參數 -d 表示後臺運行;可選參數 -rm 表示容器運行結束後自動刪除;–user root 表示以 root 用戶身份運行容器,具備所有權限;運行指令 /bin/bash 表示容器啓動以後,內部第一個執行的命令,這裏啓動 Bash,保證用戶可以使用 Shell

  • 進入容器後結束運行並退出:Ctrl + D

  • 進入容器後後臺運行並退出:Ctrl + P + Q

啓動/停止運行後臺容器

sudo docker start ID # 運行已停止容器
sudo docker stop ID # 停止已運行容器

後臺容器運行到前臺 bash

sudo nvidia-docker attach ID # 進入後臺已運行容器

容器內外傳送文件

sudo docker cp 本地位置 ID:容器位置 # 本地文件複製到容器
sudo docker cp ID:容器位置 本地位置 # 容器文件複製到本地

更新(保存)容器到鏡像

sudo docker commit -m="MEMO" -a="AUTHOR" ID REPO:TAG

其中,ID 爲容器 id,-m 與 -a 爲可選信息

設置鏡像標籤

sudo docker tag ID REPO:TAG

其中,ID 爲鏡像 id

寫入/讀取鏡像文件

sudo docker save -o FILE REPO:TAG # 保存鏡像到文件
sudo docker load -i FILE # 載入鏡像文件

刪除本地鏡像/容器

sudo docker rmi ID # 刪除鏡像
sudo docker rm ID # 刪除容器

Docker Hub

常用鏡像:

Ubuntu

CUDA

PyTorch

anibali/PyTorch

TensorFlow

Caffe

Caffe2

……

更多可在 Docker Hub 上進行搜索

References

[1] Enterprise Application Container Platform | Docker

[2] Get Docker CE for Ubuntu | Docker Documentation

[3] Get Started, Part 1: Orientation and setup | Docker Documentation

[4] Docker Documentation | Docker Documentation

[5] Docker Hub

[6] GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs

[7] 鏡像加速 | Docker 中國

[8] Docker 入門教程 - 阮一峯的網絡日誌

[9] Docker 鏡像使用 | 菜鳥教程

[10] 如何進入docker 使用root用戶的方式 - 乎然的專欄 - CSDN博客

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