一、安装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/
镜像命令:
- docker images 命令
https://docs.docker.com/engine/reference/commandline/images/
[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 镜像名
不指定版本默认下载的最新版也就是最后一个版本,如果知道版本一定要在应用商店里有对应的版本
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
docker run -d --name Nginx01 -p 3399:80 Nginx
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
4、在宿主机中访问docker容器
curl localhost:3399 看到welcome to Nginx!说明启动成功!
图解:
#官方的使用
- docker run -it --rm tomcat:9.0 //此命令就是用完即删除
- #我们之前的启动都是后台,停止了容器后,容器还可以查到 docker run -it --入门,一般用来测试,用完即删除。
- 一般用命令:docker pull tomcat:9.0下载
- 启动运行:docker run -d -p 3355:8080 --name tomcat01 tomcat tomcat01
- 查看镜像:docker images
- 进入tomcat01镜像查看:
docker exec -it tomcat01 /bin/bash
- 进入后发现webapps下没有了文件,因为这阿里云默认镜像的最小安装。
- 进入webapps.dist 目录后发现有webapps下的相关文件
- 我们用此命令:cp -r webapps.dist/* webapps 拷贝过去
- 在远端输入地址 ip:3355发现能正常访问tomcat主页。
思考问题:
我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我们要是可以在容器外部提供一个映射路径webapps,达到在容器修改文件名。
部署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
三、端口暴露
- 启动centos7.4
- 开启8080端口为例:
- 第一步:
- 输入命令: firewall-cmd --zone=public --add-port=8080/tcp --permanent
- 注:开启8080端口
- 第二步:
- 输入命令: firewall-cmd --reload
- 注:更新防火墙规则
- 第三步:
- 输入命令: firewall-cmd --zone=public --query-port=8080/tcp
- 注:查看端口是否生效
到此虚拟机暴露端口配置完成了!!!!
==============================================
通过外部端口访问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 --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、发布运行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。