加载中...

docker学习应用


基本介绍

  • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 白话解释:docker可以理解成是手机中的应用市场,有了应用市场,就不用自己一个一个百度搜索软件并下载了,直接在应用市场中可以一键下载!

  • 白话作用:docker帮助我们安装微服务开发需要的中间件,使用简单的命令控制docker安装即可,不需要自己手动安装!

安装

清空原有组件残留

之前安装过旧版本,使用一下命令可以卸载!

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

设置docker仓库

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker. 安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

配置yum阿里镜像

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

安装docker

docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

yum install -y docker-ce

启动docker

关闭防火墙

docker涉及端口映射,建议先关闭防火墙,避免端口屏蔽!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
  2. 启动和停止docker
systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

docker restart $(docker ps -a -q) # 重启所有容器

docker -v

配置docker阿里镜像

更新docker对应的仓库,为阿里镜像,提升下载速度!

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://as08lme3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

摘抄自尚硅谷毕设项目:https://www.wolai.com/atguigu/m4z5zhigfZdUSvfTUJvYZM

docker基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

    软件的安装包

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    安装包安装以后的运行程序

  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

    存放安装包的仓库

    http://hub.docker.com 查看镜像

    我们的目标,就是从仓库拉去镜像,启动运行成容器,即可!

镜像&容器操作命令

镜像相关命令

容器相关命令

基本练习

  • 拉去nginx镜像

输入: http://hub.docker.com

搜索:nginx

docker pull nginx //默认 最新 latest
docker pull nginx:版本号

docker images 查看版本
  • 镜像备份和加载

使用save和load进行镜像本地备份和镜像加载!

docker save 镜像名 -o /输出的位置+文件名
docker load -i /输入的镜像文件

命令

  • docker启动命令
systemctl start docker
  • 使容器处于后台运行状态
ctrl p + q
  • 查看内存状态
docker stats
  • 查看本地浏览器运行地址页面
curl localhost:8080
  • docker启动容器命令
# ( --name ssm ) 给容器命名
# -d 后台运行 -p 宿主机端口
docker run -it centos ( --name ssm )/bin/bash

docker启动nginx

访问成功

  • docker启动特定容器命令并进入容器
docker start c65e128bc615
docker attach c65e128bc615
  • docker查看进程
docker ps
# -a 容器
docker ps -a
  • docker设置容器和宿主机文件共享
docker run -it -v /myDataVolume:/dataVolumeContainer centos
  • docker 检查容器
docker inspect c65e128bc615
  • docker 启动tomcat (指定映射端口号) 将虚拟机的7777端口号映射到容器中的8080端口号
docker run -it -p 7777:8080 tomcat02:1.0
  • docker 关闭正在运行中的容器
docker stop c65e128bc615 
docker kill c65e128bc615 
  • docker删除容器和镜像
# 删除镜像
docker ps -a
docker rm 容器name
# 删除所有容器
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

# 删除镜像
docker images
docker rmi REPOSITORY:TAG
  • docker 批量关闭正在运行中的容器
docker rm -f $(docker ps -qa)
  • 下载镜像源
docker pull centos
  • 建立一个ssm/centos数据卷 Dockerfile
# 建立一个文件 Dockerfile 
mkdir Docker 
# 编写内容
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,------------successful"
CMD /bin/bash
# 构建容器
docker build -f /mydocker/Dockerfile -t ssm/centos .
# 运行容器
docker run -it ssm/centos 
# 进入 dataVolumeContainer1 并创建文件container01.txt
cd dataVolumeContainer1
touch container01.txt
# 另开一个终端
docker ps 
docker inspect 容器id
找到dataVolumeContainer1: /var/lib/docker/volumes/60f8b0b4209fc59b92c2e36f40b7f1c5ccea3032344bcf9a17951ce08cacd423/_data
# 另开一个终端,查看共享文件,并创建container02.txt 测试dataVolumecontainer1中是否有container02.txt
cd /var/lib/docker/volumes/60f8b0b4209fc59b92c2e36f40b7f1c5ccea3032344bcf9a17951ce08cacd423/_data
touch container02.txt
  • 容器数据卷传递共享
