Docker 容器技术,让你不再为环境而烦恼(二)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker 容器技术,让你不再为环境而烦恼

RabbitMQ

  1. 查询 RabbitMQ 镜像
docker search rabbitmq
  1. 拉取 RabbitMQ 镜像(以 3.7.12 版本为例)
docker pull rabbitmq:3.7.12
  1. 创建 RabbitMQ 容器
docker run -di --name=[容器名] -p [主机端口]:[容器端口] [镜像名称]:[版本]
docker run -di --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 rabbitmq:3.7.12

-di:守护方式创建容器
-p:主机与容器的端口映射


  1. 进入容器,启动 UI 插件
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management
  1. 浏览器访问【主机IP地址:15672 】098df4e4a023e69e57626bc92d56aaad.png

登录

ce6590e3025d4e69a2b8ae976222151b.png

  1. 到此 RabbitMQ 容器就部署完成了

Elasticsearch

  1. 查询 Elasticsearch 镜像
docker search elasticsearch
  1. 拉取 Elasticsearch 镜像(以 7.5.0 版本为例)
docker pull elasticsearch:7.5.0
  1. 修改虚拟内存大小
sysctl -w vm.max_map_count=262144
  1. 创建 Elasticsearch 容器
docker run -di --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -v /usr/local/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.5.0

-e "discovery.type=single-node":设置单节点
-e "cluster.name=elasticsearch":设置集群名


  1. 进入 Elasticsearch 容器,安装 IK 分词器
docker exec -it elasticsearch /bin/bash
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
  1. 退出 Elasticsearch 容器,重启 Elasticsearch 容器
exit
docker restart elasticsearch
  1. 浏览器访问【主机IP地址:9200】ec88877cc4e20e8cab210087525c51a1.png
  2. 到此 Elasticsearch 容器就部署完成了

Zookeeper

  1. 查询 Zookeeper 镜像
docker search zookeeper
  1. 拉取 Zookeeper 镜像(以 3.4.13 版本为例)
docker pull zookeeper:3.4.13
  1. 创建 Zookeeper 容器
docker run -di --name=zookeeper -p 2181:2181 zookeeper:3.4.13
  1. 到此 Zookeeper 容器就部署完成了

迁移与备份

  1. 容器保存为镜像
docker commit [容器名] [保存的镜像名]
  1. 镜像备份
docker save -o [镜像备份名.tar] [镜像]
  1. 镜像恢复与迁移
docker load -i [镜像备份名.tar]

Docker 私有仓库

私有仓库搭建与配置

  1. 拉取私有仓库镜像
docker pull registry
  1. 启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry

打开浏览器访问地址:【主机 IP:5000/v2/_catalog】13a42d45e52bb3beb2fc8985ae253a1e.png

  1. 修改 daemon.json
vim /etc/docker/daemon.json

添加以下内容,保存退出

{"insecure-registries":["主机 IP:5000"]}
{"insecure-registries":["192.168.3.39:5000"]}

此步是用于让 docker 信任私有仓库地址

  1. 重启 Docker 服务
systemctl restart docker
  1. 启动 registry 容器
docker start registry

上传本地镜像

  1. 将本地镜像打包
docker tag [本地镜像名称]:[版本] [主机 IP:5000]/[镜像名]
docker tag mysql:5.7 192.168.3.39:5000/mysql
  1. push 上传镜像到私有仓库
docker push [镜像名 REPOSITORY]
docker push 192.168.3.39:5000/mysql
  1. 浏览器访问地址:【主机 IP:5000/v2/_catalog】3040be4079d747dcf72f369ed058667f.png

Dockerfile

Dockerfile 是由一系列命令和参数组成的脚本文件。这些命令应用于基础镜像并最终创建一个新的镜像。

常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER usr_name 声明镜像的创建者
ENV key value 设置环境变量
RUN command 是 Dockerfile 的核心部分
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,则会在复制后自动解压
COPY source_dir/file dest_dir/file 和 ADD 类似,但是不解压压缩文件
WORKDIR path_dir 设置工作目录

制作 JDK1.8 镜像

  1. 首先,在 Linux 中创建一个 jdk8 目录,用来存放我们的 JDK 文件
mkdir -p /usr/local/jdk8
  1. 将 JDK8 的 *.tar.gz 包通过 XFTP 上传到 /usr/local/jdk8 目录下1ff510d28017fed03bbcf98f0f58920a.png
  2. /usr/local/jdk8 目录下,创建并编辑 Dockerfile 文件(也就是 JDK 包和 Dockerfile 需要在同一目录下)
