Docker_Docker与虚拟机的区别
镜像命令
docker version #查看docker版本
docker info #系统信息
docker 命令 --help #万能命令 帮助
docker rmi 容器id #删除镜像
docker pull #下载镜像
容器命令
docker run [可选参数] image
参数说明
--name=\"Name\" 容器名字
--d 后台方式运行
--it 试用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
(宿主机端口:容器端口)
-P(大写) 随机指定端口
-a所有容器
-q只显示容器id
docker ps查看运行容器
whereis nginx #查看配置文件
curl localhost:端口号
--name:给容器命名
进入和退出容器
docker run -it centos /bin/bash #进入容器
exit #退出容器并停止
ctrl+P+Q #退出不停止
删除容器
docker rm 容器id
docker rm -f(强制意思) $(docker ps -aq)
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止容器
常用其他命令
后台启动
docker run -d 镜像名
#问题docker ps,发现centos 停止了
#常见的坑;Docker容器使用后台运行,就必须要有一个前台进程(比如要it进去),容器发现没有就会自动停止!
常看日志
-t 时间戳
-f打印跟随最新的日志
--tail 数字显示最后多少条
docker logs -tf --tail 10 容器id
#没有日志自己写一段shell脚本
\"while true;do echo maoyun;sleep 1;done\"
[root@iZbp11rgqf9v8t1rlvtz6jZ ~]# docker run -d centos /bin/sh -c \"while true;do echo maoyun;sleep 1;done\"
[root@iZbp11rgqf9v8t1rlvtz6jZ ~]# docker ps
CONTAINER ID
6ac21bb94529
查看容器进程信息
docker top 容器id
UID PID PPID C STIME TTY TIME
root 7879 24922 0 09:49 ? 00:00:00
root 24922 24900 0 09:35 ? 00:00:00
查看镜像的元数据
docker inspect 容器id
进入容器
方式1:docker exec -it 容器id /bin/bash 跟run区别是不会创建新的容器
方式2:docker attach 容器id
#正在执行当前代码...
docker exec #进入容器会开启一个新终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,不会有新进程!
从容器上拷贝到主机
docker cp 容器id:容器的路径 目的的路径
touch 文件
rm 文件
总结
port # 查看映射端口对应的容器内部源端口
pause # 暂停容器 ps # 猎户容器列表
pull # 从docker镜像源服务器拉取指定镜像或者库镜像
push # 推送指定镜像或者库镜像至docker源服务器
restart # 重启运行的容器 rm # 移除一个或多个容器
rmi # 移除一个或多个镜像 (无容器使用该镜像才可删除,否则需要删除相关容器才可继续或 -f 强制删除)
run # 创建一个新的容器并运行一个命令
save # 保存一个镜像为一个 tar 包【对应 load】
search # 在 docker hub 中搜索镜像
start # 启动容器 stop # 停止容器
tag # 给源中镜像打标签
top # 查看容器中运行的进程信息
unpause # 取消暂停容器
version # 查看 docker版本号
wait # 截取容器停止时的退出状态值
kibana怎么连es?
什么是portainer?
dokcer的图形化界面管理工具!提供一个后台面板供我们操作!
docker run -d -p 8088:9000\\
--restart=always -v /var/run/docker.sock:/var/run/docker/sock --privileged=true portainer/portainer
一般不用随便玩玩就好了!
comiit镜像!!!
docker run -it -p 8080:80 tomcat
把webapps复制到webapps里面
docker commit -a=“maoyun” -m=“add webapps app” 容器id tomcat02::版本号
docker commit -a=\'maoyun\' -m=\'add webapps app\' 9091951e0202 tomcat02:1.6
**容器数据卷**
什么是容器数据卷?
docker理念:将应用和环境打包成一个镜像!
如果把数据都放在容器中,当容器删除,数据就丢失了,所以我们要把数据持久化!==需求==
mysql容器也一样。==Mysql数据可以存在本地==
容器之间可以有一个共享的技术!Docker容器产生的数据同步到本地!
这就是卷技术!把容器的目录挂载到Linux上面!
总结:容器之间也可以共享数据,把数据同步到Linux主机上,可以自定义文件夹
使用容器卷
-v类似-p
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器目录
好处:以后我们就可以直接在主机上修改,容器会同步!
安装Mysql
tag:版本号
-e 环境配置 密码
docker run --name 别名 -e MYSQL_ROOT_PASSWORD=pw -d mysql:tag
具名和匿名挂载
#匿名挂载
docker run -d -P --name nginx01 -v /ect/nginx nginx
#查看所有的volume的情况
docker volume ls
#这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!
#具名挂载(大多数用这个)
通过-v 卷名:容器内路径
任何确定具名挂载还是匿名挂载?
-v 容器路径 #匿名挂载
-v 卷名:容器内面 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
扩展
初始Dockerfile
DockerFile就是用来构建docker镜像的构建文件!命令脚本!之前用得是commit。
镜像是一层一层的,所以脚本也是一个个命令,每个命令都是一层!
方式2:docker build -f dockerfile -t maoyun/contos .
-f:表示脚本的路径
-t:给镜像去新名字
.是生成到哪个位置
总结步骤:
1、先创建一个dockerfile文件,名字可以随意,建议dockerfile
2、文件中的内容指令(大写)参数
简单理解,这里的每个命令,就是镜像的一层!
启动自己的容器


