学习Docker,有这一篇就够啦!2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 学习Docker,有这一篇就够啦!

7.Docker网络模式

7.1.Docker默认三种网络模式

bridge:桥接模式

host:主机模式

none:无网络模式

查看网络模式:docker network ls


c1bccab742364b58997e3ba894d0ce34.jpg


7.2.Docker容器bridge模式

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


桥接拓补图:

82b723f38d8e4d518695eff203fe03e1.jpg



宿主机安装bridge-utils工具

yum -y install bridge-utils

e29135266bac4d8999f3d42d6a26727d.jpg


7d8d83158e7b48a98d1bacb6522f2306.jpg


进入nginx容器查看网卡

f0feb7fa5ae44aecafa5a3ef1ca91f43.jpg


NAT技术

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术,如下图所示。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。

e5a3eeb293e64f52835c52c46239611b.jpg


7.3.Docker容器host模式

host模式:该模式下容器是不会拥有自己的IP地址,而是使用宿主的ip地址和端口。

a3ed716894d948b8828c780fab696d43.jpg


启动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


e8aa1fb44cf74529ac40c61649a5f51e.jpg


cdaee79e43e04a39b4aeb884e0e97139.jpg

7.6.Docker容器间利用bridge网桥实现双向通信

创建一个新的bridge网桥:docker network create -d bridge my_bridge


查看网络模式:docker network ls


0aa0670e33494f6f854faf07de124424.jpg


启动第一个容器: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通

f7d61bb9fc7b48c084b7974ef3ea1a15.jpg


ce174efe693a46a9bbfd048f2011e7a2.jpg


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

53b1cfb6ce86498eb30c5371b2640cee.jpg


以特权模式启动容器

docker run -itd --name=centos2 --privileged=true centos:7

重复上面操作删除网关

92f5ed3801274187bb936ad9757887aa.jpg


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;”

浏览器访问,查看挂载信息


1b9a58e814f5432e865967e7ece56e3b.jpg5f0a420e283d4681bc15d33da7fa09c9.jpg



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/,基于各个软件开发或者有软件提供商开发的

非官方:其他组织或者公司开发的镜像,供大家免费使用

私有镜像仓库

公司自己搭建的,用于存放公司内部的镜像,自己管理,不提供给外部使用,避免了商业项目暴露出去的风险。

8e222503ddec49cda060ca56b1d5cab3.jpg


11.2.阿里云镜像仓库的搭建与使用

登录阿里云创建镜像仓库

5a725e350ee54706b681fda23cdf9995.jpg


选择个人版实例

d700601dc1ef4b9c82ce90fff2f21c1f.jpg


创建仓库

a790a9b27fa149babc4bc1c18304f912.jpg


选择代码源


24ee031b283d4d53b5cdb10b80e2a5b5.jpg

登录远端阿里云镜像仓库

 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端口

5d683e25a6954ccdbe274f8708e6261a.jpg


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


相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
49 1
|
4月前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
126 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
21天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
17 0
|
29天前
|
存储 Ubuntu Docker
Docker从入门到精通:Docker pull命令学习
了解Docker镜像下载方法!使用`docker pull`命令从[Docker Hub](https://hub.docker.com/)获取镜像。基本语法是`docker pull NAME[:TAG]`。例如,拉取Python最新镜像的命令是`docker pull python`或`docker pull python:latest`。可选参数包括`-a`(拉取所有标签)和`--quiet`(只显示进度条)。拉取后,用`docker images`检查镜像是否成功存储。开始你的容器化之旅吧!
33 0
|
29天前
|
关系型数据库 MySQL Go
Docker从入门到精通:Docker镜像相关命令学习
本文介绍了Docker中管理镜像的基本命令:`docker images`用于查看镜像列表,`docker search`从Docker Hub搜索镜像,`docker rmi`删除镜像,`docker tag`则用于标记和重命名镜像。通过这些命令,用户能有效管理自己的Docker镜像资源。
28 1
|
2月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
19 0
|
2月前
|
Cloud Native Linux 虚拟化
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
55 0
|
3月前
|
Ubuntu 应用服务中间件 Docker
docker-学习
docker-学习
22 0
|
3月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
56 0
|
4月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
49 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)