docker(一):Develop faster. Run anywhere.
前言
在进行微服务部署时,首先需要进行部署环境的搭建。目前,Docker 已经成为了微服务部署的主流解决方案之一。Docker 可以帮助我们更快地打包、测试以及部署应用程序,从而缩短从编写到部署运行代码的周期。
在本文中,我们将对 Docker 进行初步的讲解,并介绍如何将映像生成并作为容器运行、使用 Docker Hub 共享映像。具体的功能点如下:
- 将映像生成并作为容器运行。
- 使用 Docker Hub 共享映像。
- 使用 Docker Compose 运行应用程序。
基本概念
Docker 是一个开源的应用容器引擎,可以让开发者将应用程序打包成一个容器,并通过容器来部署、运行和管理应用程序。Docker 的核心概念包括容器和镜像。
容器:容器是镜像的可运行实例,可以通过 Docker API 或 CLI 来创建、启动、停止、移动或删除容器。容器提供了一种轻量级、可移植的解决方案,使得应用程序可以在不同的环境中运行。
镜像:镜像是一个只读模板,包含了创建 Docker 容器的说明。没有镜像,就无法创建容器。Docker 镜像可以通过 Dockerfile 文件来创建,也可以从公有仓库中下载使用。公有仓库中包含了大量的镜像,可以供开发者快速使用。
docker架构:Docker 的架构包括 Docker 客户端、Docker 服务器和 Docker 镜像仓库。Docker 客户端是一个命令行工具,可以通过它来与 Docker 服务器进行通信。Docker 服务器是一个后台进程,负责管理容器和镜像。Docker 镜像仓库是一个中央存储库,可以用来存储和分享 Docker 镜像。

