7.Docker网络模式
7.1.Docker默认三种网络模式
bridge:桥接模式
host:主机模式
none:无网络模式
查看网络模式:docker network ls
7.2.Docker容器bridge模式
桥接模式是docker的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker0网桥。
桥接拓补图:
宿主机安装bridge-utils工具
yum -y install bridge-utils
进入nginx容器查看网卡
NAT技术
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术,如下图所示。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。
7.3.Docker容器host模式
host模式:该模式下容器是不会拥有自己的IP地址,而是使用宿主的ip地址和端口。
启动nginx容器命令并防火墙放开80端口
docker run -d --net=host mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
7.4.Docker容器none模式
none模式无法连接外网,一般用于测试用,基本不怎末使用
7.5.Docker容器间基于Link实现单项通信
实现单向通信通过 “–link 容器名” 来指定,在需要向其他容器通信的容器上加上–link
Docker容器桥接模式每次启动都是随机分配ip,当容器挂掉,ip重变,所以要指定容器名
注意:要先启动被通信的容器,否则–link 找不到容器名会报错
启动数据库容器:docker run -itd --name=mydb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
在启动centos:docker run -itd --name mycentos --link mydb centos:5.7
7.6.Docker容器间利用bridge网桥实现双向通信
创建一个新的bridge网桥:docker network create -d bridge my_bridge
查看网络模式:docker network ls
启动第一个容器:docker run -itd --name=centos1 centos:7
启动第二个容器:docker run -itd --name=centos2 centos:7
把第一个容器加入到网桥:docker network connect my_bridge centos1
把第二个容器加入到网桥:docker network connect my_bridge centos2
验证两个容器是否可以相互ping通
8.Docker容器特权模式
8.1Docker容器特权模式
特权模式就是赋予容器大于root的权限,在容器中有些操作root用户也无法执行,这回就需要去给容器特权模式。
启动一个普通的容器
docker run -itd --name=centos1 centos:7
进入容器执行删除gateway操作
docker exec -it centos1 /bin/bash
yum -y install net-tools
route -n
route del default gw 127.0.0.1
以特权模式启动容器
docker run -itd --name=centos2 --privileged=true centos:7
重复上面操作删除网关
9.Docker容器Volume数据共享
9.1使用dockerfile进行数据共享
FROM centos:7 VOLUME ["/usr/local"]
执行dockerfile后就会将容器的usr/local下的内容映射到宿主机var下的随机文件夹而且不能改变
9.2使用volume容器共享创建nginx集群
使用**–volumes-from**实现容器于容器之间的共享
创建nginx1
docker run -itd -v /nginx/html/:usr/local/nginx/html/ -p 8080:80 --name=nginx1 centos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
创建nginx2
docker run -itd -p 8081:80 --volumes-from nginx1 --name=nginx2 centos:nginx /usr/local/nginx/sbin.nginx -g “daemon off;”
创建nginx3
docker run -itd -p 8081:80 --volumes-from nginx1 --name=nginx3 centos:nginx /usr/local/nginx/sbin.nginx -g “daemon off;”
浏览器访问,查看挂载信息
10.Docker-Compose容器操作
10.1.Docker-Compose安装
下载1.25.0 docker compose
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 这个是官方地址,可能比较慢,推荐使用下面的国内镜像地址 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 国内镜像地址 curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
添加可执行的权限
chmod u+x /usr/local/bin/docker-compose
测试版本
docker-compose --version
10.2.Compose常用指令
编写简单的docker-compose.yml文件
version: '3' services: redis: image: centos:redis
运行docker-compose.yml文件:docker-compose up -d(后台运行)
查看容器运行情况:docker-compose ps
删除容器:docker-compose down
删除容器并且删除volumes:docker-compose down --volumes
停止启动容器:docker-compose stop
进入容器:docker-compose exec redis bash
注意:要在有docker-compose的目录下执行docker-compose up -d
10.3.Compose yml的常用配置
docker-compose.yml的三大部分:version(yml的版本)、services(容器服务)、networks(网络模式)
compose设置网络模式:network_mode: “网络模式”(host、nono、bridge)
compose设置端口映射:
host: - "宿主机端口:容器端口"
compose设置文件共享
volumes: - "宿主机路径:容器路径"
compose设置额外参数
command: /usr/local/nginx/sbin/nginx -g "daemon off;"
编写docker-compose.yml文件
version: '3' services: nginx: image: nginx:latest ports: - "8080:80" redis: image: redis:latest ports: - "6379:6379"
检验本机端口占用情况:
ps -ef | grep nginx
netstat -tunlp | grep 进程号
10.4.Docker-Compose搭建个人博客
docker-compose.yml文件编写
version: "3.2" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}
运行docker-compose.yml
docker-compose up -d
docker-compose down:删除容器和网络,会保留wordpress数据库
docker-compose --volumes:全部删除
10.5.Docker-Compose 详细分析
version: "3.2" #yml语法版本 services: #容器服务 db: #容器名 image: mysql:5.7 #镜像 volumes: #挂载,宿主机与容器共享文件 - db_data:/var/lib/mysql #采用的是卷标的形式挂载 restart: always #服务重启,always总是 environment: #环境 MYSQL_ROOT_PASSWORD: somewordpress #数据库密码 MYSQL_DATABASE: wordpress #数据库名 MYSQL_USER: wordpress #用户名 MYSQL_PASSWORD: wordpress #密码 wordpress: depends_on: #依赖于某个容器,只有依赖的容器成功启动,才会启动wordpress服务 - db #-db 是参数是依赖的容器名称 image: wordpress:latest #镜像 volumes: #挂载,宿主机与容器共享文件 - wordpress_data:/var/www/html #采用的是卷标的形式挂载 ports: #设置映射端口 - "8000:80" restart: always #服务重启,always总是 environment: #环境设置 WORDPRESS_DB_HOST: db:3306 #采用db的配置 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: #卷标的形式挂载 db_data: {} wordpress_data: {}
11.Docker镜像仓库实战
11.1.镜像仓库简介
什么是镜像仓库
存放很多镜像的仓库
为什么要使用镜像仓库
起到备份作用
方便其他机器下载使用
镜像仓库的种类
公共镜像仓库
官方:https://hub.docker.com/,基于各个软件开发或者有软件提供商开发的
非官方:其他组织或者公司开发的镜像,供大家免费使用
私有镜像仓库
公司自己搭建的,用于存放公司内部的镜像,自己管理,不提供给外部使用,避免了商业项目暴露出去的风险。
11.2.阿里云镜像仓库的搭建与使用
登录阿里云创建镜像仓库
选择个人版实例
创建仓库
选择代码源
登录远端阿里云镜像仓库
docker login --username=李祥asdds registry.cn-hangzhou.aliyuncs.com
打包镜像仓库
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lixiang19_test/mysql:[镜像版本号]
推送到远端阿里云镜像仓库
docker push registry.cn-hangzhou.aliyuncs.com/lixiang19_test/mysql:[镜像版本号]
从阿里云镜像仓库拉取
docker pull registry.cn-hangzhou.aliyuncs.com/lixiang19_test/mysql:[镜像版本号] (注意先登录阿里云镜像仓库)
11.3.企业核心之harbor仓库搭建
前置环境:docker、docker-compose、openssl、python2.7以上
上传harbor压缩包解压:tar -xvf harbor…
修改配置:harbor.yml
修改主机名(注意空格):hostname: 192.168.0.151
修改密码(注意空格):harbor_admin_password: Harbor12345
进入到解压包里执行脚本prepare
执行完prepare脚本,会生成docker-compose.yml文件,执行 sh install.sh脚本
访问Harbor,默认用户名admin
访问默认是80端口
11.4.企业核心之harbor仓库配置和使用
配置使用docker仓库
默认docker只允许访问https仓库
如果要访问http的仓库需要自己配置
配置允许访问http仓库:/etc/docker/daemon.json
{ "insecure-registries":["http://192.168.0.151"] }
重启docker服务:systemctl restart docker
创建自己的仓库名
登录 docker login --username=admin 192.168.10.105
打包镜像:docker tag 容器id 192.168.0.105/xdclass/mysql:5.7
上传docker镜像:docker push 192.168.10.105/xdclass/mysql:5.7
拉取docker镜像:docker pull 192.168.10.105/xdclass/mysql:5.7
登出:docker logout
注意:docker login后会有一个登录凭证(可删除,下次需要密码):/root/.docker/config.json
11.5.本地镜像容器的载入与载出
两种办法:
保存镜像
保存容器
保存镜像:
docker save 镜像ID -o /usr/local/镜像名称.jar
载入镜像
docker load -i 镜像名称.jar
保存容器
docker export 容器ID -o /usr/local/容器名称.jar
载入容器
docker import 容器名称.jar
微服务打包docker镜像
最外层 mvn clean install
子项目:mvn install -Dmaven.test.skip=true dockerfile:build
启动:docker run --name 容器名字 -d -p 端口映射 镜像id