Docker(一)-安装、架构、业务开发常用命令、Dockerile、镜像卷、镜像仓库

基于业务开发使用Docker

  1. Docker是一个开源的容器引擎,它有助于更快地交付应用。
  2. Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。
  3. 使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

Docker安装

  1. docker内核要求在3.1以上
    命令 : uname -r
  2. 安装
    命令: yum -y install docker-io
  3. 启动
    命令: service docker start
  4. 查看是否安装成功,查看版本
    命令: docker version
  5. 入门例子 安装nginx
    docker run -p 80:80 -d nginx

docker version结果

Docker架构

Docker架构

  • Docker daemon
    Docker守护进程、用来接收客户端的命令,拉取镜像、运行镜像为容器;
  • Client
    发送docker命令的客户端;
  • Images
    Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序
  • Container
    容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。
  • Registry
    远程镜像仓库、用来存储镜像;如果需要与他人合作、则需要将镜像放入远程镜像中心,让他人拉取; 类似远程Meven库、本地Maven库;

当client 通过pull命令去Docker daemon拉取镜像image时,首先查看images中存不存在对应的镜像, 如果服务端没有, 那么就会去Docker REgistry镜像仓库中拉取一个image镜像到本地(如果仓库中没有,那么通过命令buid创建一个镜像),然后通过run命令创建容器


先有镜像、再有容器、一个镜像可以运行为多个容器;

阿里云配置镜像加速

由于DockerHub是外国网站、很容易访问失败、可配置加速器;

  1. 我们可以借助阿里云的镜像加速器,登录阿里云(https://cr.console.aliyun.com/#/accelerator)
    在这里插入图片描述
  2. 进入/etc/docker
  3. 创建或者更新daemon.json

vim daemon.json
{
“registry-mirrors”: [“https://m9r2r2uj.mirror.aliyuncs.com”]
}

  1. 重启服务

systemctl daemon-reload
systemctl restart docker

Docker常用命令

镜像常用命令

  1. 查看本地镜像

docker images

  1. 搜索镜像

docker search java

Search命令

index : 仓库地址
name: 仓库名+ 名称
starts : 用户点赞数量
official: 是否为官方,ok则代表官方, 放心使用;
UTOMATED : 基于公开的dockerfile支撑的。

  1. 拉取镜像

docker pull java:8

在这里插入图片描述
4. 查看本地所有镜像

docker images

在这里插入图片描述
5. 删除镜像

docker rmi repository:tag

在这里插入图片描述
6. 删除所有镜像

docker rmi $(docker images -q);

容器常用命令

通过docker run创建容器;

  1. 运行容器

docker run -d -p 81:80 nginx

-d选项:表示后台运行
-P选项:随机端口映射
-p选项:指定端口映射,有以下四种格式。
– ip:hostPort:containerPort
– ip::containerPort
– hostPort:containerPort
– containerPort
–net选项:指定网络模式,该选项有以下可选参数:
–net=bridge:默认选项,表示连接到默认的网桥。
–net=host:容器使用宿主机的网络。
–net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
–net=none:不配置该容器的网络,用户可自定义网络配置。

在这里插入图片描述
2. 查看容器

docker ps
参数
-a 查出所有镜像、包括停止的
-f, 用于过滤条件、key-val形式查询
-n, 查出最近几个运行的容器
-l, 查出所有最新版本的容器
-q, 只显示容器ID
-s, 多显示容器大小

[root@centos-7 docker]# docker ps -s
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES                 SIZE
1294465aa995        nginx               "/docker-entrypoin..."   2 minutes ago       Up 2 minutes        0.0.0.0:90->80/tcp   suspicious_brattain   1.09 kB (virtual 141 MB)
b3f28f833918        nginx               "/docker-entrypoin..."   17 hours ago        Up 17 hours         0.0.0.0:91->80/tcp   loving_swanson        1.09 kB (virtual 141 MB)
[root@centos-7 docker]# docker ps -q
1294465aa995
b3f28f833918
[root@centos-7 docker]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
1294465aa995        nginx               "/docker-entrypoin..."   3 minutes ago       Up 3 minutes        0.0.0.0:90->80/tcp   suspicious_brattain
[root@centos-7 docker]# docker ps -1
unknown shorthand flag: '1' in -1
See 'docker ps --help'.
[root@centos-7 docker]# docker ps -n 1
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
1294465aa995        nginx               "/docker-entrypoin..."   3 minutes ago       Up 3 minutes        0.0.0.0:90->80/tcp   suspicious_brattain
[root@centos-7 docker]# docker ps -n 2
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
1294465aa995        nginx               "/docker-entrypoin..."   3 minutes ago       Up 3 minutes        0.0.0.0:90->80/tcp   suspicious_brattain
b3f28f833918        nginx               "/docker-entrypoin..."   17 hours ago        Up 17 hours         0.0.0.0:91->80/tcp   loving_swanson[root@centos-7 docker]# docker ps -f name=tomcat
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@centos-7 docker]# docker ps -f name=nginx
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@centos-7 docker]# docker ps -a 
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                     PORTS                NAMES
1294465aa995        nginx                     "/docker-entrypoin..."   6 minutes ago       Up 6 minutes               0.0.0.0:90->80/tcp   suspicious_brattain
b3f28f833918        nginx                     "/docker-entrypoin..."   17 hours ago        Up 17 hours                0.0.0.0:91->80/tcp   loving_swanson
8a20491ddf14        nginx                     "/docker-entrypoin..."   17 hours ago        Exited (0) 17 hours ago                         fervent_bhaskara
7a2f2b98ab37        registry-zqh/tiku:1.1.0   "java -jar /data/a..."   20 months ago       Exited (1) 20 months ago    
  1. 停止容器

