为什么选择 Docker

传统虚拟机的缺点:资源占用十分多、冗余步骤多、启动很慢。

Docker 的优势:使用容器化技术,项目代码带上环境配置打包成镜像,上传到镜像仓库,别人下载镜像即可运行,不再需要复杂的环境配置。

容器化技术不是模拟一个完整的操作系统。所以 Docker 之所以能火,是因为它比普通虚拟机轻巧!

Docker 和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
  • Docker 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了;
  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。

Docker 中的几个术语

Docker的相关术语:

  • 镜像 (image)
  • 容器 (container)
  • 仓库 (repository)
    镜像可以认为是一些软件和配置环境的整体打包。

容器可以认为是一个精简的 Linux 系统,它是通过镜像运行起来的实例,镜像运行起来就是容器。从这个角度来讲,镜像就类似于 Java 中的 Class 类型,由它可以创建多个实例。

镜像是存在硬盘上的东西,镜像运行起来,就形成一个容器,容器才是真正跑起来的程序。只不过在 Docker 中,我们可以进入容器,做一些操作,然后再把容器中的改动提交形成一个新的镜像。

仓库类似于 Github,我们写好的代码会提交到 Github 上面进行保存和管理,方便在其他地方也能下载代码。镜像仓库也是类似的,制作好的镜像,就把它放到镜像仓库,方便其他人直接用镜像部署。

Docker 安装与卸载

环境准备,Linux 要求内核 3.0 以上,我这里使用的阿里云服务器(CentOS 8),查看相关信息的命令如下:

NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

Docker 的安装参照其官方文档按照步骤来就完全可以(Docker 的官方文档相当的详细),网址:https://docs.docker.com/engine/install/

1、卸载旧版本,如果服务器上没安装过 docker 就不用进行此步骤。

yum remove docker 

2、需要的安装包:

yum install -y yum-utils

3、设置镜像的仓库,官方文档中默认是国外的仓库,不推荐使用,这里推荐使用国内的,如下:

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 软件包索引:

yum makecache fast # 注意:如果是 centos 8 版本则直接使用 yum makecache 即可

4、安装 docker ,docker-ce 代表为社区版,而 ee 代表是企业版,此处安装社区版。

yum install docker-ce docker-ce-cli containerd.io

注意:版本为 centos 8 时执行上述命令时会报错,说的是 containerd.io >= 1.2.2-3,解决方法:

(1)降低 docker 的版本;(2)如果不想降低 docker 版本,那么就更新 containerd.io 的版本:

wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y  containerd.io-1.2.6-3.3.el7.x86_64.rpm

然后重新执行:

yum install docker-ce docker-ce-cli containerd.io

5、启动 docker。

systemctl start docker

6、查看是否安装成功。

[root@eric ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false
 ...

显示 docker 的版本信息则说明 docker 安装成功。

7、配置阿里云镜像加速器。

把上述的代码直接一步一步执行即可。

8、测试运行 hello-world。

第一次运行会自动从镜像仓库中拉取最新镜像,然后再运行镜像。

docker run hello-world 

等待出现以下内容,说明 hello-world 镜像拉取并运行成功。

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

9、查看当前 Docker 中下载的镜像信息。

➜  ~ docker images         
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
hello-world           latest              bf756fb1ae65        4 months ago        13.3kB

卸载 Docker(除非不用,否则干嘛要卸载呢):

#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2. 删除资源
rm -rf /var/lib/docker # /var/lib/docker 是 docker 的默认工作路径!

Docker 常用命令

Docker 中的命令有很多,也不可能全部记完,还是像学习 Linux 命令一样,只要多练习实践,就能够快速掌握。另外,只要 Linux 玩得好,那么 Docker 这一块怎么玩都不会错。

Docker 命令官方文档:https://docs.docker.com/reference/,这里整理一下常用的命令。

帮助命令

docker version   # 显示docker的版本信息
docker info      # 显示docker的系统信息,包括镜像和容器的数量
docker --help    # 帮助命令

镜像命令

docker images   #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search   #搜索镜像
docker pull     #下载镜像
docker rmi      #删除镜像 

容器命令

容器就是运行起来的镜像。

docker pull 名称[:tag] # 拉取镜像,有了镜像才可以创建出容器
docker run 镜像        # 新建容器并启动,此时会新键容器
docker ps              # 列出所有运行的容器
docker ps -a           # 列出所有的容器(包含历史)
docker rm 容器id        # 删除指定id的容器,注意和 rmi 的区别
docker start 容器id     # 启动容器,根据容器 id 来运行,此时不会新键容器
docker restart 容器id   # 重启容器
docker stop 容器id      # 停止当前正在运行的容器
docker kill 容器id      # 强制停止当前容器

其他命令

后台启动命令

# 命令 docker run -d 镜像名
➜  ~ docker run -d centos
a8f922c255859622ac45ce3a535b7a0e8253329be4756ed6e32265d2dd2fac6c

查看日志

docker logs --help
Options:
      --details        Show extra details provided to logs 
*  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
*      --tail string    Number of lines to show from the end of the logs (default "all")
*  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)   

还有很多命令就不一一列举了,需要的时候查一下官方文档就可以了

如果觉得我的文章对你有用,请随意赞赏