vim Dockerfile

添加以下内容:

FROM centos:7
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u311-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_311
ENV PATH $JAVA_HOME/bin:$PATH
  • FROM centos:7:指定基础镜像为 Centos7
  • WORKDIR /usr:工作目录
  • RUN mkdir /usr/local/java:创建目录
  • ADD jdk-8u311-linux-x64.tar.gz /usr/local/java:将 jdk8 包拷贝并解压到 /usr/local/java 目录
  • ENV JAVA_HOME【ENV PATH】:配置环境变量

 4.等待 Docerfile 里的命令执行完成,构建成功

docker build -t='jdk1.8' .

表示当前目录,不能丢

  1. 构建镜像bebe23477c7978ad3a484bf5648c3bed.png

DockerMaven 插件进行微服务部署

DockerMaven 插件 Github 地址:https://github.com/spotify/docker-maven-plugin#specify-build-info-in-the-pom

微服务部署

手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器

通过使用 Maven 插件实现自动部署,对于数量众多的微服务,手动部署非常麻烦且容易出错,所以建议使用自动部署。

步骤

总体步骤:

  • DockerMaven 先将项目打成 Jar 包
  • 再将 Jar 包打包成 Image 镜像
  • 之后将镜像上传到私有仓库
  • 最后我们直接去 Doker 里面通过镜像创建容器去运行访问就可以了

修改主机配置

修改主机的 docker.service 文件,使其可以远程访问

vim /lib/systemd/system/docker.service

打开 docker.service 文件,将

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改为

ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

重启服务

systemctl daemon-reload

重新启动 Docker

systemctl restart docker

启动私人仓库

docker start registry

修改防火墙规则

  1. 修改防火墙暴露 2375 端口(开放端口很重要,困了好久)
firewall-cmd --zone=public --add-port=2375/tcp --permanent #开放2375/tcp端口
  1. 更新防火墙,使防火墙设置生效
firewall-cmd --reload
  1. 查看防火墙开放端口
firewall-cmd --zone=public --list-ports

IDEA 插件配置

  1. 在 pom.xml 中添加 plugin 配置
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.1.0</version><executions><execution><id>build-image</id><phase>package</phase><!--绑定 maven package 命令--><goals><goal>build</goal></goals></execution></executions><configuration><!--打包后的镜像名称--><imageName>${project.artifactId}:${project.version}</imageName><!--doker 远程地址--><dockerHost>http://192.168.3.39:2375</dockerHost><!--基于基础镜像构建--><baseImage>jdk1.8</baseImage><!--运行 jar 包的命令--><entryPoint>["java","-jar","-Dspring.profiles.active=dev","/${project.build.finalName}.jar"]
</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>
  1. 执行 Maven 的 package 命令202e10c716debf8cc70d6d4500fa4467.png
  2. 等待打包完成eb5d90cba84bf905035393f639cd47ee.png
  3. 在宿主机上查看镜像
docker images

可以看到我们以项目名命名的镜像,版本为 pom.xml 中的版本04555945c248cf2ba1320af984b2b8bb.png

  1. 创建容器 test1,端口映射到 7070
dockerrun-di--name=test1-p7070:7070dockertest:0.0.1-SNAPSHOT
  1. 浏览器访问【宿主机 IP:端口】即可以正常访问。963b88cdb59eb2b2642b2a3e1d71d882.png





目录
相关文章
|
30天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
222 77
|
12天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
84 35
|
11天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
17天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
90 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
23小时前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
24 10
|
23天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
48 3
实战~如何组织一个多容器项目docker-compose
|
21小时前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
19 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
17天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
44 4
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境
本教程介绍如何快速搭建Docker环境,并使用Docker部署一个Nginx服务。
基于ECS快速搭建Docker环境
|
弹性计算 应用服务中间件 Linux
Day2 基于ECS快速搭建Docker环境
简介: 容器技术 容器是一个允许我们在资源隔离的过程中,运行应用程序和其依赖项的 、轻量的 、操作系统级别的虚拟化技术, 运行应用程序所需的所有必要组件都打包为单个镜像,这个镜像是可以重复使用的。当镜像运行时,它是运行在独立的环境中,并不会和其他的应用共享主机操作系统的内存、CPU或磁盘。这保证了容器内的进程不会影响到容器外的任何进程。 Docker:类似于虚拟机 但是比虚拟机运行小切简单 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不
375 0
下一篇
开通oss服务