一.简介

开发当中比较麻烦的问题在于软件配置,每个人的机械以及系统都不尽相同,程序需要运行在系统当中需要配置好相应的系统以及各种依赖的组件,但是很多时候由于各种软件依赖包的版本,系统兼容性问题会导致程序运行出现问题,人们便寻求一种可以解决这种问题的方法。

虚拟机

而虚拟机技术就是其中的一种解决方法,众所周知,虚拟机技术允许一种操作系统之上运行另一种操作系统,如win系统安装linux的虚拟机,而里面的运行程序却认为自己依旧运行在linux里面,因此用户只需要打包整个自己的运行环境,就可以在不同的系统利用虚拟机技术完美运行程序所需要的系统,而里面的程序更不在话下,且打包好的系统对于运行的系统而言只是一个文件,可以轻松管理。

但是虚拟机技术却有一种比较大的问题,那就是用户明明只需要运行某个程序,却需要引入该程序所处的整个系统,不但占用的空间很大,且启动速度也比较慢,毕竟需要启动整个系统。

容器技术

由于虚拟机存在这些缺点,Linux发展出了另一个虚拟技术:Linux容器,相对于虚拟机,Linux容器不是模仿一个完整的操作系统,而是对进程进行隔离。在这个容器里面,它接触到的资源都是虚拟的,他只需要它本身所需要的组件,相对于虚拟机技术而言,更轻量级,而docker就是对Linux容器的一种封装,提供给我们简单易用的接口,将应用程序以及依赖打包在一个文件里面。

二.安装docker

我是ubuntu系统,安装docker可以使用官方的快捷安装脚本进行安装。

  1. $ wget -qO- https://get.docker.com/ | sh

但是我安装起来有点问题,在添加gbp的时候,所以我是安装教程一步步安装的。

  1. # 添加gbp,但是我按照官方教程执行有点问题,去掉最后一个-符号就可以执行
  2. $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  3. # 添加APT资源
  4. $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  5. $ sudo apt-get update
  6. # 查看源是否已经生效
  7. $ apt-cache policy docker-ce
  8. # 这时候应该输出类似于这种东西,如果没有这些输出的话,下面的安装就会找不到软件包了
  9. # docker-ce:
  10. # Installed: (none)
  11. # Candidate: 17.03.1~ce-0~ubuntu-xenial
  12. # Version table:
  13. # 17.03.1~ce-0~ubuntu-xenial 500
  14. # 500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
  15. # 17.03.0~ce-0~ubuntu-xenial 500
  16. # 500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
  17. # 最后安装docker
  18. $ sudo apt-get install -y docker-ce
  19. # 安装之后执行以下命令有信息输出即证明成功。
  20. $ sudo systemctl status docker

之后我们可以通过下载一个镜像来尝试运行hello world。

  1. docker run ubuntu echo "Hello world"

三.使用国内源

我们的docker在国内下载镜像并不会很流畅,所以我选择使用国内官方的景象

我直接新建文件:/etc/docker/daemon.json,然后添加如下json,重启docker即可永久选择国内镜像。

  1. {
  2. "registry-mirrors": ["https://registry.docker-cn.com"]
  3. }

四.docker的基本概念

1.image(镜像)

docker把应用程序以及其依赖,打包在image文件里面,docker容器是通过运行image生成的实例,同一个image文件可以生成多个容器实例。

2.container(容器)

container是一个docker的运行实例,也叫做容器,本身也是一个文件,可以理解容器实例就是通过渲染运行image镜像之后才产生的。值得注意的是生成容器之后,关闭容器不会删除该容器文件,该容器文件之后停止运行了而已。

至于镜像以及容器之间拥有镜像分层结构,详解可以看出我写的这篇文章

五.基本命令

镜像操作

  1. # 查看当前本地镜像列表
  2. $ docker images
  3. # 查看远程相关镜像镜像
  4. $ docker search 镜像名字
  5. # 拉取镜像到本地
  6. $ docker pull 镜像名字
  7. # 删除镜像(当存在多个名字一样的镜像时候,可以通过指定tag方式来操作,如ubuntu:16.04)
  8. $ docker rmi 镜像名字

容器的基本操作

  1. # 创建一个docker容器,返回容器的id
  2. $ docker create 镜像名字
  3. # 运行docker容器
  4. $ docker start 容器id
  5. # 新建容器且运行,也就是上面两步一块执行。
  6. # 值得注意的是如果该镜像在本地不存在,会自动从源那里去拉取
  7. $ docker run 镜像名字
  8. # 停止容器
  9. $ docker stop 容器id
  10. # 查看当前运行的docker容器
  11. $ docker ps
  12. # 查看全部的docker容器
  13. $ docker ps -a
  14. # 删除容器
  15. $ docker rm 容器id