普通停止: docker stop 容器ID
强制停止: docker kill 容器ID

在这里插入图片描述
4. 启动/重启

启动: docker start 容器ID
重启: docker restart 容器ID

在这里插入图片描述

  1. 删除容器

删除已经停止的容器: docker rm 容器ID
删除正在运行的容器: docker rm -f 容器ID

在这里插入图片描述
6. 查看容器日志

docker logs IMAGE_ID

  • 拉取hello-world镜像
    在这里插入图片描述

  • 运行镜像
    在这里插入图片描述

  • 查看日志;
    在这里插入图片描述

  1. 进入容器

docker exec -it IMAGE_ID /bin/bash

在这里插入图片描述

  • 容器内安装vim、ping、ifconfig等指令

apt-get update
apt-get install vim #安装vim
apt-get install iputils-ping #安装ping
apt-get install net-tools #安装ifconfig

  1. 查看容器所有信息

docker inspect IMAGE_ID

在这里插入图片描述

Dockerfile

使用Dockerfile构建Docker镜像

Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节
先来编写一个最简单的Dockerfile,以前文下载的Nginx镜像为例,来编写一个Dockerfile修改该Nginx镜像的首页

  1. 创建空文件夹、在里面创建Dockerfile文件;
FROM nginx
RUN echo '<h1>This is zqh Nginx!!!</h1>' > /usr/share/nginx/html/index.html
  1. 构建镜像
docker build -t zqh:tuling .

在这里插入图片描述

  1. 运行镜像
docker run -d -p 101:80 nginx:zqh

在这里插入图片描述

Dockerfile常用指令

  • FROM
    基础镜像的来源
  • RUN
    构建镜像阶段执行命令,可以有多个RUN命令,执行结果会放入Image文件
  • ADD 源文件 目标文件
    • 将源文件复制到容器中的目标目录
    • src可以是 Dockerfile所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包
ADD <src> <dest> 
  • COPY
    拷贝文件,和ADD命令类似,但不支持URL和压缩包

  • CMD

    • 容器启动后执行命令;
    • 指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。
  • EXPOSE
    声明容器在运行时对外提供的服务端口

  • WORKDIR
    指定容器工作路径

  • ENV
    指定容器环境变量

  • ENTRYPINT
    容器入口, ENTRYPOINT和 CMD指令的目的一样,都是指定 Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。

  • USER
    该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、 CMD以及 ENTRYPOINT指令都将使用该用户执行命令

  • VOLUME
    指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在 Dockerfile中使用该指令。格式为: VOLUME[“/data”]。

构建微服务镜像

基于Eureka构建一个镜像、也可以自己打包一个SpringBoot应用;

  1. 创建空文件夹、在创建Dockerfile文件;
