Debian docker 安装及 Debian in docker

Debian Docker 安装

Docker 支持以下的 Debian 版本:

  • Buster 10
  • Stretch 9 (stable) / Raspbian Stretch

Docker Engine-Community 在 x86_64(或 amd64 )armhf,和 arm64 体系结构上受支持。


使用官方安装脚本自动安装

安装命令如下:

 curl -fsSL https://get.docker.com -o get-docker.sh
 sudo sh get-docker.sh

手动安装

卸载旧版本

Docker 的旧版本被称为 docker,docker.io 或 docker-engine,如果已安装,请卸载它们:

$ sudo apt-get remove docker docker-engine docker.io containerd runc

安装 Docker Engine-Community

使用 Docker 仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

Raspbian 用户不能使用此方法!

对于 Raspbian,尚不支持使用仓库进行安装。您必须改为使用 shell 脚本方式。

设置仓库

更新 apt 包索引。

$ sudo apt-get update

安装 apt 依赖包,用于通过 HTTPS 来获取仓库。

$ **sudo** **apt-get install** \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg2 \
  software-properties-common

添加 Docker 的官方 GPG 密钥:

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。

$ **sudo** **apt-key** fingerprint 0EBFCD88

pub  4096R**/**0EBFCD88 2017-02-22
   Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid          Docker Release **(**CE deb**)** **<**docker**@**docker.com**>**
sub  4096R**/**F273FCD8 2017-02-22

使用以下指令设置稳定版仓库:

$ **sudo** add-apt-repository \
  "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian **\
** $(lsb_release -cs) **\
** stable"

安装 Docker Engine-Community

更新 apt 包索引:

$ sudo apt-get update

安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

建立 docker 用户组:

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

$ **apt-cache** madison docker-ce

 docker-ce **|** 5:18.09.1~3-0~debian-stretch **|** https:**//**mirrors.ustc.edu.cn**/**docker-ce**/**linux**/**debian stretch**/**stable amd64 Packages
 docker-ce **|** 5:18.09.0~3-0~debian-stretch **|** https:**//**mirrors.ustc.edu.cn**/**docker-ce**/**linux**/**debian stretch**/**stable amd64 Packages
 docker-ce **|** 18.06.1~ce~3-0~debian     **|** https:**//**mirrors.ustc.edu.cn**/**docker-ce**/**linux**/**debian stretch**/**stable amd64 Packages
 docker-ce **|** 18.06.0~ce~3-0~debian     **|** https:**//**mirrors.ustc.edu.cn**/**docker-ce**/**linux**/**debian stretch**/**stable amd64 Packages
 ...

使用第二列中的版本字符串安装特定版本,例如 5:18.09.1~3-0~debian-stretch 。

$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:

$ **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**/**

卸载 docker

删除安装包:

sudo apt-get purge docker-ce

删除镜像、容器、配置文件等内容:

sudo rm -rf /var/lib/docker

拉取最新版的 debian 镜像

$ docker pull debian

或者:

$ docker pull debian:latest

后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

$ docker run -itd --name debian debian

启动容器的时候加上“--add-host”把hosts配置上

docker run --add-host=dkdebian:10.180.8.1 -name debian debian

进入容器

docker exec -it debian /bin/bash

改主机名

启动docker容器后,进入容器时发现对应的主机名是一段编码(默认就是container ID前缀),在容器维护时记不住是哪个机器,容易搞错,所以干脆直接改掉,见名知义。

不能直接在容器内修改/etc/hostname文件,因为容器stop/restart后会重置,导致配置丢失,并且容器中服务器也没法reboot无法立即生效,所以需要从根本上解决问题。

具体操作有如下几种:

在docker run的时候,指定hostname参数即可,这个参数会直接将对应主机名写入机器的/etc/hostname文件中:

docker run -itd --network $netname --hostname $host --name $name yourimage

也可以增加hostname:使用add-host=$hostname:$ip参数即可,这个参数会在容器内的/etc/hostname文件中追加一行映射:

docker run -itd --network $netname --add-host=$host:$ip --name $name yourimage

如果是通过docker-compose方式,则需要通过extra_hosts参数:

# docker-compose.yml
extra_hosts:
 - "host1:172.18.0.3"
 - "host2:172.18.0.4"