# 启动 dc01容器
docker run -it --name dc01 ssm/centos
# 创建 dc01_add.txt
cd dataVolumeContainer2
touch dc01_add.txt
# 复制dc01 到 dc02
docker run -it --name dc02 --volumes-from dc01 ssm/centos
touch dc02_add.txt
# 复制dc01 到 dc02
docker run -it --name dc03 --volumes-from dc01 ssm/centos
touch dc03_add.txt
# 回到dc01验证即可
docker attach dc01
# 即使删除dc01,dc02和dc03也数据共享

容器数据卷间传递共享

  • 删除版本号为none的镜像

在这里插入图片描述

# 修改版本号
docker tag 0d120b6ccaa8 centos:1.1.1
# 再删除即可
docker rmi centos:1.1.1

docker运行各种软件

  • 此处省略下拉软件步骤

docker运行MySql

# 第一步 拉取mysql
docker pull mysql
# 第二步 运行mysql容器 自己配置的 仅限于我的镜像
docker run -p 12345:3306 --name mysql02 -v /ssmuse/mysql/conf:/etc/mysql/conf.d -v /ssmuse/mysql/logs:/logs -v /ssmuse/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17
# 新下载的mysql用这条命令即可
# --cha... 防止中文乱码
docker run --name msql -v /msql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci  

# 第三部  进入容器 -it 进入执行
docker ps
docker exec -it 容器name /bin/bash
# 第四步 进入mysql
mysql -uroot -p123456

启动成功

  • 数据备份
docker exec mysql 容器id sh -c 'exec mysqldump --all-databases -uroot -p"123456" ' > /ssmuse/all-databases.sql

docker运行redis

# 第一步 运行redis容器
docker run -p 6379:6379 -v /ssmuse/redis/data:/data -v /ssmuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes
# 第二部  进入容器 使用容器ID进入 因为上面没设置 --name
docker ps
docker exec -it f988bd9567dc redis-cli

docker 运行Elasticsearch

  • 配置网络

es 搜索数据库】和kibana 【可视化工具】容器互联!

docker network create es-net
  • 加载镜像
# 需要进入到对应存储文件的位置
# 导入数据
docker load -i es.tar
docker load -i kibana.tar
  • 启动容器

    单点es容器运行

docker run -d \
  --name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

在浏览器中输入:http://ip地址:9200 即可看到elasticsearch的响应结果!

安装成功

单点运行kibana! 提供数据可视化!

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

此时,在浏览器输入地址访问:http://ip地址:5601,即可看到结果!

安装成功

打开DevTools,进行es库操作!

  • 配置ik[中文]分词器
docker volume inspect es-plugins
结果:
[
    {
        "CreatedAt": "2022-05-06T10:06:34+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

将ik解压,导入到_data下

docker restart es 即可!
  • 访问测试
POST /_analyze
{
  "analyzer": "standard",
  "text": "今天天气太好了!very good!"
}

# 使用ik分词器,进行中文分词!

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "今天天气太好了!very good!"
}

POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "今天天气太好了!very good!"
}

测试成功

ik分词器、elasticsearch,kibana均在阿里云盘

docker 运行Nginx

docker run --name mynginx -p80:80 -d nginx

docker启动nginx

访问成功

docker 运行Rabbitmq

# 启动容器
docker run \
 -e RABBITMQ_DEFAULT_USER=root \
 -e RABBITMQ_DEFAULT_PASS=123456 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:latest
 # 进入容器开启插件
 docker exec -it mq bash
 rabbitmq-plugins enable rabbitmq_management
 # 访问
 http://192.168.174.131:15672/
 # 此时输入用户米密码还是不能进去,这是因为rabbitmq只能本机访问
 # 进入rabbitmq添加用户
