浅谈docker的使用
一、前言
我写本博客的目的
- 我是学后台开发的,对于docker的学习是非常有必要的
- 对于docker来说主要是记其的命令,而写这边博客最重要的目的是以后我有需求的时候随时查阅,如果对于其他有用也可以随时转发。
- 这篇博客只描述docker最基本的使用,需要深入了解的可能无法满足,若以后有时间我会写一份深入了解docker的博客
二、什么是docker
用比较官方的语言来说,docker是一种虚拟化技术,虚拟化是一种资源管理技术。这种官方的话解释起来也没啥意思,就拿docker的一个图片来说吧,他的图片很生动形象,一条鲸鱼,上面堆着很多的集装箱,
- 我们的操作系统就相当于这条大鲸鱼,这条大金鱼在docker中我们常称之为宿主机
- docker就是这上面的集装箱,可以装载不同的东西,如:tomcat,mysql等软件
这些软件互不影响,对我们开发来说好处大大的有,我们不用因此过多的担心什么端口冲突的等无脑问题。
三、docker的好处
- 提供一个简单的轻量级的建模方式
- 职责逻辑分离
- 兼容软件依赖的环境不同的问题
- 快速高效的的开发生命周期
- 鼓励面向服务的框架
docker和虚拟机的区别。这个大家去百度吧,我不想过多的解释,没必要
四、docker的镜像和组件
在进入正题之前,还是要解释一下什么是镜像,什么是组件
- 镜像:镜像是构建Docker世界的基石。用户基于镜像来运行自己的容器。
镜像也是Docker生命周期中的 “构建” 部分。 - 容器:Docker 可以帮助用户和部署容器,用户只需要把自己的应用程序或
者服务打包放进容器即可,容器是基于镜像启动起来的,容器中可
以运行一个或者多个进程,我们可以认为 镜像是Docker生命周期中
的构建或打包阶段,而容器则是启动或者执行阶段
五、进入正题
1、安装
条件如下:
- 宿主机需要64位操作系统,不支持32位
- 需要 Linux3.8 或者更高版本内核
- 内核必须支持一种适合的存储驱动
- AUFS
- vfs
- btrfs
- ZFS
- 默认的存储驱动通常是 Device Manager 或者 AUFS
- 内容必须支持并开启 cgroup 和 命名空间功能
检查
内核检查
uname -a
输出如下正常
Linux wangzh 4.15.0-123-generic #126-Ubuntu SMP Wed Oct 21 09:40:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
存储驱动检查
ls -l /sys/class/misc/device-mapper
输出结果如下正常
lrwxrwxrwx 1 root root 0 Nov 27 07:13 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
经过上诉检查,我们的虚拟机满足做docker宿主机的要求
2、安装docker引擎
- 第一步:切换到root用户(这样我们权限就无敌了)
su root
密码是你们虚拟机管理员的密码,别来问我
- 第二步:卸载旧版本(如果没有安装过就不用卸载)
apt-get remove docker docker-engine docker.io
- 第三步:更新系统
apt-get update
- 第四步:获取https请求
apt-get install apt-transport-https cacertificates curl software-properties-common
- 第五步:添加dockers官方的密钥
curl -fsSL
https://download.docker.com/linux/ubuntu/gpg | apt-key add -
- 第六步:设置稳定版docker仓库
add-apt-repository "deb [arch=amd64]
https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable"
- 第七步:再次更新系统
apt-get update
第八步:安装dockers ce
apt-get install docker-ce
注意:dockers有两个版本一个是ce版本,一个是ee版本,ee版本是要收费的,ce已经足够我使用了,如果ee不够大家使用,大家交钱去吧*(支持正版哦)
- 最后一步:测试
docker run hello-world
看到如下界面:恭喜你成功了
2、配置国内的站点
因为docker访问国外的镜像是很慢的,所所以我们要配置国内的站点,这样用起来就快了了
国内可用的如下:
- Docker 官方中国区:https://registry.docker-cn.com
- 网易:http://hub-mirror.c.163.com
- 中国科技大学:https://docker.mirrors.ustc.edu.cn
- 阿里云:https://y0qd3iq.mirror.aliyuncs.com
在/etc/docker/下新建一个文件:daemon.json(我记得默认是没有的哦)
vim daemon.json
重启docker服务
service docker restart
查看是否生效
docker info|grep Mirrors -A 1
已经生效了
3、使用docker
关闭docker
systemctl stop docker
启动dockers
systemctl start docker
重启docker
systemctl restart docker
查看docker的状态
systemctl status docker
开机自动启动docker
systemctl enable docker(我没用过)
查看镜像
docker images
搜索镜像
docker search 镜像名称
删除镜像:
我就拿我有的nginx删了给你们做测试吧
docker rmi IMAGE ID(镜像的id)
注意:如果不能删除镜像:建议停止镜像中的容器,实在不行就删除镜像中的容器(后面会有容器的教程)
看,这不就删除了吗(废了为师很大的劲,我先删除了容器,)
拉取镜像:(不填写镜像版本,默认拉去的是最新的版本)
docker pull 镜像名称:版本
我来拉去nginx的镜像做测试,拉去最新的吧(可能时间比较长,主要是看你的网速,因为他是从网上拉去下来的)
docker pull nginx
我们查看,发现镜像已经下载好了
还有一个命令是删除所有镜像,我这就不演示了
docker rmi `docker images -q`
4有关容器的基本命令
查看所有的容器
docker ps -a
查看,正在运行的容器
docker ps
查看最后一次运行的容器
docker ps -l
查看已经停止的容器
docker ps -f status=exited
4.2 容器的创建等相关命令
交互式创建容器
docker run -it --name=容器名称 镜像名称:标签
/bin/bash
我再创建一个nginx容器给大家做测试吧
docker run -it --name=nginx nginx:latest /bin/bash
看,我们就进入了容器
第二步:我们查看当前目录如下(命令为:ls):
我们创建一个容器(nginx)并且启动他的命令如下
docker run --name=nginx -p 80:80 -d nginx
如图发现已经启动成功
退出容器:
exit
停止容器:
docker stop 容器的id