一、安装docker(b站复制出来的笔记图片加载不进来)

  • 查看 linux 内核

cat /etc/os-release

  • 查看linux版本

cat /etc/os-release

  • 打开官网

https://docs.docker.com

https://docs.docker.com/engine/

1、卸载旧的版本

  • 步骤地址:https://docs.docker.com/engine/install/centos/
  • 卸载命令:
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

2、需要的安装包

yum install -y yum-utils

3、设置镜像的仓库

sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的十分慢

国内的阿里云镜像加速地址:

 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 推荐使用阿里云镜像



#更新yum软件包索引

yum makecache fast

4、安装最新版的docker引擎( docker-ce社区版 ee企业版)

 sudo yum install docker-ce docker-ce-cli containerd.io

注意:如果安装遇到版本问题请尝试



yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm

注意:-后面的是指定版本号-1.2.13-3.1.el7.x86_64.rpm

-19.03.8-3.el7.x86_64.rpm

再执行上面步骤

5、启动docker

sudo systemctl start docker

查看版本: docker version

6、测试hellword

 sudo docker run hello-world

二、卸载docker

1、卸载依赖

yum remove docker-ce docker-ce-cli containerd.io

2、删除资源

rm -rf /var/lib/docker

# /var/lib/docker docker的默认工作路径

三、阿里云镜像加速

1、登录阿里云找到容器

在阿里云搜索“容器镜像加速”



2、找到镜像加速地址



3、配置使用(阿里官方的设置)

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://q9vuxdgv.mirror.aliyuncs.com"]

}

EOF

#重启服务

sudo systemctl daemon-reload

sudo systemctl restart docker

4、hell word run的运行流程图



三、底层原理

1、Docker是怎么工作的

Docker 是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

DockerServer 接收到Docker-Client的指令,就会执行这个命令!



2、Dock为什么比vm快

  • Docker有着比虚拟机更少的抽象层
  • Docker利用的是宿主机的内核,vm需要Guest OS
  • 所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了复杂的过程,秒级!

四、Docker常用命令

帮助命令:

1、docker version #显示版本信息

2、docker info #显示docker的系统信息,包括镜像和容器的数量

3、docker 命令 --help #帮助命令

还可以去官方文档找,Reference菜单左侧

https://docs.docker.com/engine/reference/commandline/



镜像命令:

  1. docker images 命令

https://docs.docker.com/engine/reference/commandline/images/



2、docker search mysql 搜索镜像命令

[root@iZwz97gjh27h6en3a7q4soZ ~]# docker search mysql

NAME                             DESCRIPTION                                    STARS    OFFICIAL  AUTOMATED

mysql                            MySQL is a widely used, open-source relation?? 10380    [OK]

mariadb                          MariaDB is a community-developed fork of MyS?? 3848     [OK]

也可以到docker应用商店去下载对应版本的mysql

#可选项,通过搜索来过滤

--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的



3、docker pull mysql 下载镜像

#下载镜像 docker pull 镜像名



不指定版本默认下载的最新版也就是最后一个版本,如果知道版本一定要在应用商店里有对应的版本



4、删除镜像 (rm删除,i镜像,-f全删)

docker rmi -f 镜像id #删除指定的容器

docker rmi -f 镜像id 镜像id 镜像id #删除多个容器

docker rmi -f $(docker images -aq) #删除全部的容器

容器命令:

说明:我们有了镜像才可以创建容器,用centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数]

#参数说明

--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器

-d 后台方式运行

-it 使用交互方式运行,进入容器查看内容

-p 指定容器的端口 -p 8080:8080

-p ip:主机端口:容器端口

-p 主机端口:容器端口(常用)

-p 容器端口

-P 随机指定端口

实例测试:启动并进入容器

docker run -it centos /bin/bash



#从容器中退出到主机

退出容器命令:exit

#列出所有的运行的容器



docker ps 命令

# 留空是列出当前正在运行的容器

-a #列出当前正在运行的容器+带出历史运行过的容器

-n #显示最近创建的容器 n表示个数

-q #显示容器的编号

实例:docker ps -a -n=1

docker ps -aq



退出容器

exit #直接容器停止并退出

Ctrl+P+Q # 容器不停止退出



删除容器

docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 用 rm -f

docker rm -f $(docker ps -aq) #删除所有的容器

docker ps -a -qlxargs docker rm #删除所有的容器

启动和停止容器的操作

docker start 容器id #启动容器

docker restart 容器id #重启容器

docker stop 容器id #停止当前正在运行的容器

docker kill 容器id #强制停止当前容器

常用其他命令

#命令docker run -d 镜像名!





查看镜像的元数据





从容器上拷贝到主机上









练习:

一、Docker 安装Nginx

1、搜索镜像

docker search nginx

2、拉取镜像

docker pull nginx

3、以后台的方式运行nginx容器

docker run -d --name nginx01 -p 80:80 nginx

注意小坑:

如果是指定别的端口阿里云可能没开启这个端口例如:docker run -d --name nginx01 -p 3399:80 nginx

远程访问不了,请用80端口指定

# docker run -d -p 80:80 nginx

# -d 后台运行

# --name 给容器命名

# -p 宿主机端口:容器内部端口

4、在宿主机中访问docker容器

curl localhost:3399 看到welcome to nginx!说明启动成功!,也可以在本地输入http://ip访问。

二、部署tomcat

作业:docker 来装一个tomcat

#官方的使用

  1. docker run -it --rm tomcat:9.0 //此命令就是用完即删除
  2. #我们之前的启动都是后台,停止了容器后,容器还可以查到 docker run -it --入门,一般用来测试,用完即删除。
  3. 一般用命令:docker pull tomcat:9.0下载
  4. 启动运行:docker run -d -p 3355:8080 --name tomcat01 tomcat tomcat01
  5. 查看镜像:docker images
  6. 进入tomcat01镜像查看:

