一、docker为何物?

docker是一种容器技术,通俗来说,我们使用docker主要原因之一是为了保证环境的统一,以免出现开发环境没有问题,生产环境就出现的问题的情况。我们将程序以容器进行运行,能够减少很多不必要的麻烦和操作。我们常见的软件或者平台应用,大多数都支持docker的安装方式,简单方便。

二、docker如何使用?

(一)、安装和配置使用

docker可以抽象的理解成一个软件,本次演示在ubuntu系统上面进行安装和配置

准备条件:

  1. 添加 Docker 官方 GPG key

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

echo "deb [arch=$(dpkg --print-architecture) 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. 更新

sudo apt update

sudo apt-get update

安装

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

验证

#查看Docker版本
sudo docker version

#查看Docker运行状态
sudo systemctl status docker

修改镜像源

软件使用的源默认是国外的源,下载速度很慢...(除非你有...),这里更改为国内的镜像源

/etc/docker/daemon.json 中写入以下内容,如果没有这个文件,则创建

{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}

(二)、获取镜像

镜像可以简单理解成“代码”,就是别人(官方)发布的程序,我们需要获取到本机

通过命令:docker pull 仓库名/镜像名:标签 来获取。仓库名是存放镜像的仓库,标签可以理解镜像的“版本”。

本次演示就是获取:docker pull mysql:5.7

下载完成后,通过:docker images 来查看镜像


这里我们看到已经获取到了tag(标签)为5.7的mysql镜像

(三)、运行容器

镜像是“代码”,容器就是理解成代码运行起来,是一个“程序”。

我们通过命令:docker run 来运行容器,虽然参数挺多,但其实常用的也就是几个。

参数名称

参数

说明

-d

null

容器后台运行,就是不在窗口输出内容

-p

[绑定的IP:]宿主机端口:容器内端口

端口映射,通过访问宿主机的端口进而访问容器内的端口,可选宿主机IP

-P

null

随机端口进行映射

-i

null

以交互模式运行容器,通常与-t同时使用

-t

null

为容器重新分配一个伪输入终端,通常与-i同时使用

-it

null

开启一个可交互式的终端

--rm

null

容器退出时删除这个容器,同时也删除容器的记录,容器挂掉后删除

--name

string

创建容器并给予一个名字

--restart=always

自动重启

这些命令其实都不需要死记硬背,常用的其实就是那么几个。

本次运行MySQL镜像的命令:docker run -d --name my_mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7

  • -e :设置环境变量,这里是设置root用户的密码

  • --name:设置容器的名称

  • -d:就是让容器后台运行,没有这个参数,关闭终端的话,容器会挂起的(挂起的意思是容器停止运行了,但是还在)

现在我们通过命令:docker ps 就能看到我们运行好的容器了

三、总结

通过以上的简单演示,我们大概可以感受到容器技术带来的方便。

  1. 安装程序方便:以往我们安装程序需要根据系统选择特定的版本等等,还需要考虑到兼容性等等问题,通过docker技术,我们只需要拉去镜像,然后运行容器,即可享受服务,简直不要太好。

  2. 统一环境:细心的读者发现,这要我的主机安装了docker,也就是搭建好docker环境,那么无论哪种环境,我都是运行同一个镜像,运行相同的容器,不会出现A机器上没问题,B机器上有问题的情况,大大减少了问题出现次数。

以上就是本次文章的docker简单演示了。

但其实,以docker这个容器技术来说,还有很多的内容需要给大家呈现:

  • 镜像管理:本文只是演示了镜像拉取,那镜像如何进行管理呢?如何删除、修改等等?如何导出导入?这些都是需要学习的。

  • 容器管理:除了简单运行,还有其他的内容,容器的其他参数,运行容器怎么讲容器里面的数据进行持久化存储?如何将容器弄成镜像?如何管理容器等等?

  • 网络以及数据卷的管理:这个也是挺重要的,容器的网络也有挺大的文章,有些应用可能因为网络管理设置会出现一系列的问题。

进阶的内容就更多了,如何将程序打包成镜像?如何通过编排工具,一口气部署多个容器?在大型架构里面,如何将容器技术结合k8s来进一步集群部署程序应用?这些内容就太多了,这里作者打算日后有机会再专门写一系列文章给大家看。

文章有任何问题欢迎大家留言指正,谢谢大家!