Docker 安裝

Docker 安裝

轉載鏈接

可以在任何操作系統上安裝 Docker,無論是 Mac,Windows,Linux 還是任何雲服務器。Docker 引擎在 Linux 發行版上運行。 在這裏,我們將以 Linux Ubuntu Server 16.04 作爲演示安裝 Docker 引擎的過程。

前提條件

Docker 需要兩個重要的安裝要求:

  • 它僅適用於 64 位 Linux 安裝
  • 它需要 Linux 內核版本 3.10 或更高版本。

要查看當前的內核版本,請打開終端並鍵入uname -r命令以查看內核版本:

lusifer@UbuntuBase:~$ uname -r
4.4.0-21-generic

查看操作系統是32位還是64位:

lusifer@UbuntuBase:~$ uname --m
x86_64

使用腳本安裝 Docker

使用在線安裝腳本

先更新數據源

curl -sSL https://get.daocloud.io/docker | sh

執行後會自動下載並安裝 Docker 及依賴包

lusifer@UbuntuBase:~$ curl -sSL https://get.daocloud.io/docker | sh
# Executing docker install script, commit: 49ee7c1
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl software-properties-common >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
+ sudo -E sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial edge" > /etc/apt/sources.list.d/docker.list
+ [ ubuntu = debian ]
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sudo -E sh -c docker version
Client:
 Version:      17.10.0-ce
 API version:  1.33
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:04:16 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.10.0-ce
 API version:  1.33 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:02:56 2017
 OS/Arch:      linux/amd64
 Experimental: false
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker lusifer

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

完成後有個提示

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker lusifer

Remember that you will have to log out and back in for this to take effect!

當要以非 root 用戶可以直接運行 docker 時,需要執行 sudo usermod -aG docker lusifer 命令,然後重新登陸,否則會有如下報錯

lusifer@UbuntuBase:~$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.33/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

啓動 Docker 後臺服務

service docker start

查看 Docker 當前版本

lusifer@UbuntuBase:~$ docker version
Client:
 Version:      17.10.0-ce
 API version:  1.33
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:04:16 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.10.0-ce
 API version:  1.33 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:02:56 2017
 OS/Arch:      linux/amd64
 Experimental: false

配置加速器

由於網絡原因,我們在 pull Image 的時候,從 Docker Hub 上下載會很慢... 所以,國內的 Docker 愛好者們就添加了一些國內的鏡像 (mirror),方便大家使用。

修改配置文件

nano /lib/systemd/system/docker.service

添加 --registry-mirror=https://jxus37ac.mirror.aliyuncs.com 到 ExecStart:

保存配置:systemctl daemon-reload

重啓服務:service docker restart

第一個 Docker 應用程序


Docker 允許你在容器內運行應用程序,使用 docker run 命令來在容器內運行一個應用程序。

輸出 Hello Docker:

lusifer@UbuntuBase:~$ docker run ubuntu:15.10 /bin/echo "Hello Docker"
Hello Docker

參數解釋:

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

以上命令完整的意思可以解釋爲:Docker 以 ubuntu15.10 鏡像創建一個新容器,然後在容器裏執行 bin/echo "Hello Docker",然後輸出結果。

運行交互式的容器


我們通過 docker 的兩個參數 -i -t,讓 docker 運行的容器實現"對話"的能力

lusifer@UbuntuBase:~$ docker run -it ubuntu:15.10 /bin/bash
root@76ab065de67b:/#

參數解釋:

  • -t:在新容器內指定一個僞終端或終端
  • -i:允許你對容器內的標準輸入進行交互

此時我們已進入一個 ubuntu15.10 系統的容器

我們嘗試在容器中運行命令 cat /proc/version 和 ls 分別查看當前系統的版本信息和當前目錄下的文件列表

root@76ab065de67b:/# cat /proc/version
Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016
root@76ab065de67b:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

退出容器:

  • 運行 exit
  • 使用 CTRL + D

以後臺模式運行容器


使用以下命令創建一個以進程方式運行的容器

lusifer@UbuntuBase:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello docker; sleep 1; done"
0977407542d16c5699a2cc0455d977cb5d8ef011a1a762cdcf2323851f6b3ed3

在輸出中,我們沒有看到期望的"hello docker",而是一串長字符

0977407542d16c5699a2cc0455d977cb5d8ef011a1a762cdcf2323851f6b3ed3

這個長字符串叫做容器ID,對每個容器來說都是唯一的,我們可以通過容器ID來查看對應的容器發生了什麼。

首先,我們需要確認容器有在運行,可以通過 docker ps 來查看

lusifer@UbuntuBase:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0977407542d1        ubuntu:15.10        "/bin/sh -c 'while..."   2 seconds ago       Up 1 second                             thirsty_kowalevski

CONTAINER ID:容器ID

NAMES:自動分配的容器名稱

在容器內使用 docker logs 命令,查看容器內的標準輸出

lusifer@UbuntuBase:~$ docker logs 0977407542d1
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
lusifer@UbuntuBase:~$ docker logs thirsty_kowalevski
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker

與正在運行的容器交互

docker exec -it <container> /bin/bash



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