# 基于哪个镜像
From java:8
# 复制文件到容器
ADD microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar
# 声明需要暴露的端口
EXPOSE 8761
# 配置容器启动后执行的命令
ENTRYPOINT java ${JAVA_OPTS} -jar /app.jar
  1. 将jar包放入空文件夹下;

  2. 使用docker build构建镜像;
    在这里插入图片描述

  3. 使用docker run运行容器;
    在这里插入图片描述

镜像卷

有很多应用的数据是不可丢失的、例如Mysql、Redis;若是不设置挂载点、当容器关机后、数据就丢失了、导致生产事故; 而Docker通过设置挂载点、将容器的数据同步到宿主机的目录下、当容器重启时、可宿主机数据同步会容器中;

docker run -d -p 8761:8761 -v /log:/container-log microservice-eureka-server:0.0.1

JAVA_OPTS

Dockerfile中设置了${JAVA_OPTS}参数、即运行时、执行JAVA_OPTS参数可指定服务运行参数

# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo,jmap这些命令,如果不需要在容器里执行这些命令可以不加
docker run -e JAVA_OPTS='-Xms1028M -Xmx1028M -Xmn512M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M' --cap-add=SYS_PTRACE -d -p 8761:8761 microservice-eureka-server:0.0.1

将微服务镜像发布到远程镜像仓库

我们制作好了微服务镜像,一般需要发布到镜像仓库供别人使用,我们可以选择自建镜像仓库,也可以直接使用docker官方镜像仓库,这里我们选择docker官方镜像仓库:https://hub.docker.com/

  1. 登录
    需要在docke官方镜像仓库注册一个账号, 输入用户名、密码;
[root@centos-7 myapp]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (yaoyaochengxian): 
Password: 
Login Succeeded
  1. 使用docker tag 给镜像前面加个分组名(一般就是docker hub的账户名)
docker tag microservice-eureka-server:0.0.1 yaoyaochengxian/microservice-eureka-server
  1. 使用docker push 推送到docker hub
docker push yaoyaochengxian/microservice-eureka-server

在这里插入图片描述
这样就推送成功了、可以去dockerhub中查看;
由于dockerhub进不去、先贴个图;
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/106579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【校招VIP】产品思维分析之面试新的功能点设计

考点介绍&#xff1a; 这种题型是面试里出现频度最高&#xff0c;也是难度最大的一种&#xff0c;需要面试者对产品本身的功能、扩展性以及行业都有一定的了解。而且分析时间较短&#xff0c;需要一定的产品能力和回答技巧。 『产品思维分析之面试新的功能点设计』相关题目及解…

服务注册中心 Eureka

服务注册中心 Eureka Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件&#xff0c;本身是一个基于 REST 的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka 有 3 个角色 服务中心&#xff08;Eureka Server&#xff09;&#xff1a;…

Ensp+Wireshark+VirtualBox+WinPcap

软件下载 [名称]&#xff1a;Ensp及辅助程序 [大小]&#xff1a;830.65MB [语言]&#xff1a;Chinese [安装环境]&#xff1a;Win7/Win8/Win10 [下载链接]&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1KbypgxAGQy07ijSAj3SvsQ 提取码&#xff1a;ly88 软件介…

服务器数据恢复-EVA存储磁盘故障导致存储崩溃的数据恢复案例

EVA系列存储是一款以虚拟化存储为实现目的的中高端存储设备。EVA存储中的数据在EVA存储设备工作过程中会不断进行迁移&#xff0c;如果运行的任务比较复杂&#xff0c;EVA存储磁盘负载加重&#xff0c;很容易出现故障的。EVA存储通过大量磁盘的冗余空间和故障后rss冗余磁盘动态…

Netty核心源码解析(三)--NioEventLoop

NioEventLoop介绍 NioEventLoop继承SingleThreadEventLoop,核心是一个单例线程池,可以理解为单线程,这也是Netty解决线程并发问题的最根本思路--同一个channel连接上的IO事件只由一个线程来处理,NioEventLoop中的单例线程池轮询事件队列,有新的IO事件或者用户提交的task时便执…

第二讲Java基本语法(变量、数据类型、运算符)

一、前言导读 上一讲,我们安装java的开发工具idea,并且简单介绍如何使用,初步认识了Java的helloworld,我们写了第一行代码,有了初步的印象,接下来我们将真正展开对于java的了解,从这一讲开始,请大家做好笔记,改背的背。为什么说Java是一门编程语言呢,主要是他跟英语一…

php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)

array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…

windows10 docker 安装在D盘