docker exec -it mq bash
rabbitmqctl list_users
rabbitmqctl add_user admin 这里是密码
# 设置管理员权限
rabbitmqctl set_user_tags admin  administrator
rabbitmqctl list_users
# 访问
账号: admin 密码:这里是密码

# 增加队列图形化页面
1. 进入容器内部
`docker exec -it 容器名字 /bin/bash`
进如容器后进到该目录下
`cd /etc/rabbitmq/conf.d/`
2. 执行命令
#修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf

3. 退出容器
 `exit`
4. 重启容器
 docker restart 容器名字或者Id

访问成功

没设置管员权限
成功进入

image-20221120182640991

docker中rabbitmq安装插件

  • 这里安装延时插件做示范

官网::https://www.rabbitmq.com/community-plugins.html

去github下载插件(版本要对应,版本可在rabbitmq客户端左上角看)https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/3.9.0

下载插件

  • 利用工具上传到任意目录,并执行命令
docker cp rabbitmq_delayed_message_exchange-3.9.0.ez mq:/plugins
  • 进入容器内部
docker exec -it mq /bin/bash
  • 查看插件
rabbitmq-plugins list

查看插件

  • 启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

启用成功

  • 重启即可启用插件
docker restart mq

  • 登录docker
# 本地登录
docker login -u19858165529
# 阿里云登录
docker login --username=秋水墨色染ssm registry.cn-hangzhou.aliyuncs.com
  • 发布镜像到dockerHub
# 修改镜像标签 (必须为dockerHub用户名+...)
docker tag ssm/centos 19858165529/centos:1.0
# 发布即可
docker push 19858165529/centos
  • 发布镜像到阿里云 ( [ ] 一定要去掉 )
$ docker login --username=秋水墨色染ssm registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/shaoshaossm/ssm:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/shaoshaossm/ssm:[镜像版本号]

# 本地删除发布的镜像并从阿里云上下载回来
docker rmi -f registry.cn-hangzhou.aliyuncs.com/shaoshaossm/ssm:1.1.0
docker pull  registry.cn-hangzhou.aliyuncs.com/shaoshaossm/ssm:1.1.0
  • springboot微服务打包Docker
# 将springboot jar 包和Dockerfile 传到 centos 上 
# Dockerfile内容如下:
FROM java:8
    ADD *.jar app.jar
    EXPOSE 8081
    ENTRYPOINT ["java","-jar","app.jar"]
    
# 构建镜像
docker  build -t ssm777 .
# 启动镜像
docker run -d --name demo -p 8081:8081 ssm777
# 运行测试
curl localhost:8081/say
# 运行结果
Hello SpringBoot!

Docker安装nacos

# 拉取镜像
docker pull nacos/nacos-server
# 启动容器
docker run --name nacos-quick -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:latest
# 访问
http://192.168.174.131:8848/nacos/#/login
账号:nacos 密码:nacos

访问成功


  • 若出现这种报错,需删除此容器
# 错误信息
Error response from daemon: Conflict. The container name "/mysql" is already in use by container "19ee5d825ff210ace68011ba7ab6bd6c1cc634e75f0a25a9934c720eab9367a1". You have to remove (or rename) that container to be able to reuse that name.
# 解决办法
docker rm -f 19ee5d825ff210ace68011ba7ab6bd6c1cc634e75f0a25a9934c720eab9367a1
# 或直接启动这个容器即可
docker start 19ee5d825ff210ace68011ba7ab6bd6c1cc634e75f0a25a9934c720eab9367a17
# 或查看所有容器,然后启动对应容器ID即可
docker ps -a
docker start 容器ID
  • 输入docker命令报错
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. ...
  • 原因可能是上一次没有正常退出docker,所以docker没有正常启动,在相应的/var/run/路径下找不到docker进程。解决办法:
sudo service docker restart

文章作者: shaoshaossm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 shaoshaossm !
评论
  目录