一、docker为何物?
docker是一种容器技术,通俗来说,我们使用docker主要原因之一是为了保证环境的统一,以免出现开发环境没有问题,生产环境就出现的问题的情况。我们将程序以容器进行运行,能够减少很多不必要的麻烦和操作。我们常见的软件或者平台应用,大多数都支持docker的安装方式,简单方便。
二、docker如何使用?
(一)、安装和配置使用
docker可以抽象的理解成一个软件,本次演示在ubuntu系统上面进行安装和配置
准备条件:
添加 Docker 官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加 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
更新
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
来运行容器,虽然参数挺多,但其实常用的也就是几个。
这些命令其实都不需要死记硬背,常用的其实就是那么几个。
本次运行MySQL镜像的命令:docker run -d --name my_mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7
-e
:设置环境变量,这里是设置root用户的密码--name
:设置容器的名称-d
:就是让容器后台运行,没有这个参数,关闭终端的话,容器会挂起的(挂起的意思是容器停止运行了,但是还在)
现在我们通过命令:docker ps
就能看到我们运行好的容器了
三、总结
通过以上的简单演示,我们大概可以感受到容器技术带来的方便。
安装程序方便:以往我们安装程序需要根据系统选择特定的版本等等,还需要考虑到兼容性等等问题,通过docker技术,我们只需要拉去镜像,然后运行容器,即可享受服务,简直不要太好。
统一环境:细心的读者发现,这要我的主机安装了docker,也就是搭建好docker环境,那么无论哪种环境,我都是运行同一个镜像,运行相同的容器,不会出现A机器上没问题,B机器上有问题的情况,大大减少了问题出现次数。
以上就是本次文章的docker简单演示了。
但其实,以docker这个容器技术来说,还有很多的内容需要给大家呈现:
镜像管理:本文只是演示了镜像拉取,那镜像如何进行管理呢?如何删除、修改等等?如何导出导入?这些都是需要学习的。
容器管理:除了简单运行,还有其他的内容,容器的其他参数,运行容器怎么讲容器里面的数据进行持久化存储?如何将容器弄成镜像?如何管理容器等等?
网络以及数据卷的管理:这个也是挺重要的,容器的网络也有挺大的文章,有些应用可能因为网络管理设置会出现一系列的问题。
进阶的内容就更多了,如何将程序打包成镜像?如何通过编排工具,一口气部署多个容器?在大型架构里面,如何将容器技术结合k8s来进一步集群部署程序应用?这些内容就太多了,这里作者打算日后有机会再专门写一系列文章给大家看。
文章有任何问题欢迎大家留言指正,谢谢大家!
参与讨论
(Participate in the discussion)
参与讨论