一.简介

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

虚拟机

而虚拟机技术就是其中的一种解决方法,众所周知,虚拟机技术允许一种操作系统之上运行另一种操作系统,如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 镜像)常见可选参数:

  1. p:指定映射端口,如运行一个nginx服务,那么我可以设置 -p 8080:80来把本地的8080端口映射到容器里的80端口。
  2. 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 基础的更多相关文章

  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. BZOJ 1502: [NOI2005]月下柠檬树 [辛普森积分 解析几何 圆]

    1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1070  Solved: 596[Submit][Status] ...

  2. 测试人员如何使用Git部署测试环境

    Git是分布式的版本控制系统. 作为一名Git的小白使用者,一开始接触很懵逼,因为总担心自己一不小心误操作影响代码仓库的代码,网络上关于Git的使用多从开发的角度,很少有人从测试的角度来介绍Git的使 ...

  3. MySQL统计函数记录——按月、按季度、按日、时间段统计

    按年汇总,统计:select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, ...

  4. 为何要部署IPV6

    ·IPv4的局限性:   1.地址空间的局限性:IP地址空间的危机由来已久,并正是升级到IPv6的主要动力.   2.安全性:IPv4在网络层没有安全性可言,安全性一直被认为是由网络层以上的层负责. ...

  5. C#实现七牛云存储

    云存储,就是把本地的资源文件存放至网络上,可以公网访问.相当于网盘功能,感觉非常方便. 这里介绍的是七牛云存储.有兴趣的可以去官方网站详看 根据官网的介绍,本身是提供SDK的,下载地址,大家可以根据自 ...

  6. Visual Studio 2017 Enterprise 发布 15.4 版本,离线安装包百度网盘下载。

    Visual Studio 2017 于2017年10月13日发布 15.4 版本.该版本包含多项生产力改进,支持 .NET Standard 2.0 ,并且可以开启 Xamarin Live Pla ...

  7. linux开放80 端口

    1.使用su登录管理员用户 2.编辑防火墙配置文件 vim /etc/sysconfig/iptables 3.在里面加入后保存 #open port 80 -A INPUT -p TCP -m st ...

  8. 如何使用 VS生成动态库?

    如何使用 VS生成动态库? //.cpp 文件默认定义了 __cplusplus 宏 #ifdef __cplusplus extern "C"{ #endif xxx #ifde ...

  9. MFRC522

    https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/README.md https://github.com/mxgx ...

  10. Redis--配置密码

    可以通过以下方法进行密码的配置: ① 修改配置文件设置密码 ② 通过命令修改密码(重启redis后,新设置的密码会失效) 此处介绍第一种 1. 找到redis的配置文件,一般在/etc/redis.c ...