一. 前言
其实笔者对偏运维向的技术了解的不多, 写这个系列的文章完全是为了记录. 因为在下前段时间花了2天的时间学习了docker的使用, 但果不其然. 一星期后只剩下了零星的记忆, 奈何当时觉得使用太简单了, 并没有留下笔记.
也是写这篇文章时才发现docker已经被Kubernetes弃用了, 新的解决方案叫Containerd. 怀着忐忑的心情一顿百度. 生怕刚谈的女...额不是, 刚学的技术还没有好好的感受, 就又要开始下一轮相亲, 了解别的技术是什么样的.
不过经过我的一通了解, 貌似他们说的弃用和跟我这个开发人员没多大关系. 详情请看在下搜索到的两篇文章:
https://zhuanlan.zhihu.com/p/330485868
https://zhuanlan.zhihu.com/p/336239777
所以呢, docker使用继续记录~
二. docker安装
先放个官网: https://hub.docker.com/
不过这个官网有点儿奇怪...因为它把我感觉最重要的东西放到底部去了...
打开官网, 滑到页面底部, 将看见这个.
ok, 下边儿就结合官方的说明, 记录一下docker的安装(基于Centos7):
- 更新系统
sudo yum update
- 移除旧版本的docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
- 安装依赖项及添加docker存储库
sudo yum install -y yum-utils // 1. 官方存储库, 有点儿慢, 建议使用 2 阿里镜像存储库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo // 2. 阿里镜像存储库 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装最新稳定版docker
// 总共三个 sudo yum install docker-ce docker-ce-cli containerd.io
- 启动docker
sudo systemctl start docker
- 验证是否安装成功(不必担心是否会有垃圾存在系统中, 放心执行)
sudo docker run hello-world
成功的样子
三. docker基础概念
高深的概念不会讲, 也不会讲...就使用上来看, 有一个
镜像
和一个容器
. 镜像和容器的关系, 就像类和对象. 一个类可以生成多个对象实例, 多个对象实例互不干扰. 这么说有点儿抽象, 具体的话呢, 就是docker中有tomcat的镜像, 有redis的镜像, 有mysql的镜像等等, 拉取一下这些镜像, 就能运行一个或多个这些中间件.而docker的主要作用在我看来主要有四点:
- 简化开发环境安装. 如果只安装一个确实还好, 但是前段时间学习shading jdbc...时间都浪费在虚拟机搭建和多个mysql安装上了...
- 环境统一. 将开发完毕的spring boot项目连同依赖的中间件(mysql, redis, mq, es等)一块儿制作成一个镜像, 部署直接拉取这个镜像跑起来完事儿.
- 简化部署. 可能你会觉得上边儿拉镜像运行已经很方便了...但是不妨想想假如有100+以上的服务器...有点儿绝望. 不过这就涉及到Kubernetes了, 这个在下不甚精通, 也就不多说了.
四. docker基础命令入门
所有的命令都可以加上--help
查看帮助, 包括docker
-
查看本地镜像:
docker images
-a 展示全部
-q 仅展示id
可以配合表达式使用:docker rmi -f $(docker images -qa) // 强制删除所有镜像
删除镜像:
docker rmi 镜像名或镜像id
比如:docker rmi hello-world
或者docker rmi d1165f221234
之所以可以通过镜像名删, 是因为每个镜像的名字是不能重复的(不同版本有不同的标识)
-f 强制删除
-
搜索镜像:
docker search 镜像名
, 例:docker search tomcat
不过我觉得如果是不熟悉的镜像还是到官网看看, 对于初学者来说, 对, 没错, 每个镜像都应该去官网看看. 比如说tomcat, 翻完它, 因为有非常多有用的东西: https://hub.docker.com/_/tomcat -
拉取镜像:
docker pull tomcat:9.0
, tomcat有非常多的版本, 可是我们上边儿的搜索只能看到一个大的版本. 所以需要到官网看看, 如果没有指定版本, docker会默认拉取最新的版本. 对于tomcat来说, 就是tomcat10.xxx了
拉取完毕可以使用docker images -a
查看一下
-
通过镜像启动容器:
docker run [可选参数] image
--name="tomcat01" #容器名字 tomcat01
-d #后台方式运行
-it # 使用交互方式运行 进入容器查看内容
-p # 指定容器的端口 -p 8080:8080, 后面的端口表示容器内的端口, 前面的端口表示映射到系统外部的端口, 这样就可以外部端口访问了.
启动一下:docker run -d -it -p 8080:8080 --name="tomcat01" tomcat:9.0
访问一下:
咦, 怎么404了? 不过这至少说明启动成功了. 这是因为docker的tomcat中的webapps目录中没有任何工程项目, 所以当然就404了. 查看容器:
docker ps
-a # 查看所有, 包括未运行的容器
-
上边儿的tomcat 404了, 我们来搞它一下, 进入容器看看. 进入一个容器通常有两种办法:
(1)docker attach 容器id
这种方式不常用, 会进入到容器正在运行的终端, 拿tomcat来说...就是会进到打印日志的终端. 而且还不能Ctrl C结束, 因为这样会把容器一块儿结束了, 来看看:
就这样, 然后就没反应了...Ctrl C结束吧...
然后容器也不运行了...
(2)docker exec -it 容器id bash
常用, 会开启一个新的终端进入容器. 最后的bash貌似是指定在终端中所使用的命令集, 总之必须加上. 试试看:
ok, 已经进入容器了. 看到那个webapps.dist了吗, 里边儿装的就是原本tomcat自带的工程项目, 让我们把它移动到webapps目录下:
然后退出容器:exit
, 接着重启容器... -
停止、启动、重启容器命令
停止:docker stop 容器id
启动:docker start 容器id
重启:docker restart 容器id
再次访问:
成功了! 恭喜你, 已经学会了docker的基本使用 容器的删除:
docker rm 容器id
-f # 默认无法删除运行中的容器, 可以加上-f参数强制删除
这个命令和删除镜像很像, 镜像是rmi
, 容器是rm
, 很好记.
下一篇将实战记录一下mysql的安装, 还有容器和系统之间文件的拷贝和同步, 因为经常需要将中间件的数据备份起来, 比如mysql的数据库. 最后, 感谢你的阅读, 如果文章中有说的不对的地方, 欢迎指正. 另外, 如果大家有使用上的小技巧也可以留言交流.