win10安装docker后发现c盘空间急速减少&#xff0c;360管家查看发现images镜像安装在C盘&#xff0c;于是重装docker desktop以为在安装过程中能够选择&#xff0c;遗憾的是没有提供选择权限&#xff0c;默认直接就安装到了c盘。 desktop 迁移 百度得知可以将c盘的docker安装…

VUE笔记(六)vue路由

一、路由的简介 1、实现生活中的路由 路由&#xff1a;路由其实就是一个key-value对应关系 路由器&#xff1a;用于管理多个路由关系的设备被称为路由器 2、前端的路由 目前使用的前端项目都是单页面的应用&#xff08;SPA&#xff09;&#xff0c;一个项目中只有一个html页…

Open3D 点云中值滤波

目录 一、算法原理1、中值滤波2、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、中值滤波 中值滤波的方法是,对待处理的当前采样点,选择一个模板,该模…

牛客练习赛 114

C.Kevin的七彩旗 思路&#xff1a;贪心和dp均可以解决。 贪心&#xff1a;我们可以发现&#xff0c;最终想要获得合法的序列&#xff0c;我们必须是通过把几段连续的序列拼凑起来&#xff0c;但序列之间可能有重合&#xff0c;因此我们就转化为了&#xff0c;记录每一段最大的…

如何评估分类模型的好坏

如何评估分类模型的好坏 评估分类预测模型的质量&#xff0c;常用一个矩阵、三条曲线和六个指标。 一个矩阵&#xff1a;混淆矩阵&#xff1b;三条曲线&#xff1a;ROC曲线、PR曲线、KS曲线&#xff1b;六个指标&#xff1a;正确率Acc、查全率R、查准率P、F值、AUC、BEP值、KS…

Wireshark数据抓包分析之UDP协议

一、实验目的&#xff1a; 通过使用wireshark对UDP数据包的抓取分析UDP协议的内容 二、预备知识&#xff1a; UDP协议的概念&#xff1a;UDP使用底层的互联网协议来传送报文&#xff0c;同IP一样提供不可靠的无连接传输服务。它也不提供报文到达确认、排序及流量控制等功能。 …

【C++心愿便利店】No.3---内联函数、auto、范围for、nullptr

文章目录 前言&#x1f31f;一、内联函数&#x1f30f;1.1.面试题&#x1f30f;1.2.内联函数概念&#x1f30f;1.3.内联函数特性 &#x1f31f;二、auto关键字&#x1f30f;2.1.类型别名思考&#x1f30f;2.2.auto简介&#x1f30f;2.3.auto的使用细节&#x1f30f;2.4.auto不能…

stm32之8.中断

&#xff08;Exceptions&#xff09;异常是导致程序流更改的事件&#xff0c;发生这种情况&#xff0c;处理器将挂起当前执行的任务&#xff0c;并执行程序的一部分&#xff0c;称之为异常处理函数。在完成异常处理程序的执行之后&#xff0c;处理器将恢复正常的程序执行&#…

家长如何将ChatGPT成为家庭日常活动的得力助手

人工智能已经在许多领域发挥作用&#xff0c;如播放音乐、关闭灯光和帮助我们更安全地驾驶。那么&#xff0c;在养育孩子方面呢&#xff1f; 使用像ChatGPT这样的应用&#xff0c;家长们可以更好地完成任务&#xff0c;但同时也要了解其中存在的风险。 许多家长表示&#xff…

TCP拥塞控制详解 | 7. 超越TCP

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …

uniapp 微信小程序:RecorderManager 录音DEMO

uniapp 微信小程序&#xff1a;RecorderManager 录音DEMO 简介index.vue参考资料 简介 使用 RecorderManager 实现录音。及相关的基本操作。&#xff08;获取文件信息&#xff0c;上传文件&#xff09; 此图包含Demo中用于上传测试的服务端程序upload.exe&#xff0c;下载后用…

sql server 快速安装

目录标题 一、下载二、直接选择基本安装二、下载ssms&#xff08;数据库图形化操作页面&#xff09;三、开启sa账号认证&#xff08;一&#xff09;第一步&#xff1a;更改身份验证模式&#xff08;二&#xff09;第二步&#xff1a;启用 sa 登录四、开启tcp/ip 一、下载 下载…

Leetcode80. 删除有序数组中的重复项 II

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 class Solu…