Docker必备知识整理

Docker简介

        Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

        Docker是用Go语言编写的。Docker也是一个命令行工具,它提供了中央“docker”执行过程中所需的所有工具。

        Docker本身需要运行在Linux系统上,因此,如果我们的系统是windows或者MacOS系统,那么我们需要下载一个DockerToolbox,这个安装程序提供了两种使用docker的工具:Kitematic (Alpha)和Docker Quickstart Terminal(前者是图形化docker后者是docker命令行)以及一个实现虚拟化的Oracle VM VirtualBox,它可以在我们第一次打开terminal的时候为我们创建一个Linux虚拟机,名字叫做default。我们也称之为“docker机器”。

        image是docker镜像。docker中的重要概念。在docker镜像服务方面,有一个官方网站dockerhub,我们可以在其上找到一些别人已经做好的可执行镜像文件:centos,Ubuntu等。国内如阿里云也提供类似服务,且访问速度较快。基于image我们可以创建(沙箱环境)container,来运行我们的image。

docker常用命令

为docker镜像创建并运行一个container(容器):docker run 镜像名称(一个镜像我们可以创建运行多个容器)

在terminal搜索dockerhub上相关images,如:docker search centos

(dockerhub提供一些官方版本镜像,因此在搜索列表中,我们可以看到OFFICIAL为[OK]代表此镜像是官方提供的版本)

下载dockerhub上的云端镜像:docker pull 镜像名称

(在dockerhub上下载镜像会非常慢,我们可以使用国内如阿里云提供的镜像管理服务)

查看本地镜像:docker images

查询正在运行的容器:docker ps

查询所有容器:docker ps --all   (简写是:docker ps -a)

输出镜像中的目录列表:docker run 镜像名称 ls

创建容器的时候指定名字:docker run --name 名字 镜像名称

查看最近一次创建的容器:docker ps --all --latest

查看容器的日志:docker logs 容器名称

停止运行中的容器:docker stop 容器名称

删除容器:docker rm 容器ID

重启容器:docker restart 容器名称

运行容器:docker start 容器名称

创建一个带交互的容器,比如登录到容器中:docker run --ineteractive --tty centos /bin/bash

(--interactive意思是创建一个交互容器,简写:-i   ;

--tty意思是为容器创建一个终端,简写:-t  ;

终端位置是:/bin/bash)

创建一个后台运行的容器,如实现centos系统镜像容器长时间执行ping操作:

docker run --detach centos ping www.baidu.com     (--detach意思是此容器为后台运行容器,简写:-d)

(docker 会返回一个完整的容器id,我们可以查看正在运行的容器,以及查看容器的log来监察容器运行状态)

docker实用技巧

加速器服务配置

使用阿里云加速器提升国内获取Docker官方镜像的速度

第一步:打开阿里云加速器

登录阿里云账号,并以此查找 控制台-->云计算基础服务-->容器镜像服务-->镜像加速器,并打开对应操作系统的标签:

第二步:创建新的docker machine

在创建升级版docker machine之前需要删除我们之前默认创建的docker机器:

而后,再去创建新的docker机器:

创建一台安装有Docker环境的Linux虚拟机,指定机器名为default,同时配置Docker加速器地址。

 

docker-machine create --engine-registry-mirror=https://31u25vtb.mirror.aliyuncs.com -d virtualbox default

