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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 学习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


相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
523 3
|
4月前
|
存储 Ubuntu Linux
学习docker
学习docker
63 1
|
4月前
|
运维 Kubernetes 开发者
Docker Swarm学习
【10月更文挑战第5天】
52 3
|
4月前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
55 1
|
5月前
|
存储 Ubuntu Docker
Docker学习
Docker学习
77 4
|
4月前
|
Linux 应用服务中间件 Shell
docker学习--docker容器镜像常用命令大全(简)
本文档详细介绍了Docker中的镜像命令与容器管理命令。镜像命令部分涵盖了镜像搜索、下载、上传等操作;容器管理命令则包括了容器的创建、启动、停止、删除及日志查看等功能。通过具体示例,帮助用户更好地理解和使用Docker相关命令。
267 0
|
4月前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
478 0
|
6月前
|
网络协议 Shell Docker
docker 学习之路
docker 学习之路
51 1
|
8月前
|
NoSQL Redis Docker
Docker再学习 - 实战
Docker再学习 - 实战
48 1
|
8月前
|
Java C++ Docker
Docker再学习 - 阿里加速配置篇
Docker再学习 - 阿里加速配置篇
403 0