Skip to content
On this page

Docker 简介

Docker 是什么?

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 的用途

Docker 的主要用途,目前有三大类。

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker 的镜像(image 文件)

Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

Docker 的容器(container 文件)

image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。

Docker 的安装

Docker 支持 64 位版本的 CentOS 7 和 CentOS 8 及更高版本,它要求 Linux 内核版本不低于 3.10。

bash
# 查看Linux版本的命令这里推荐两种:

lsb_release -a


cat /etc/redhat-release
bash
# 查看内核版本的命令有三种:

cat /proc/version

uname -a

uname -r

Docker 官方和国内 daocloud 都提供了一键安装的脚本,使得 Docker 的安装更加便捷。

bash
# 官方的一键安装方式:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
bash
# 国内 daocloud一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh

检查是否安装成功

bash
docker version
# 或者
docker info

换源

bash
# 没有该文件就新建
vim /etc/docker/daemon.json

写入

json
// 换源后记得重启
{
  "registry-mirrors": [
    "https://2oj9nmjj.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://dockerhub.azk8s.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io",
    "https://noohub.ru",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud"
  ]
}

刷新重启

bash
sudo systemctl daemon-reload

sudo systemctl restart docker

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

bash
sudo usermod -aG docker $USER

Docker 服务的启停

Docker 是服务器----客户端架构。命令行运行 docker 命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动

bash
# service 命令启动
sudo service docker start

# systemctl 命令启动
sudo systemctl start docker

# 查看docker服务状态
sudo systemctl status docker

# 停止docker服务
sudo systemctl stop docker

# 检查docker服务是否开启开机启动
sudo systemctl is-enabled docker

# 启用docker服务开机启动
sudo systemctl enable docker

# 禁用docker服务开机启动
sudo systemctl disable docker

# 重新启动docker服务
sudo systemctl restart docker

Docker 镜像的操作

docker 的官方仓库

bash
# 抓取镜像到本地
docker image pull library/镜像名
# 或(由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略)
docker image pull 镜像名

# 查看本机的镜像
docker image ls

# 删除镜像
docker rmi [Image ID]

# 运行image镜像生成容器实例
# (1):docker container run命令会从 image 文件,生成一个正在运行的容器实例
# (2):docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。
docker container run 镜像名

Docker 容器的操作

bash
# 新建容器(有些容器提供的是服务,有些容器是执行操作,所以提供服务的容器是不会自动停止的,一般需要手动停止,而执行操作的容器一般是执行完之后就自动停止)
docker container run 镜像名

# 列出本机正在运行的容器
docker container ls

# 列出本机所有容器,包括终止运行的容器
docker container ls --all

# 删除容器(终止运行的容器文件,依然会占据硬盘空间,删除之后就不会)
docker container rm [containerID]

# 启动容器(每次执行【docker container run 镜像】名都会生成一个新的容器,要想重复使用容器需要用下面命令)
docker container start [containerID]

# 停止容器
docker container kill [containID]

# 停止容器(自行进行收尾清理工作再停止)
# (1):前面的docker container kill命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而docker container stop命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。
# (2):这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。
docker container stop [containerID]

# 查看容器输出
# docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。
docker container logs [containerID]

# 拷贝容器
# docker container cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。
docker container cp [containID]:[/path/to/file] .

# 在容器的 Shell 执行命令
# docker container exec命令用于进入一个正在运行的 docker 容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。
docker container exec -it [containerID] /bin/bash

# 退出容器
exit

参考链接

阮一峰的网络日志-Docker 入门教程