这里不在赘述基础知识了,如果需要可以自行去docker官网进行查看;
安装
windows:window安装地址,直接按照安装提示,一直下一步即可安装成功。
linux:如果想要简单快速直接安装宝塔面板,命令行安装有些复杂,需要根据不同情况安装,这里是博主的安装流程:
- 使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum ‐y update - 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的。
yum install ‐y yum‐utils device‐mapper‐persistent‐data lvm2 - 设置yum源,并更新 yum 的包索引
yum‐config‐manager ‐‐add‐repo http://mirrors.aliyun.com/docker‐ce/linux/centos/docker‐ce.repoyum makecache fast - 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker‐ce ‐‐showduplicates | sort ‐r - 安装docker
yum ‐y install docker‐ce‐18.03.1.ce # 这是指定版本安装 yum ‐y install docker‐ce # 这是安装最新稳定版 - 启动并加入开机启动
systemctl start docker systemctl enable docker - 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version - 卸载docker
yum ‐y remove docker‐engine
创建镜像
公有镜像
Docker Hub 是 Docker 官方提供的公有镜像仓库,包含大量的 Docker 镜像,供开发者使用。与 Maven 仓库类似,开发者可以在 Docker Hub 上搜索并下载需要的镜像,从而快速搭建开发环境。以java为例,命令行模式:
docker search java- 执行完 docker pull 命令后,Docker 会从 Docker Hub 中的 Java 仓库下载最新版本的 Java 镜像。如果需要下载指定版本的镜像,则可以在镜像名后面加上冒号并指定版本号。例如:
docker pull java:8 docker images列出镜像docker rmi java删除镜像
本地镜像
使用Dockerfile构建Docker镜像,其中的 FROM、 RUN都是 Dockerfile的指令。 FROM 指令用于指定基础镜像,即构建新镜像所依赖的镜像。基础镜像包含了操作系统、软件环境等基本组件。通过 FROM 指令,可以使用已有的镜像作为基础镜像,并在其之上添加新的软件包或配置。RUN 指令用于在镜像中执行命令。通过 RUN 指令,可以在基础镜像之上安装软件包、配置环境变量等。
FROM java:8
# 复制生成的 jar 文件到容器中
COPY --from=0 /app/bootstrap/target/*.jar /app/app.jar
# 设置工作目录
WORKDIR /app
# 暴露端口
EXPOSE 3112
# 设置时区为 Asia/Shanghai
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8
# 设置容器的时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update
RUN apt-get install -y fontconfig
# 定义启动命令
ENTRYPOINT ["sh","-c","java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar app.jar"]
然后在Dockerfile所在路径执行以下命令构建镜像:-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径
docker build ‐t app .
共享镜像
Docker Hub 是 Docker 官方提供的公共镜像仓库,提供了大量的公共镜像供开发者使用。此外,Docker 还提供了一个私有镜像仓库,称为 Docker Registry,可以用于存储和分享私有镜像。
如果开发者需要在自己的项目中使用 Docker 镜像,可以将自己的镜像上传到 Docker Registry 上,然后在其他机器或环境中使用 Docker 命令来下载和运行。
请注意,Docker Hub 只提供一个免费的私有仓库,如果需要使用多个私有仓库,则需要购买额外的订阅服务。
docker仓库地址:hub.docker先在网页端注册,并记住账号密码

然后再本地使用docker login命令进行登录,这样我们的服务器也会进行登录到私有库,否则你将push失败。
登录成功后,就可以将本地的镜像上传到 Docker Registry 中。可以使用 docker tag 命令来为镜像打上标签,然后使用 docker push 命令来上传镜像。例如:
docker tag app 【你的账号名】/app
修改tag成功后即可推送image到远程仓库:docker push 【你的账号名】/app
运行镜像
使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项。
- -d选项:表示后台运行
- -P选项:随机端口映射
- -p选项:指定端口映射,有以下四种格式:-- ip:hostPort:containerPort、-- ip::containerPort、-- hostPort:containerPort、-- containerPort
- --net选项:指定网络模式,该选项有以下可选参数:--net=bridge:默认选项,表示连接到默认的网桥、--net=host:容器使用宿主机的网络、--net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置、--net=none:不配置该容器的网络,用户可自定义网络配置。
docker run ‐d ‐p 3112:3112 app这样就能启动一个容器。需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。
结语
通过使用 Docker,开发者可以实现快速、可重复的应用程序部署和管理,提高应用程序的可移植性和可扩展性。Docker 的优势在于它可以将应用程序和依赖项打包成一个容器,从而避免了因环境差异而导致的应用程序无法运行的问题。此外,Docker 还提供了一套完整的工具链,包括 Docker Compose、Docker Swarm 等,可以帮助开发者更方便地管理多个容器和多个主机。
Docker Compose 是一个用于定义和运行多个容器的工具,可以将多个容器组合为一个应用程序,并通过一个配置文件来管理这些容器。在使用 Docker Compose 之前,需要先编写一个 docker-compose.yml 文件,该文件包含了所需的容器和配置信息。然后,可以使用 docker-compose 命令来创建、启动、停止和删除多个容器。下一节我们将详细介绍 Docker Compose 技术的原理和使用方法。

docker(一):Develop faster. Run anywhere.的更多相关文章
- Docker学习总结之Run命令介绍
Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 在使用Docker时,执行最多的命令某 ...
- Docker Tips: 关于/var/run/docker.sock
本文转载自Docker Tips: 关于/var/run/docker.sock 导语 你可能已经运行过docker hub上的container并且注意到其中的一些需要绑定挂载(mount)/var ...
- docker dial unix /var/run/docker.sock: connect: permission denied
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker. ...
- Docker 配置国内镜像拉取中心,Configure docker to use faster registries in China.
Networking in China is really bad when it comes to using some cloud based tools like docker, it's us ...
- 【云计算】docker run详解
Docker学习总结之Run命令介绍 时间 2015-01-21 17:06:00 博客园精华区 ...
- (转)Docker容器的重启策略及docker run的--restart选项详解
1. Docker容器的重启策略 Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略. Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关. ...
- [docker]docker run指定entrypiont
指定entrypiont 错误的姿势 docker run -itd -v /tmp/:/tmp/ jdk-ori 'java -jar /tmp/sms.jar' 正确的姿势1 docker run ...
- Docker容器的重启策略及docker run的--restart选项详解
https://blog.csdn.net/taiyangdao/article/details/73076019 1. Docker容器的重启策略 Docker容器的重启策略是面向生产环境的一个启动 ...
- 【解决】Got permission denied while trying to connect to the Docker daemon socket at......dial unix /var/run/docker.sock: permission denied
>>> 问题:搭建Portainer时,选择本地连接报错? >>>分析: 根据报错信息可知是权限问题. 可能原因一:使用了非root用户启用或连接docker &g ...
- docker Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post
利用docker构建时,报错 + docker pull maven:3-alpine Got permission denied while trying to connect to the Doc ...
随机推荐
- gongwen
gongwen 学号 姓名 工作占比 20201307 梁辰鱼 20% 20201323 谭顺心 17% 20201222 龚 杰 16.5% 20201325 夏俊睿 16% 20201317 鲁永 ...
- win10 自带输入法设置小鹤双拼
1.创建bat文件: 小鹤双拼.bat 2.编辑小鹤双拼.bat 添加内容: reg add HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Sett ...
- 给临时停车号码牌插上翅膀:lua脚本语言加入—鲁哇客智能挪车号码牌技术升级之路
预计6月中旬上线的,带语音的智能挪车号码牌,会新增lua编程脚本的支持.类似于我们的手机,从功能机到智能机的进化,有着划时代的意义:产品功能不再由厂家决定,她可由lua编程脚本书写,随时编辑修改. l ...
- DRF_基本使用
基本使用 视图内 from rest_framework.viewsets import ModelViewSet from app01 import models from app01 import ...
- PHP 文件和文件夹操作
文件夹操作 创建文件夹 mkdir(名称,权限,递归创建):创建文件 例如: #创建文件夹 mkdir('./aa') # 创建 aa 文件夹 mkdir('./aa/bb') # 在 aa 目录下创 ...
- Spring--AOP通知类型
AOP通知类型 前置通知 通知类中的数据在原始数据的前面 后置通知 通知类中的数据在原始数据的后面 环绕通知 若是只是加一个注解: 我们需要这样做:加一个参数: 若是面对有返回值的方法,又有一点不同之 ...
- Spring------Bean的实例化的几种方法
构造方法 提供可访问的构造方法: 无参构造方法被调用: 如果无参构造方法不存在,将抛出异常BeanCreationException 静态工厂 在ApplicaytionContext.xml中使用静 ...
- 浅谈js防抖和节流
防抖和节流是处理高频触发最常见的优化方式,对性能提升有很大的帮助. 防抖:将多次的高频操作优化为只在最后一次执行,应用场景如:输入框,只需在最后一次输入进行校验即可. 节流:保证每隔一段时间只执行一次 ...
- Linux & 标准C语言学习 <DAY8_1>
一.进制转换 1.为什么要使用二进制.八进制.十六进制 因为目前的CPU只能识别高低两种电平,只能对二进制数据进行计算 二进制虽然能够直接被计算机识别,但是不方 ...
- 《golong入门教程📚》,从零开始入门❤️(建议收藏⭐️)
Go语言学习笔记 本菜鸟的Go语言学习笔记,历时1个月,包含了Go语言大部分的基本语法(不敢说全部),学习期间参考了各种视频,阅读了各种文章,主要参考名单如下: 点击跳转到参考名单<( ̄︶ ̄)& ...