要是没有挂载需要我们手动挂载 -v 卷名:路径
数据卷容器
通过--volumes-from进行容器共享
如图
多个mysql共享
结论:
容器之间配置信息传递,数据卷容器的生命周期一直持续到没有容器使用为止。
一旦你持久到本地,本地的数据是不会被删除!
**DockerFile**
dockerfile构建过程
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件!
步骤:开发,部署,运维。。。缺一不可
dockerFile:构建文件,定义了一切的步骤,源代码
dockerImages:通过dockerFile构建生成的镜像,最终要发布和运行的产品。
Docker容器:容器就是镜像运行起来提供服务器
FROM #基础镜像,一切从这里开始构建
MAINTAINER(maintainer) #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #添加内容,要干什么事比如tomacat镜像
WORKDIR(workdir) #工作的目录
VOLUME #存东西地方,挂载卷
EXPOSE #对外暴露端口
RUN #启动
CMD #启动时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT(entrypoint) #启动时候要运行的命令,可以追加命令。
ONBUILD #当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
CORY #类似ADD,将我们文件拷贝到镜像中。
ENV #构建的时候设置环境变量
实战测试
/home/dockerfile/mydockerfile
## Base images 基础镜像FROM centos## MAINTAINER 维护者信息MAINTAINER maoyun## 配置环境变量ENV MYPATH=/usr/local## WORKDIR 进入工作目录(相当于cd命令)WORKDIR $MYPATH## RUN 执行命令(安装vim和ifconfig命令)RUN yum -y install vimRUN yum -y install net-tools## EXPOSE 暴露交互端口EXPOSE 80 ## CMD 构建容器后执行命令CMD echo $MYPATHCMD echo \"----- END -----\"CMD /bin/bash
提示报错vim
ERROR: failed to solve: process \"/bin/sh -c yum -y install vim\" did not complete successfully: exit code: 1
可能是没有联网原因!或者yum仓库不可用
解决:
FROM centosMAINTAINER maoyun# 修复 YUM 仓库配置RUN sed -i \'s/mirrorlist/#mirrorlist/g\' /etc/yum.repos.d/CentOS-* && \\ sed -i \'s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g\' /etc/yum.repos.d/CentOS-*ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vim net-tools && \\ yum clean allEXPOSE 80CMD echo \"Working directory: $MYPATH\" && \\ echo \"---end---\" && \\ /bin/bash
实战tomcat镜像
- 准备镜像文件tomca压缩包,jdk压缩包
- 编写dockerfile文件
镜像发布到阿里云
- 登录阿里云
- 找到容器镜像服务
- 创建命名空间
- 创建镜像仓库
小结:
**Docker网络**(容器编排 集群部署)
ip addr #查询内部网络地址
理解Docker0
docker会分配一个docker0。linux可以ping到容器内部
evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连接着协议,一段彼此相连。
正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备
docker使用的是Linux的桥接,宿主机就是Docker的网桥
自定义网络
容器互连!
查看网络 docker network ls
网络模式:
bridge:桥接模式(默认)
none:不配置网络
host:与宿主机共享网络
Docker0(默认也就是桥接),域名不可用,但是--link可以打通(有局限性),麻烦不能反向访问比如2访问1,1不能访问2,他原理就是在2的host去配置了1的桥接
创建自定义网络:
--driver bridge
--subnet 192.168.0.0/16 网关从192.168.0.2-192.168.255.255
--gateway 192.168.0.1
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
跨网络操作别人要连通
docker network connect 网络(mynet) tomcat01
实战部署redis集群
Docker Compose容器编排工具
使用YAML文件来配置所有需要运行的Docker容器,名称为docker-compose.yml
从 GitHub 下载最新版 Docker Compose 的二进制文件:
curl -L \"https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose#赋予执行权限sudo chmod +x /usr/local/bin/docker-compose(可选)创建符号链接将二进制文件链接到 /usr/bin 目录,方便全局调用:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version
在线不行就离线下载
https://github.com/docker/compose/releases
将其执行文件改名放到/usr/local/bin下
或者:
sudo curl -L \"https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP \'tag_name\": \"\\K(.*)(?=\")\')/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose
启动容器:docker-compose up -d
几百个微服务一个一个启动麻烦死!
docker swarm init --advertise-addr ip地址
docker swarm init:初始化节点
docker swarm joji:加入一个节点
获取令牌
docker swarm join-token manager
docker swarm join-token worker
总结步骤:
1、生成主节点init
2、加入(管理者,worker)
扩展到k8s
云原生时代(趋势)
云应用