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

news2024/11/24 8:54:45

基于业务开发使用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.coloradmin.cn/o/904702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么需要单元测试?

为什么需要单元测试&#xff1f; 从产品角度而言&#xff0c;常规的功能测试、系统测试都是站在产品局部或全局功能进行测试&#xff0c;能够很好地与用户的需要相结合&#xff0c;但是缺乏了对产品研发细节&#xff08;特别是代码细节的理解&#xff09;。 从测试人员角度而言…

Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

前文讲解&#xff0c;完成了springboot、spring security、Oauth2.0的继承&#xff0c;实现了对系统资源的安全授权、允许获得授权的用户访问&#xff0c;也就是实现了单一系统的全部技术开发内容。 Springboot是微服务框架&#xff0c;单一系统只能完成指定系统的功能&#xf…

【简单认识Docker网络管理】

文章目录 一、Docker 网络实现原理二、Docker 的网络模式1.四种网络模式2.各网络模式详解&#xff08;1&#xff09;Host模式&#xff08;2&#xff09;Container模式&#xff08;3&#xff09;None模式&#xff08;4&#xff09;Bridge模式 3.指定容器网络模式4.自定义网络模式…

web文件上传

文件上传指的是&#xff0c;将本地的图片、视频、音频上传到服务器&#xff0c;提供给其他用户浏览和下载的过程 前端需求 想要进行文件上传对于web前端来说有三个重要要素 1.<input type"file" name"image"> 提供这样的file文件上传格式 2. metho…

【Unity】自带的录屏插件Recorder

目录 Recorder简介Recorder导入Recorder使用 Recorder简介 Recorder是Unity官方的录屏插件&#xff0c;可以直接录制Game窗口&#xff0c;还可以录制不同相机的视图。不仅可以直接生成视频、帧动画图、还可以制作gif和animation。 Recorder导入 菜单栏Windows→Package Mana…

VINS-Mono中的边缘化与滑窗 (4)——VINS边缘化为何是局部变量边缘化?

文章目录 0.前言1.系统构建1.1.仿真模型1.2.第一次滑窗优化1.3.第二次全局优化 2.边缘化时不同的舒尔补方式2.1.边缘化时舒尔补的意义2.2.不同的边缘化方式 3.边缘化时不同的舒尔补方式实验验证3.1.全局schur的操作方式3.2.VIO或VINS中局部边缘化的方式3.3.两种方式和全局优化方…

【Linux】文件的描述符和重定向

文件的描述符和重定向 C语言的文件读写操作代码 open系统打开文件方法系统读写文件操作文件描述符文件重定向怎么理解文件缓冲区 C语言的文件读写操作 文件写入 fputs int fputs(const char *s, FILE *stream); s&#xff1a;要写入的字符串 stream&#xff1a;要写入对应的目标…

halcon库文件封装操作方法介绍

头文件写法参考 getarea.h 导出函数设定&#xff1a; extern “C” __declspec(dllexport) void _stdcall cpp文件写法参看 3.vs 库文件配置介绍 头文件及包含的库文件目录设定 &#xff08;1&#xff09;头文件设定E:\halcon\env\opencv\include\opencv2;E:\halcon\env\ope…

接口限流注解 RateLimiter (现成直接用)

1. 限流注解 import com.ruoyi.common.constant.Constants; import com.ruoyi.common.enums.LimitType;import java.lang.annotation.*;/*** 限流注解* */ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface RateLimiter {/*** 限流…

DSO 系列文章(3)——DSO后端正规方程构造与Schur消元

文章目录 DSO代码注释&#xff1a;https://github.com/Cc19245/DSO-CC_Comments

javascript期末作业【三维房屋设计】 【文末源码+文档下载】

1、引入three.js库 官网下载three.js 库 放置目录并引用 引入js文件: 设置场景&#xff08;scene&#xff09; &#xff08;1&#xff09;创建场景对象 &#xff08;2&#xff09;设置透明相机 1,透明相机的优点 透明相机机制更符合于人的视角,在场景预览和游戏场景多有使用…

安装docker配置镜像加速器,容器等

1.安装docker服务&#xff0c;配置镜像加速器 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 3.基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09; 4.容器的启动、 停止及重启操作 5.怎么查看正在运行的容器…

快速排序 | C++|时间空间复杂度

1.概念 快速排序(QuickSort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比另一部分记录的关键字小&#xff0c;则可分别对这两部分记录继续进行排序&#xff0c;以达到整个序列有序的目的。 2.算法思想描述 1.进行一次划分&…

在线HmacMd5加密工具--在线获取哈希值又称摘要

具体请前往&#xff1a;在线计算HMacMd5工具

STL vector基本用法

目录 vector介绍vector的使用vector的定义vector接口函数构造函数和赋值重载迭代器元素访问vector容量相关函数vector增加 删除 修改操作关系操作符 vector介绍 vector是可变大小数组的序列容器。像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可…

Dockers搭建个人网盘、私有仓库,Dockerfile制作Nginx、Lamp镜像

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 &#xff08;1&#xff09;下载mysql:5.6和owncloud镜像 &#xff08;2&#xff09;创建启动mysql:5.6和owncloud容器 &#xff08;3&#xff09;在浏览器中输入网盘服务器的IP地址&#xff0c;进行账…

stm32单片机/51单片机蜂鸣器不响(proteus模拟)

蜂鸣器不发生原因就1个&#xff1a;电压不够 所以需要提高蜂鸣器2端的电压&#xff1a;可以采用的方法有&#xff1a; 1提高蜂鸣器电阻&#xff0c;这样根据分压原理&#xff0c;可以提升蜂鸣器2段电压 2更改蜂鸣器的工作电压为更小的值&#xff0c;这个可以通过在proteus内…

虚拟机中docker承载的微服务注册到nacos无法访问问题

今天将一个项目中的部分子系统部署&#xff0c;部署到虚拟机的docker里运行&#xff0c;结果外部无法访问。查看nacos&#xff0c;显示服务已经成功注册。 后来发现&#xff0c;该服务的IP地址外部无法访问&#xff1a; 估计172.17.0.0是docker自身的网段&#xff0c;在上面跑…

【MyBatis面试题(20道)】

文章目录 MyBatis 面试题&#xff08;20道&#xff09;基础1.说说什么是MyBatis&#xff1f;2.Hibernate和MyBatis有什么区别&#xff1f;3.MyBatis使用过程&#xff1f;生命周期&#xff1f;4.在mapper中如何传递多个参数&#xff1f;5.实体类属性名和表中字段名不一样&#x…

BDA初级分析——SQL多表连接应用

一、用SQL拼接数据 三个初始数据 问题1&#xff1a;在所有的数据里&#xff0c;销售额最高的产品品类名是什么&#xff1f; 问题2&#xff1a;是否有什么产品是在所观测的时间里没有被购买过的&#xff1f; 拼接数据&#xff1a;JOIN join&#xff0c;加入 作用&#xff1…