新建容器(docker run 镜像)常见可选参数:

  1. p:指定映射端口,如运行一个nginx服务,那么我可以设置 -p 8080:80来把本地的8080端口映射到容器里的80端口。
  2. d:容器作为一个守护进程去进行运行,也就是保持后台运行,运行后会返回cotainer id。

容器与镜像间的操作

  1. # 终端连接到容器
  2. $ docker exec -i -t 容器id bash
  3. # 复制文件到容器里面
  4. $ docker cp index.html 镜像id://usr/share/nginx/html
  5. # 保存更改并生成为一个新的image文件
  6. $ docker commit -m "mess" 镜像id 镜像名字

docker学习系列(一):docker 基础的更多相关文章

  1. Docker学习系列(一):windows下安装docker(转载)

    本文目录如下: windows按照docker的基本要求 具体安装步骤 开始使用 安装远程连接工具连接docker 安装中遇到的问题 Docker的更新 Docker中的jupyter windows ...

  2. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  3. docker学习系列-jdk基础镜像制作

    准备一台安装有docker服务的机器 1.编辑Dockerfile   vim Dockerfile FROM centos:latest ADD ./jdk-8u141-linux-x64.tar. ...

  4. docker学习系列(三):docker镜像的分层结构

    docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...

  5. Docker学习系列(二):Docker三十分钟快速入门(上)

    一.背景 ​ 最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃.那么本文我们来聊一聊Docker,和大家一起认识Docker,简单入门Dock ...

  6. Docker学习系列之一——安装篇

    一.目的 Docker是目前非常流行的虚拟技术,在云计算领域得到了广泛的应用.国内的阿里.京东等大厂都非常普遍地应用了Docker.本文记录了Docker的基本安装过程及最终运行结果,以期备忘,及和同 ...

  7. Docker学习系列(一)-CentOS7下安装Docker

    CentOS7下Docker的安装 一.操作系统要求 CentOS 7 64位 Kernel 3.10+ 本机系统信息 二.卸载旧版本 如果之前安排过旧版本的Docker,先卸载掉旧版Docker以及 ...

  8. Docker学习笔记2: Docker 概述

    一.什么是Docker Docker是基于Go语言实现的云开源项目. Docker 的主要目标是:"Bulid,Ship and  Run Any App ,AnyWhere" , ...

  9. Docker概念学习系列之Docker核心概念之镜像Image

    不多说,直接上干货! 说明:   Docker 运行容器之前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户 ...

  10. Docker学习总结之Docker与Vagrant之间的特点比较

    以下内容均出自Vagrant作者(Mitchell Hashimoto)与Docker作者(Solomon Hykes)在stackoverflow上面一个问题讨论.在这个问题中,双方阐述了vagra ...

随机推荐

  1. 基于Appium1.6.X的WebDriverAgent编译、安装

    转自:http://www.cnblogs.com/baconLiu/p/6861431.html tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appiu ...

  2. Newtonsoft.Json 操作 JSON 字符串

    Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...

  3. LeetCode - 728. Self Dividing Numbers

    A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is ...

  4. PHP数组基本排序算法和查找算法

    关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章1.2种排序算法冒泡排序:例子:个人见解 5 6 2 3 7 9 第一趟 5 6 2 3 7 9 5 2 6 3 7 9 5 2 3 6 7 ...

  5. 【特性】select语句中使用字符串链接获取字段值失败

    坑1 在一个多行的表中,想把其中的一个字段值拿出来,组成一个字符串供后面使用. 按照以往,自己就如以下这么写了: declare @sql varchar(8000) set @sql='insert ...

  6. java递归

    package com.sun.test; import java.util.ArrayList; import java.util.List; /** * 递归 * */ public class ...

  7. IOS开发之记录用户登陆状态,ios开发用户登陆

    IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreDa ...

  8. MySQL中的内置系统函数

    一.字符串函数  1. CONCAT(S1,S2....SN): 把传入的参数连接成一个字符串  2. INSERT(str, x, y, insert): 将字符串 X位置开始,y个字符串长度替换为 ...

  9. paping使用来测试联通&网站由于tcp协议导致的无法通信问题超时问题

    1. 使用paping来测试连通性 Linux 平台: : wget http://www.updateweb.cn/softwares/paping_1.5.5_x86-64_linux.tar.g ...

  10. Python常用数据结构之heapq模块

    Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...