docker是啥?
Docker的思想来自于集装箱。
在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了
(容器容器讲得就是这条大鲸鱼)
好像还是不够俗~
可以让电脑开启更多台虚拟机的一种技术
传统虚拟机 |
容器化技术 |
1、启动賊慢,应为要加载所有应用所需要的库,虚拟出一整套硬件,运行一个完整的操作系统 2、占资源,一开始要分配内存、cpu给他 且可能只是分配它实际没用到 3、步骤麻烦、各种虚拟机软件安装、镜像啊 到处找 。vm、Virtual box |
1、相互隔离,且共用宿主机内核,不需要虚拟一整套硬件 2、库崩了也不会影响其他应用 3、启动快了很多 4、步骤简单了很多 5、分享也较为方便、扩容、迁移也更加方便 |
结婚3大件,docker也有三大件:
Docker镜像(Images):用于创建Docker容器的模板 (钞票模版)
Docker容器(Container):容器是独立运行的一个或一组应用 (印出来的一箱箱钞票)
Docker仓库(repository):用来保存打包好的软件镜像 (放我一箱箱钞票的地方)
为啥我要学docker?
我写的小工具无法在小伙伴的电脑上啊~~ 让它给小伙伴跑太繁琐,自己头都大了~~~
我想尝尝redis 敲下get 敲下set ~ 好吧~太难装了 放弃~
咦~ 他会appium也 我也学一下~ 好吧~ 环境太难搞 放弃~
突然想起蔡工说用docker啊~ 好吧~ 六个月后的我来抱抱佛脚~
由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。
docker个人学习路线
1、Docker安装
2、Docker命令
3、Docker镜像
4、容器数据卷
5、仓库与镜像分享
6、DockerFile
7、Docker网络原理
下面这些都是啥?
7、IDEA整合Docker
8、Docker Swarm
9、CI/CD jenkins
........
学得越多发现自己越无知的可笑~
Docker安装
俺是mac
下载地址: https://download.docker.com/mac/stable/Docker.dmg (傻瓜式安装省略1w字~)
配置镜像加速 (不要问为什么~ 你懂得!)
我使用的是网易的镜像地址:http://hub-mirror.c.163.com
验证是否安装成功命令
$ docker --version
Docker version 17.03.1-ce-rc1, build 3476dbf
Docker命令
命令手册: https://docs.docker.com/engine/reference/run/
一、镜像相关命令
查看本地主机上的所有镜像
docker images 【-q】
REPOSITORY 镜像仓库源 TAG 镜像标签 IMAGE ID 镜像id
可选项 -q 只显示 镜像id
搜索镜像
docker search 加需要的镜像
下载镜像
docker pull 镜像名 【:tag】
分层下载,其他镜像里有的就可以不用下载那一层
删除镜像
docker rmi -f 镜像id
骚写法-递归删除所有镜像
docker rmi -f $(docker images -q)
二、容器相关命令
启动容器
docker run
例子: docker run hello-world
例子: docker run -it centos /bin/bash
可选参数
--name='给容器起名字'
-d 后台运行
-it 使用交互方式运行
-p 指定端口 -p 8080:8081 (左边是主机端口/右边是容器端口)
-P 随机指定端口
run命令流程(第一次用有些好奇在简书搜了下run的流程)
容器互通的实现方法
查看当前docker网络
docker network ls
创建一个新的 Docker 网络。
docker network create -d bridge test-net
参数说明:
-d:参数指定 Docker 网络类型,有 bridge、overlay。
运行一个容器并连接到新建的 test-net 网络:
docker run -itd --name test1 --network test-net ubuntu /bin/bash
再运行一个容器并加入到 test-net 网络:
docker run -itd --name test2 --network test-net ubuntu /bin/bash
完成 ,相互ping了下均 ok
退出容器
exit (直接容器停止且退出)
Ctrl+P+Q (退出容器,容器继续运行)
查看运行中容器
docker ps
可选参数
-a 查看曾经运行过的容器
-q 只展示容器id
删除容器
docker rm 容器id
骚写法-删除所有镜像
docker rmi -f $(docker images -q)
启动和停止容器
docker start 容器id
docker restart 容器id (重启容器)
docker stop 停止当前运行中容器
docker kill 容器id 强制停止当前容器 (stop报错了就用这个)
查看容器日志
docker logs -tf --tail 10 容器id
案例:
docker run -d centos /bin/sh -c "while true;do echo lucax;sleep 1;done"
查看容器中进程信息
docker top 容器id
查看容器信息 (比如查挂载情况)
docker inspect 容器id
修改容器内的挂载
~~
进入容器
docker exec -it 容器ID /bin/bash
三、其他
显示docker版本信息
docker version
显示docker 系统信息(含镜像和容器数量)
docker info
帮助命令
docker --help
仓库
DaoCloud 道客网络: https://hub.daocloud.io/
打包个镜像给别人的方法
打个压缩包的
提交镜像更改生成新的镜像文件
docker commit -a "author" -m "commit message" 容器id name:tag (注意name镜像名称要全部小写)
docker镜像导出,tar镜像包可以拷贝到其他机器docker环境中加载
docker save hello -o hello.tar
docker镜像加载
docker load -i hello.tar
发现: (数据卷后的文件是无法保存在镜像的,要打包到另外一个目录)
docker file
https://www.linuxidc.com/Linux/2018-09/154111.htm
1、编写一个dockerfile文件
2、docker build 构建成一个镜像
3、docker run 运行镜像
Docker Hub
实战:
思路:
Portainer容器可视化管理工具
kubernetes
k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等~
总结:
优点
1、更高效的利用系统资源
2、更快速的启动时间
3、一致的运行环境
5、更轻松的迁移
6、部署方便