Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。

01 Docker 安装

本次安装的操作系统是Ubuntu,并使用Docker仓库进行安装,其他系统的 Docker CE 的安装方式请参考 官方文档

使用Docker仓库进行安装时,在新主机上首次安装 Docker CE 之前,需要设置 Docker 仓库。之后,可以从仓库安装和更新 Docker 。

1.1 设置仓库

首先,更新 apt 包的索引

sudo apt-get update

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

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

添加 Docker 的官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

设置稳定版 Docker 仓库

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

1.2 安装 Docker 引擎

更新 apt 包的索引

sudo apt-get update

安装 Docker Engine-Community 和 containerd ,两种方法选其一即可

# 安装最新版本
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 安装特定版本
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

测试 Docker 是否安装成功,可以通过查看docker版本或者运行测试demo验证

# 查看已安装docker版本
docker -v      
# 运行 hello-world 测试demo
sudo docker run hello-world

docker物理设备 docker ce ipk_docker

1.3 配置 Docker

Docker Engine V1.12 之后版本,用户可以自行创建 daemon.json 文件对 Docker Engine 进行配置和调整。要点如下:

  • 该文件作为 Docker Engine 的配置管理文件, 里面几乎涵盖了所有 docker 命令行启动可以配置的参数。
  • 不管是在哪个平台以何种方式启动, Docker 默认都会来这里读取配置。使用户可以统一管理不同系统下的 docker daemon 配置。
  • 相关参数的使用说明,可以参阅 man dockerd 帮助信息,或者参阅官方文档。
  • --config-file选项允许您以JSON格式为守护程序设置任何配置选项。此文件使用与键相同的标志名称,但允许多个条目的标志除外,它使用多个标志名称,例如,labels用于label标志。

配置文件中设置的选项不得与通过flags设置的选项冲突。如果文件和标志之间的选项重复,则docker守护程序无法启动,无论其值如何。我们这样做是为了避免静默忽略配置重新加载中引入的更改。例如,如果在配置文件中设置守护程序标签并且还通过–label标志设置守护程序标签,则守护程序无法启动。守护程序启动时将忽略文件中不存在的选项。

Linux上配置文件的默认位置是 /etc/docker/daemon.json。该–config-file标志可用于指定非默认配置。如下示例为简单配置,详细配置项与含义请参考 官方配置文档

# graph 已废弃,使用data-root代替,这个主要看docker的版本
# "graph": "/data/docker", 
# Docker运行时使用的根路径,根路径下的内容稍后介绍,默认/var/lib/docker
"data-root": "/data/docker", 
# Docker Engine 在 Ubuntu 系统支持 overlay2、aufs、btrfs 三种存储驱动,默认使用 overlay2、
"storage-driver": "overlay2",
# 配置docker的私库地址
"insecure-registries": ["registry.access.redhat.com", "quay.io"],
# 镜像加速的地址,增加后在 docker info中可查看
"registry-mirrors": [],
# Docker 网络,Docker的IP地址配置最好和本地主机IP有映射关系,在出故障时方便找到宿主机,这里将主机地址的后两个数对应到IP网络地址的中间两位
"bip": "172.130.203.0/24",
# 启动Docker的额外参数
"exec-opts": ["native.cgroupdriver=systemd"],
# Docker 容器引擎被杀死时不影响运行在其中的容器运行情况
"live-restore": true

1.4 启动 Docker

先创建docker的数据目录

sudo mkdir -p /data/docker

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组

sudo usermod -aG docker $USER

启动docker

# 设置开机自启动
systemctl enable docker 
systemctl start docker
# 查看docker状态
docker info

02 Docker 镜像管理

2.1 Docker 拉取镜像的过程

  1. 首先服务器上运行Docker引擎
  2. 本地服务器从Docker远程镜像服务器下载镜像到本地
  3. 本地服务器通过Docker引擎启动镜像的容器实例

2.2 配置镜像加速器

打开配置文件

sudo vim /etc/docker/daemon.json
# 在文件中插入如下内容
{
  "registry-mirrors": ["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"]
}

重载配置并重新启动Docker

systemctl daemon-reload 
systemctl restart docker

2.3 镜像保存与加载

Docker 管理镜像和管理容器的两组命令的特点:

  • docker save 保存的是镜像(image),docker export 保存的是容器(container);
  • docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
  • docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。

保存镜像与加载镜像

# 保存镜像,将镜像打包
docker save spring-boot-docker  -o  /home/wang/docker/spring-boot-docker.tar
# 加载镜像,解压镜像
docker load -i spring-boot-docker.tar

2.4 镜像管理命令

查看镜像列表

docker images

删除镜像

docker rmi -f centos

03 Docker 应用部署

3.1 启动容器

如果docker中没有需要的镜像,使用 docker pull 命令来载入所需镜像

docker pull nginx

使用 run 命令使用镜像启动一个容器

docker run -d -p 80:80 nginx
# 查看端口是否启动成功
netstat -antup | grep 80

run 命令参数说明:

  • -d 后台运行
  • -p 8080:80 端口映射,将容器的80端口映射到物理机的8080端口

3.2 访问容器

正在运行的容器可以使用 exec 命令对其进行访问,访问容器需要指定其 Id 或者名称

(base) ➜  ~ docker ps 
(base) ➜  ~ docker exec -it d5e7b813dcb7 /bin/bash  
root@d5e7b813dcb7:/#

docker物理设备 docker ce ipk_ubuntu_02

exec 参数说明:

  • -i 交互式操作
  • -t 分配一个伪终端
  • container id / container name 指定要访问的容器 id 或者 名称
  • /bin/bash 交互式shell,该参数也可以是 /bin/sh 或者 sh

退出容器 直接执行 exit

3.3 停止容器

停止一个容器的运行可以使用如下命令:

docker stop <container ID>

启动已停止的容器使用如下命令:

# 使用如下命令查看所有容器状态
docker ps -a
# 使用如下命令启动已停止的容器
docker start <container ID>
# 或者
docker restart <container ID>

参考资料

官方文档 在Ubuntu上安装DockerDocker 入门教程菜鸟教程 Docker教程Docker配置文件daemon.json解析