直接复制上面这行命令,粘贴到terminal中,并回车。(注意:每个阿里云用户都会有一个专属的加速地址,需要自行更换加速地址,即 https://31u25vtb.mirror.aliyuncs.com)

第三步:配置docker machine

查看机器的环境配置,并配置到本地,并通过docker 客户端访问Docker服务。

docker-machine env default
eval "$(docker-machine env default)"
docker info

逐条复制,并在terminal中执行。

综上三步,已经设置好了阿里云加速服务,这次再通过pull命令下载官方镜像,就会快许多。

Dockerfile创建自定义image镜像

我们可以通过Dockerfile文件来将程序jar包制作成docker image文件,上传到阿里云或者在本地运行。

第一步:创建一个用于生成images的文件夹,将Dockerfile文件至于其中

文件夹参考目录结构如下图所示:

其中,start.sh脚本文件如下:

#!/bin/bash
nohup java -jar -Dserver.port=8888 app.jar >./log.out 2>&1 &
tail -f /dev/null

Dockerfile文件如下:

FROM centosMAINTAINER yan.li@ahav.com.cn
ENV APPHOME /apphome
RUN mkdir $APPHOME
WORKDIR $APPHOME
COPY jdk8 $APPHOME/jdk8
ADD app.jar $APPHOME/app.jar
ADD start.sh $APPHOME/
ENV JAVA_HOME=$APPHOME/jdk8/jre
ENV CLASSPATH=.:$JAVA_HOME/lib \PATH=$JAVA_HOME/bin:$PATH
EXPOSE 8888
RUN chmod 777 -R $APPHOME
CMD /bin/bash -c $APPHOME/start.sh

第二步:使用Docker命令行工具生成docker镜像

docker build -t secosecurity:0.1.2 .

注意:最后面有一个点,secosecurity为生成的镜像名称

通过docker images指令可以查看新生成的名叫“secosecurity”的images镜像。

Docker命令行push镜像到阿里云

首先,网页登陆阿里云

在已经创建好的registry中找到push信息:

在docker命令行中依次执行红框内三条语句即可。

 

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

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

相关文章

Exception和Error深入分析~~~

Exception和Error深入分析~~~Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 Exception 和 Erro…

Java常用设计模式————原型模式(一)

介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型模式用于创建重复的对象,同时又能保证性能。当直接创建对象的代价比较大时,则采用这种模式。&…

解决eclipse刚启动卡死的问题~~~亲测有效~~

解决eclipse刚启动卡死的问题~~~亲测有效~~ 重启了eclipse三次,还是卡死了。最后找到一下方法: 建议大家在删除先备份一下文件,以免丢失项目! 关于 eclipse启动卡死的问题(eclipse上一次没有正确关闭,导致…

Java常用设计模式————原型模式(二)之深拷贝与浅拷贝

引言 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可…

Java控制台输入教程~~~~

Java控制台输入教程~~~~当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所有输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用…

Java面试宝典————基础篇

参考原文:《Java面试题全集(上)》 1.Java中的基本数据类型有哪些? 类型:byte short int long float double boolean char 字节:1 2 4 8 4 8 1 2 2.面向…

Git初学札记(零)————EGIT完成Eclipse到GitHub一条龙

eclipse安装Egit插件 首先我们要找到所需的egit插件的url更新地址。百度一大堆,但是我还是希望自己去寻找。 打开Eclipse Downloads官网,在页面底部直接输入“egit”关键字,并直接点击第一条搜索到的结果。然后点击Downloads标签页&#xff0…

如何使用echo指令向文件写入内容

如何使用echo指令向文件写入内容0.前言本文总结如何使用echo命令向文件中写入内容,例如使用echo指令覆盖文件内容,使用echo指令向文件追加内容,使用echo指令往文件中追加制表符。echo向文件中输出内容的基本方法是使用IO重定向指令——“>…

Eclipse生成SSH传输密钥并实现GitHub的SSH代码提交

生成公私密钥 打开eclipse首选项完成如下操作:保存密钥:这里注意,博主之前已经生成过密钥了,因此这里只是演示截图,如果此时点击保存,会弹出“是否覆盖”提示框。 其中,id_rsa代表非对称加密算法…

Java实现链表结构

Java实现链表结构按链表的组织形式分有ArrayList和LinkList两种。ArrayList内部其实是用数组的形式实现链表,比较适合链表大小确定或较少对链表进行增删操作的情况,同时对每个链表节点的访问时间都是constant;而LinkList内部以一个List实现链…

SpringBoot————快速搭建springboot项目

完成项目的创建信息 浏览器打开SPRING INITIALIZR网址: http://start.spring.io/ 如下图所示完成配置: 1.完成基础项目配置 2.相关名称 3.依赖jar包,如果是web项目,那么这里选择的Web依赖已经包含了开发web项目所必须的服务器…

史上最容易理解————GET和POST两种基本请求方法的区别

GET和POST两种基本请求方法的区别GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,…

SpringBoot————JPA快速使用

本篇博客源码地址:https://github.com/DragonWatcher/ease-run 概述 Hibernate与JPA 本篇博客中的web项目选用Hibernate作为持久层框架。在Spring Boot中,我们需要了解另一个概念:JPA 上一句话可能有些歧义,并不是说JPA就是Sp…

MySQL优化建议汇总~~~

MySQL优化建议汇总~~~1、将经常要用到的字段(比如经常要用这些字段来排序,或者用来做搜索),则最好将这些字段设为索引 2、字段的种类尽可能用int或者tiny int类型。另外字段尽可能用not null 3、当然无可避免某些字段会用到text&a…

Java泛型初探————泛型通配

T ? K V E?——表示不确定的Java类型 T——表示Java类型 K、V——分别代表键-值中的Key-Value&#xff0c;例如Map<K,V>&#xff0c;put(K key, V value) E——代表Element&#xff0c;例如List<E>&#xff0c;add(E e)java.lang.ClassClass类的实例…

谈谈 final、finally、 finalize 有什么不同?

谈谈 final、finally、 finalize 有什么不同&#xff1f;final 可以用来修饰类、方法、变量&#xff0c;分别有不同的意义&#xff0c;final 修饰的 class 代表不可以继承扩展&#xff0c;final 的变量是不可以修改的&#xff0c;而 final 的方法也是不可以重写的&#xff08;o…

Spring Boot————静态方法如何调用Spring容器中的Bean

问题分析 在使用静态方法的时候&#xff0c;某些情况下&#xff0c;需要使用类似自动注入的Bean来实现某些业务逻辑。 一般的非静态方法&#xff0c;可以很容易的通过在方法所在的类中Autowired自动将依赖的Bean注入到本类中&#xff0c;并操作。 静态方法在使用同样的操作流…

Java 集合Collection常见知识点汇总~

看了一些所谓大公司的JAVA面试问题&#xff0c;发现对于JAVA集合类的使用都比较看重似的&#xff0c;而自己在这方面还真的是所真甚少&#xff0c;抽空也学习学习吧。 java.util包中包含了一系列重要的集合类&#xff0c;而对于集合类&#xff0c;主要需要掌握的就是它的内部结…

内部类详解————匿名内部类

内部类三连击&#xff1a; 《内部类详解————匿名内部类》 《内部类详解————局部内部类》 《内部类详解————静态嵌套类》 应用场景 由于匿名内部类不利于代码的重用&#xff0c;因此&#xff0c;一般在确定此内部类只会使用一次时&#xff0c;才会使用匿名内部…

内部类详解————局部内部类

内部类三连击&#xff1a; 《内部类详解————匿名内部类》 《内部类详解————局部内部类》 《内部类详解————静态嵌套类》 定义 在方法或某个作用域内的内部类&#xff0c;称为局部内部类。匿名内部类就是一种局部内部类。 实现方式 public class OutterType …