Skip to content

docker的介绍和使用

一、什么是docker

定义:一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 它是使用go语言编写,在LCX(linux容器)基础上进行的封装。

  1. 就是可以快速部署启动应用

  2. 实现虚拟化,完整资源隔离

  3. 一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)

二、使用docker的理由

  1. 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行

  2. 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动

  3. 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用

  4. 更好的资源隔离和共享

一句话:开箱即用,快速部署,可移植性强,环境隔离

三、docker镜像概念

Docker 镜像 - Docker images:容器运行时的只读模板,操作系统+软件运行环境+用户程序

Docker 容器 - Docker containers:容器包含了某个应用运行所需要的全部环境

Docker 仓库 - Docker registeries: 用来保存镜像,有公有和私有仓库,好比Maven的中央仓库和本地私服

四、docker网络模式

默认的三种网络模式:

  • bridge:桥接模式

  • host:主机模式

  • none:无网络模式

查看网络模式: docker network ls

五、bridge 桥接模式

桥接模式是docker 的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并 选择一个和宿主机不同的IP地址和子网分配给docker0网桥。

宿主机网卡 <---- nat ----> docker0网卡 <---- brige ----> 容器网卡(多个)

可以通过工具查看网卡状态

  • yum -y install net-tools

  • yum install -y bridge-utils

#查看当前网卡的桥接状态
brctl show

六、host 主机模式

该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。即所占用的ip和端口都是宿主机上的

七、none 无网络模式

none模式:关闭模式,无法连外网

八、docker单向通信

介绍基于link单向通信:先创建需要目标的容器,再创建需要连接的容器

启动mysql数据库容器:

docker run --name mydb -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:5.7

启动tomcat应用容器并link到mysql数据库:

注意:mydb 这个容器一定要存在!

docker run -itd --name tomcat1 --link mydb tomcat:tag
官方版的mysql 5.7 需要安装工具才有ping命令:
apt-get update && apt-get install iputils-ping

九、docker双向通信

基于Bridge网桥实现双向通信。

查看当前存在的所有网卡信息

docker network ls
  1. 创建一个新的网桥

    docker network create -d bridge my_bridge
  2. 启动容器

    docker run -itd --name centos1 centos:7
    docker run -itd --name centos2 centos:7
  3. 加入网桥

    docker network connect my_bridge centos1
    docker network connect my_bridge centos2
  4. 验证是否通过:分别进入两边的容器,根据容器名称ping,检查是否连通

十、docker特权模式

有的时候需要给予容器比root用户更高的权限,比如删除网关操作。一般这种情况比较少

给容器赋予特权模式

docker run -itd --privileged=true --name mycentos1 centos:7
#安装网络工具
yum -y install net-tools
#删除网关
route del default gw 172.17.0.1

十一、Volume数据共享

volume数据共享可以实现容器与容器之间的数据共享

简单的dockerfile,将宿主机的/usr/local和容器的/usr/local共享,即容器的路径挂载到宿主机的路径上

FROM centos:7
VOLUME ["/usr/local"]
  • 普通容器与宿主机直接的数据共享,通过-v实现

    docker run -itd  -v /usr/local:/usr/local --name centos1 centos:7
  • 创建新的容器,与centos1进行数据共享,会复制centos1上的所有-v的数据共享

    docker run -itd  --volumes-from centos1 --name centos2 centos:7

查看容器挂载信息,查看Mounts下的挂载信息

docker inspect 容器ID

十二、查找镜像的Volume

查看镜像信息

docker inspect 镜像id或名称

找到Volume选项

Volume

这里显示是镜像相关的卷

十三、离线镜像导入导出

#导出镜像导出镜像
docker image save ${image_name:tag} -o ${name.image}
#导入镜像
docker load -i ${name.image}