docker学习系列(一):docker 基础
一.简介
开发当中比较麻烦的问题在于软件配置,每个人的机械以及系统都不尽相同,程序需要运行在系统当中需要配置好相应的系统以及各种依赖的组件,但是很多时候由于各种软件依赖包的版本,系统兼容性问题会导致程序运行出现问题,人们便寻求一种可以解决这种问题的方法。
虚拟机
而虚拟机技术就是其中的一种解决方法,众所周知,虚拟机技术允许一种操作系统之上运行另一种操作系统,如win系统安装linux的虚拟机,而里面的运行程序却认为自己依旧运行在linux里面,因此用户只需要打包整个自己的运行环境,就可以在不同的系统利用虚拟机技术完美运行程序所需要的系统,而里面的程序更不在话下,且打包好的系统对于运行的系统而言只是一个文件,可以轻松管理。
但是虚拟机技术却有一种比较大的问题,那就是用户明明只需要运行某个程序,却需要引入该程序所处的整个系统,不但占用的空间很大,且启动速度也比较慢,毕竟需要启动整个系统。
容器技术
由于虚拟机存在这些缺点,Linux发展出了另一个虚拟技术:Linux容器,相对于虚拟机,Linux容器不是模仿一个完整的操作系统,而是对进程进行隔离。在这个容器里面,它接触到的资源都是虚拟的,他只需要它本身所需要的组件,相对于虚拟机技术而言,更轻量级,而docker就是对Linux容器的一种封装,提供给我们简单易用的接口,将应用程序以及依赖打包在一个文件里面。
二.安装docker
我是ubuntu系统,安装docker可以使用官方的快捷安装脚本进行安装。
$ wget -qO- https://get.docker.com/ | sh
但是我安装起来有点问题,在添加gbp的时候,所以我是安装教程一步步安装的。
# 添加gbp,但是我按照官方教程执行有点问题,去掉最后一个-符号就可以执行
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加APT资源
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
# 查看源是否已经生效
$ apt-cache policy docker-ce
# 这时候应该输出类似于这种东西,如果没有这些输出的话,下面的安装就会找不到软件包了
# docker-ce:
# Installed: (none)
# Candidate: 17.03.1~ce-0~ubuntu-xenial
# Version table:
# 17.03.1~ce-0~ubuntu-xenial 500
# 500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
# 17.03.0~ce-0~ubuntu-xenial 500
# 500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
# 最后安装docker
$ sudo apt-get install -y docker-ce
# 安装之后执行以下命令有信息输出即证明成功。
$ sudo systemctl status docker
之后我们可以通过下载一个镜像来尝试运行hello world。
docker run ubuntu echo "Hello world"
三.使用国内源
我们的docker在国内下载镜像并不会很流畅,所以我选择使用国内官方的景象。
我直接新建文件:/etc/docker/daemon.json,然后添加如下json,重启docker即可永久选择国内镜像。
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
四.docker的基本概念
1.image(镜像)
docker把应用程序以及其依赖,打包在image文件里面,docker容器是通过运行image生成的实例,同一个image文件可以生成多个容器实例。
2.container(容器)
container是一个docker的运行实例,也叫做容器,本身也是一个文件,可以理解容器实例就是通过渲染运行image镜像之后才产生的。值得注意的是生成容器之后,关闭容器不会删除该容器文件,该容器文件之后停止运行了而已。
至于镜像以及容器之间拥有镜像分层结构,详解可以看出我写的这篇文章。
五.基本命令
镜像操作
# 查看当前本地镜像列表
$ docker images
# 查看远程相关镜像镜像
$ docker search 镜像名字
# 拉取镜像到本地
$ docker pull 镜像名字
# 删除镜像(当存在多个名字一样的镜像时候,可以通过指定tag方式来操作,如ubuntu:16.04)
$ docker rmi 镜像名字
容器的基本操作
# 创建一个docker容器,返回容器的id
$ docker create 镜像名字
# 运行docker容器
$ docker start 容器id
# 新建容器且运行,也就是上面两步一块执行。
# 值得注意的是如果该镜像在本地不存在,会自动从源那里去拉取
$ docker run 镜像名字
# 停止容器
$ docker stop 容器id
# 查看当前运行的docker容器
$ docker ps
# 查看全部的docker容器
$ docker ps -a
# 删除容器
$ docker rm 容器id
新建容器(docker run 镜像)常见可选参数:
- p:指定映射端口,如运行一个nginx服务,那么我可以设置 -p 8080:80来把本地的8080端口映射到容器里的80端口。
- d:容器作为一个守护进程去进行运行,也就是保持后台运行,运行后会返回cotainer id。
容器与镜像间的操作
# 终端连接到容器
$ docker exec -i -t 容器id bash
# 复制文件到容器里面
$ docker cp index.html 镜像id://usr/share/nginx/html
# 保存更改并生成为一个新的image文件
$ docker commit -m "mess" 镜像id 镜像名字
docker学习系列(一):docker 基础的更多相关文章
- Docker学习系列(一):windows下安装docker(转载)
本文目录如下: windows按照docker的基本要求 具体安装步骤 开始使用 安装远程连接工具连接docker 安装中遇到的问题 Docker的更新 Docker中的jupyter windows ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- docker学习系列-jdk基础镜像制作
准备一台安装有docker服务的机器 1.编辑Dockerfile vim Dockerfile FROM centos:latest ADD ./jdk-8u141-linux-x64.tar. ...
- docker学习系列(三):docker镜像的分层结构
docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...
- Docker学习系列(二):Docker三十分钟快速入门(上)
一.背景 最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃.那么本文我们来聊一聊Docker,和大家一起认识Docker,简单入门Dock ...
- Docker学习系列之一——安装篇
一.目的 Docker是目前非常流行的虚拟技术,在云计算领域得到了广泛的应用.国内的阿里.京东等大厂都非常普遍地应用了Docker.本文记录了Docker的基本安装过程及最终运行结果,以期备忘,及和同 ...
- Docker学习系列(一)-CentOS7下安装Docker
CentOS7下Docker的安装 一.操作系统要求 CentOS 7 64位 Kernel 3.10+ 本机系统信息 二.卸载旧版本 如果之前安排过旧版本的Docker,先卸载掉旧版Docker以及 ...
- Docker学习笔记2: Docker 概述
一.什么是Docker Docker是基于Go语言实现的云开源项目. Docker 的主要目标是:"Bulid,Ship and Run Any App ,AnyWhere" , ...
- Docker概念学习系列之Docker核心概念之镜像Image
不多说,直接上干货! 说明: Docker 运行容器之前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户 ...
- Docker学习总结之Docker与Vagrant之间的特点比较
以下内容均出自Vagrant作者(Mitchell Hashimoto)与Docker作者(Solomon Hykes)在stackoverflow上面一个问题讨论.在这个问题中,双方阐述了vagra ...
随机推荐
- 万类之父——Object
jdk1.8.0_144 Object类作为Java中的顶级类,位于java.lang包中.所有的类直接或者间接都继承自它.所以Object类中的方法在所有类中都可以直接调用.在深入介绍它的API时, ...
- vscode php跳转
最近在写一个php项目,最后选定使用vscode编辑器,然后研究了一下断点调试.格式代码.点击跳转 以下是配置步骤,记录一下 1.代码格式化及跳转 1.前提条件:安装7.0以上版本php, ...
- 通过四个例子理解JavaScript拓展运算符
原文地址:JavaScript & The spread operator 拓展运算符看起来像什么? 三个点,... 它能做什么? 拓展运算符允许一个表达式在某个地方展开成为多个元素.变量或参 ...
- jquary 单选,多选,select 获取和设置值 jquary自定义函数
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" ...
- 根据展示文字自适应 cell 高度,实现点击cell的伸缩扩展
1.要根据展示的文字计算cell的高度, 再此给NSString写的延展的方法, 以此获取展示文字的高度 2.在自定义的cell中 声明属性和定义方法 注:在cell上初始化子控件,最好用代码写, 不 ...
- Windows 系统下安装 dig 命令
dig是一个Linux下用来DNS查询信息的小工具,dig全称是Domain Information Groper,与nslookup类似,但比nslookup功能更强大.Windows只有nsloo ...
- Vue.js响应式原理
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:answershuto/learnV ...
- ASP.NET Core的身份认证框架IdentityServer4--(4)添加第三方快捷登录
添加对外部认证的支持 接下来我们将添加对外部认证的支持.这非常简单,因为你真正需要的是一个兼容ASP.NET Core的认证处理程序. ASP.NET Core本身也支持Google,Facebook ...
- java打包项目将配置文件放在包外面(后续还会有补充)
项目中也经常单独将一部分功能独立做Java Project,然后打成jar包供其他项目调用.如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采用jar包读取外 ...
- JS中的Undefined和Null的区别
Undefined ①在声明变量时,如果没有给变量赋值,则这个变量就是undefined类型: ②访问未声明的变量会报错误消息,但这样的变量使用 typeof 测试,返回的值为Undefined. 即 ...