docker exec -it tomcat01 /bin/bash

  1. 进入后发现webapps下没有了文件,因为这阿里云默认镜像的最小安装。
  2. 进入webapps.dist 目录后发现有webapps下的相关文件
  3. 我们用此命令:cp -r webapps.dist/* webapps 拷贝过去
  4. 在远端输入地址 ip:3355发现能正常访问tomcat主页。

思考问题:

我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我们要是可以在容器外部提供一个映射路径webapps,达到在容器修改文件名。

实战安装MySQL同步数据

思考:MySQL的数据持久化问题!

#获取镜像

docker pull mysql:5.7

docker images

#运行容器,需要数据挂载! #安装启动mysql,需要配置密码的,这是注意点!

#官方测试:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

#启动我们的mysql

-d 后台yunx

-p 端口映射

-v 卷挂载

-e 环境配置

--name 容器名字

cd到home目录下启动mysql

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

注意:如果启动不成功请尝试:

解决:

重启docker服务后再启动容器

systemctl restart docker



测试连接

在本地打开SQLyog

输入主机地址:,用户名:root,密码:123456发现可以连接



#在本地测试创建一个数据库,查看一下我们的映射的路径是否OK!

如果mysql服务停止,请使用下面命令启动

docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

假设我们把容器删除

发现,我们挂载到本地的数据库卷依旧没有丢失,这就实现了容器数据持久化功能!

Docker部署mysql以及配置&开机启动

docker exec -it id或者容器名称 bash

docker exec -it mysql bash

mysql -u root -p

Enter password: 密码

开放root或者其他用户远程登录权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

FLUSH PRIVILEGES;

启动全部镜像

docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

部署ES+Kibana

1、官网镜像地址:

https://hub.docker.com/search?q=elasticsearch&type=image

--net somenetwork   ?网络配置
2、运行命令
安装启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

2、查看运行的服务

docker ps

3、启动ES后发现很卡,ES很耗内存,我们看一下系统资源

查看 docker stats

4、尝试访问,发现成功

[root@localhost ~]# curl localhost:9200

{

"name" : "1ccc2d41ceba",

"cluster_name" : "docker-cluster",

"cluster_uuid" : "U3GIv6WzTYWVf0Znek3acg",

"version" : {

"number" : "7.6.2",

"build_flavor" : "default",

"build_type" : "docker",

"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",

"build_date" : "2020-03-26T06:34:37.794943Z",

"build_snapshot" : false,

"lucene_version" : "8.4.0",

"minimum_wire_compatibility_version" : "6.8.0",

"minimum_index_compatibility_version" : "6.0.0-beta1"

},

"tagline" : "You Know, for Search"

}

4、停掉服务,增加内存的限制

[root@localhost ~]# docker stop 1ccc2d41ceba

5、重新给es分配内存资源

  docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" elasticsearch:7.6.2



6、再次测试

[root@localhost ~]# curl localhost:9200

{

"name" : "a7277ceaed9a",

"cluster_name" : "docker-cluster",

"cluster_uuid" : "Jps3DLecRKmFcsZNW-P2wA",

"version" : {

"number" : "7.6.2",

"build_flavor" : "default",

"build_type" : "docker",

"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",

"build_date" : "2020-03-26T06:34:37.794943Z",

"build_snapshot" : false,

"lucene_version" : "8.4.0",

"minimum_wire_compatibility_version" : "6.8.0",

"minimum_index_compatibility_version" : "6.0.0-beta1"

},

"tagline" : "You Know, for Search"

}

作业:使用kibana连接es?思考网络如何才能连接过去

启动运行

docker run -d --name kibana  -p 5601:5601 kibana:7.6.2

一、防火墙的开启、关闭、禁用命令

(1)设置开机启用防火墙:systemctl enable firewalld.service

(2)设置开机禁用防火墙:systemctl disable firewalld.service

(3)启动防火墙:systemctl start firewalld

(4)关闭防火墙:systemctl stop firewalld

(5)检查防火墙状态:systemctl status firewalld

二、使用firewall-cmd配置端口

1、查看防火墙开放的端口

firewall-cmd --list-ports

9001/tcp 9002/tcp 3344/tcp 3355/tcp

2、开启防火墙端口

firewall-cmd --zone=public --add-port=3399/tcp --permanent

success

3、重新加载配置:firewall-cmd --reload

4、查看防火墙状态:firewall-cmd --state

5、关闭防火墙端口:firewall-cmd --zone=public --remove-port=3399/tcp --permanent

三、端口暴露

  1. 启动centos7.4
  2. 开启8080端口为例:
  3. 第一步:
  4. 输入命令: firewall-cmd --zone=public --add-port=8080/tcp --permanent
  5. 注:开启8080端口
  6. 第二步:
  7. 输入命令: firewall-cmd --reload
  8. 注:更新防火墙规则
  9. 第三步:
  10. 输入命令: firewall-cmd --zone=public --query-port=8080/tcp
  11. 注:查看端口是否生效

到此虚拟机暴露端口配置完成了!!!!

==============================================

通过外部端口访问kibana

docker run -d -p 3399:5601 --name kibana01 kibana kibana01

发现访问不了kibana,提升和es版本不一致

1、使用命令docker ps -a查看当前运行下的镜像进程。

2、停止进程命令:docker stop (c608062bf46f)

进程号

3、删除这个镜像:docker rm c608062bf46f

4、重新下载运行对应的版本并重复上述步骤

docker run -d --name kibana  -p 5601:5601 kibana:7.6.2
docker run -d -p 3399:5601 --name kibana01 kibana kibana01

5、通过命令行访问kibana

curl localhost:9200

Kibana server is not ready yet

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://localhost:9200 -p 5601:5601 -d kibana:7.6.2

// docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.18.100:9200 -p 5601:5601 -d kibana:7.5.1

可视化

portainer(先用这个)

docker run -d -p 8088:9000 \

--restart=always -v /var/run/docker.sock: /var/run/docker.sock --privileged=true portainer/portainer

Rancher(CI/CD再用)

什么是portainer?

Docker图形化界面管理工具!提供一个后台面板供我们操作!

docker run -d -p 8088:9000 \

--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

p34:

删除全部镜像

1、命令:docker rmi -f $(docker images -aq)

2、通过docker 内部tomcat镜像访问其他网络地址

docker run -d -P --name tomcat01 tomcat

3、查看容器内部的网路地址

ip addr

docker 会分配一个网卡地址,每次重启docker 地址就会变

docker exec -it tomcat01 ip addr

Linux 可以ping 通docker 容器内部!

思考:一个场景,我们编写一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题。

测试:

ping 容器中两个tomcat的网络地址,发现ping不通

命令:docker exec -it tomcat02 ping tomcat01

通过--link 就可以解决了网络连通问题。

docker run -d -P --name tomcat03 --link tomcat02 tomcat

通过tomcat03 ping tomcat02 发现可以ping通,就是通过一个--link 就ping通,以后可以用服务名来连接。

docker exec -it tomcat03 ping tomcat02

反向可以ping 通吗?

查看 hosts 配置,在这里原理发现!

docker exec -it tomcat03 cat/etc/hosts

本质探究:--link就是我们在hosts配置中增加了一个172.18.0.3 tomcat02 312857784cd4

我们现在玩Docker已经不建议使用--link了!

自定义网络!不适用docker()!

docker()问题:他不支持容器名连接访问!

自定义网络如何操作

查看所有的docker网络

docker network ls

网络模式

bridge : 桥接 docker(默认)

none:不配置网络

host:和宿主机共享网络

container:容器网络连通,(用的少,局限很大)

测试

#我们直接启动的命令 --net bridge ,而这个就是我们的docker01

docker run -d -P --name tomcat01 --net bridge tomcat

#docker0特点,默认域名不能访问, --link可以打通连接!

#我们可以自定义一个网络!

#--driver bridge

#--subnet 192.168.0.0/16 (192.168.0.02 -192.168.255.255)

#gateway 192.168.0.1

docker network create --driver --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

#查看自己配置的网络

docker network inspect mynet

#再次测试ping连接

docker exec -it tomcat-net-01 ping 192.168.0.3 #发现可以ping通

#现在不使用--link也可以ping名字了!

docker exec -it tomcat-net-01 ping tomcat-net-02

我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络

好处:

redis-不同的集群使用不同的网络,保证集群是安全和健康的

mysql-不同的集群使用不同的网络,保证集群是安全和健康的

网络连通

测试打通 tomcat01 - mynet

docker network connect mynet tomcat01

# 连通之后就是将 tomcat01 放到了 mynet 网络下

# 一个容器两个ip地址!

# 阿里云服务,公网ip 私网ip

结论:假设要跨网络操作别人,就需要使用docker network connect

实战:redis集群部署



创建网卡

docker network create redis --subnet 172.38.0/16

# 通过脚本创建六个redis配置

for port in $(seq 1 6);\

do\

mkdir -p/mydata/redis/node-${port}/conf

touch /mydata/redis/node-${port}/conf/redis.conf

cat<<EOF>/mydata/redis/node-${port}/conf/redis.conf

port 6379

bind 0.0.0.0

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

cluster-announce-ip 172.38.0.1${port}

cluster-announce-port 6379

cluster-announce-bus-port 16379

appendonly yes

EOF

done

docker run -p 637${port}:6379 -p 1637${port}: 16379 --name redis-${port} \

-v /mydata/redis/node-${port}/data : / data:/data \

-v /mydata/redis/node-${port}/conf/redis.conf :/etc/redis/redis.conf \

-d --net redis --ip 172.38.0.1${port} redis: 5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;\

我们使用了Docker后搭建集群太简单了

SpringBoot微服务打包Docker镜像

1、架构springboot项目

2、打包应用

3、编写dockerfile

4、构建镜像

5、发布运行

【狂神说Java】Docker最新超详细版教程通俗易懂笔记相关推荐

  1. Docker02 狂神Docker视频学习笔记 :【狂神说Java 哔哩哔哩】Docker最新超详细版教程通俗易懂

    目录 0. 视频源 0. 学习网址 基础篇 1. Docker概述 1.1 Docker为什么出现? 1.2 Docker历史 1.3 Docker能干什么 2. Docker安装 2.1 Docke ...

  2. 【狂神说Java】Docker最新超详细版教程通俗易懂 - 学习笔记

    传送门:官方参考文档 | Docker Hub镜像仓库 | [狂神说Java]Docker视频教程 Docker概述 Docker 是一个便携的应用容器,基于 Go 语言开发的.它可以让开发者打包应用 ...

  3. 【狂神说Java】Docker最新超详细版教程通俗易懂

    Docker 入门 笔记整理来源 B站UP主狂神说Javahttps://space.bilibili.com/95256449/ Docker概述 Docker为什么出现? 一款产品: 开发–上线 ...

  4. 【狂神说Java】Redis最新超详细版教程通俗易懂1 2020-04-01:NoSQL分类,Redis Windows和Linux安装,性能测试,String,List,Set,Hash,Zset

    要讲的知识 nosql讲解 阿里巴巴架构演进 nosql数据模型· Nosql 四大分类. CAP BASE Redis 入门 Redis安装(Window & Linux服务器) 五大基本数 ...

  5. Docker超详细版教程通俗易懂 -之- 入门篇

    前言 学习Docker,你可以熟练的操作命令,能够把你的项目构建成Docker镜像! 是后端开发人员必备的技能!下面是自己的学习笔记,希望能帮助到需要的你! 特别感谢哔哩哔哩狂神:[狂神说Java]D ...

  6. Docker超详细版教程通俗易懂 -之- 进阶篇

    此刻的你,已成功入门Docker.让我们一起继续深造(内容不难,很有意思) 容器数据卷 什么是容器数据卷 docker的理念回顾:将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删 ...

  7. Redis 超详细版教程笔记

    视频教程:[狂神说Java]Redis最新超详细版教程通俗易懂 视频地址:https://www.bilibili.com/video/BV1S54y1R7SB 目录索引 nosql 阿里巴巴架构演进 ...

  8. Docker最新超详细教程——基本操作

    Docker最新超详细教程--基本操作 一.镜像操作 镜像名称 镜像命令 案例一:拉取.查看镜像 案例二:保存.导入镜像 二.容器操作 容器相关命令 容器三个状态 暂停与停止有什么差别? 案例一:创建 ...

  9. Docker最新超详细教程——安装与部署

    Docker最新超详细教程--安装与部署 安装Docker CentOS安装Docker 1. 卸载(可选) 2. 安装yum工具 3. 更新本地镜像源 4. 安装docker 5. 注意事项 关闭防 ...

  10. CENTOS 7 踢用户_从零学ELK系列(三):Centos安装Docker(超详细图文教程)

    CSDN博客地址(关注,点赞) 人工智能推荐 GitHub(Star,Fork,Watch) [前言] 为了更加真实的模拟生产部署环境,不仅需要Linux环境支持,而且ELK需要在不同的机器上部署:再 ...

最新文章

  1. java开发的简易学生成绩管理系统
  2. 教你用Python解决非平衡数据问题(附代码)
  3. memcache和redis对比
  4. KGmailNotifier-Gmail 邮件关照轨范
  5. 【转载】Apache Spark Jobs 性能调优(二)
  6. python面向对象的三个基本特征 含义和作用简介_面向对象语言的三个基本特征各自特点及优势...
  7. PHP 与Python 读取大文件的区别
  8. Dojo-API介绍
  9. mvc的Controller返回值类型ActionResult详解
  10. Java——集合(输入一串字符串,统计字符串中每个字符出现的次数)
  11. jupyter notebook一些实用技巧
  12. web架构设计经验分享(转)
  13. 使用QT + cocos2dx制作工具
  14. mysql编码方式查看_Mysql必读查看mysql编码方式 mysql数据库编码查看方法
  15. DSP之CCS软件使用一
  16. Java - springboot中md5加解密工具类
  17. SteamVR 错误代码 108 / 203 / 208 / 301 / 306 / 308 / 400 / 405 排解方法
  18. 怎么在Excel里输入可以打钩的选择框?
  19. windows 端口被System进程占用怎么解决?
  20. Day434.订单库存服务分布式事务的最终解决 -谷粒商城

热门文章

  1. ArcGIS小图斑根据相邻地类属性融合。
  2. 英伟达显卡最新驱动安装过程
  3. 批量给视频加水印的快速方法
  4. 2020年秋季学期Python教材推荐与选用参考
  5. RGB格式图片转YUV图片
  6. ODAC的tnsnames.ora文件
  7. SBI集团“逆市”入股玖富,背后意味着什么?|一点财经
  8. u大师装iso系统linux,u大师给苹果电脑装win7win10系统
  9. win10与win7系统之间文件共享
  10. C#联合halcon实现字符缺陷检测源码 机器视觉 字符识别 4个巴斯勒相机SDK开发 pin测量 io输入输出