DOCKER概述
DOCKER的主要组成
docker引擎+docker容器+docker镜像+docker仓库
关系
容器和虚拟机的区别
虽然dockers可以理解为一个轻量级的虚拟机,但两者还是有本质的区别。
docker运行流程(架构)
有关容器的操作
查看容器内存使用情况
容器操作命令(结合上面图片理解)
1.拉取/上传镜像
docker pull 镜像名称:对应版本号 拉取
docker push 镜像名称 上传
2.查看本地镜像
docker images
3.删除本地镜像
docker rmi 镜像名
4.容器运行
docker run 镜像名
docker run -d 后台运行,不影响前台输入命令
docker run -d -p 22:33 端口映射,当主机端口22收到消息后就转发给容器的33端口,本机:主机
docker run -d -P P是随机映射,交给计算机
5.查看运行中的容器
docker ps 查看运行中的容器
docker ps -a 查看所有(运行和未运行)的容器
docker stats 查看容器状态
6.停止/启用容器
docker stop
docker start
7.容器重启
no:默认不重启
on-failure: 加上:3表示重启三次,均不成功后放弃重启
always:关闭了就重启
docker run -d -P --restart on-failure:3
指定容器环境变量
docker run -d -P -e(或者–env) JAVA_ENV=dev -e JAVA_VM=vm1
inspect查看容器相关信息
docker inspect 容器名
exec命令
docker exec -it 容器名 命令
exec是让容器执行命令
-it是让容器新开一个终端
限制容器内存与cpu
docker run -d -P -m 8m --cpus 1 容器名
docker网络通信
包括容器间的网络隔离、容器间的网络共享、管理多个子网下容器的ip
模式
bridge(桥接)模式
在主机中创建一个docker0的虚拟网桥,在docker0创建一对虚拟网卡,有一半是在宿主机一半是在容器中
主机通过ETH0找到docker0,然后进一步通过docker0的关联对找到容器的ETH0网卡
host主机模式
与主机在同一个网段吗,但同网段的可以不通过主机访问到容器,不太安全
none模式
完全隔离,即使宿主机被攻破了也无法通过网络来进入容器,只能通过exec等命令来进入
容器共享
只共享容器2的网卡和端口
自定义模式(推荐)
自定义网络,也要选一个网络连接方式(和外界的),然后指定子网,指定网关,再起一个名。注意子网和宿主机网段不一样,就不可访问。
docker network creat --driver bridge --subnet 192.168.50.0/24 --gateway 192.168.50.1 name
容器互联
桥接模式下互联
两个容器互联:docker run -d -P --name net1 --net bridge --link net1
自定义下的互联
容器1是默认网络模式,容器2是自定义,要想让两个不同网段的通信
docker network connect 容器2 容器1
dockerfile
是什么
docker提供的一个自定义构建镜像的配置文件,描述如何来构建一个对象
利用build命令,指定dockerfile文件,就可以按照配置的内容来把镜像构建出来
写好Dockerfile后,执行build命令构建镜像:
docker build -t 镜像名:版本号 .
即可生成镜像
容器编排
针对容器生命周期的快速方便管理
场景
例如部署项目时,容器间存在相互依赖。。。
集群部署的时候。。。
配置文件统一描述需要运行的服务相关信息,用它自动化的解析配置内容,并构建对应的服务。。。
Docker Compose(单机-在一台机器上部署多个容器)
docker compose程序有一个.yml文件,描述了容器运行时所需的各种配置:网络、数据卷、端口等等。
安装
curl -L “http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-
(
u
n
a
m
e
−
s
)
−
(uname -s)-
(uname−s)−(uname -m)” -o /usr/local/bin/docker-compose
下载下来改下执行权限即可
命令
services:需要运行的容器配置,可以理解为原先用 docker run 命令后面跟的一系列配置信息
networks:
volumes:
写好.yml,docker-compose up 启动(启动所有service)
docker-compose creat service名(只启动某个特定的)