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 ...
随机推荐
- JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement对象编译SQL语句时, ...
- 小甲鱼OD学习第6讲
这次我们的任务是破解这个通讯录的软件,首先,我们在通讯录一个分组添加第5个人,发现弹出对话框,限制每组只能添加4个人 并且发现最多只能添加3个分组 我们把程序载入OD,运行,添加人,这个时候点击暂停, ...
- Docker小记 — Docker Engine
前言 用了Docker方才觉得生产环境终于有了他该有的样子,就像集装箱普及之后大型货轮的价值才逐渐体现出来,Docker详细说明可查阅"官方文档".本篇为Docker Engine ...
- LeetCode - 307. Range Sum Query - Mutable
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...
- CSS常用属性计算原理
absolute: left.right/top.bottom 的百分比值分别根据父元素的 wdith / height 计算 margin: top /right / bottom/ left 的百 ...
- youtube视频字幕下载
视频下载 安装TamperMonkey插件 字幕下载 http://mo.dbxdb.com/setting.html https://zhuwei.me/y2b/
- [bzoj4552][Tjoi2016&Heoi2016]排序-二分+线段树
Brief Description DZY有一个数列a[1..n],它是1∼n这n个正整数的一个排列. 现在他想支持两种操作: 0, l, r: 将a[l..r]原地升序排序. 1, l, r: 将a ...
- Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...
- Servlet中文乱码问题解决办法
首先对于源jsp网站和servlet里面的字符集要一样,一般支持中文的字符集为UTF-8最好采用这个字符集(除此之外还有gb2312); 对于源jsp文件的代码中需要设置 设置你的page里面的字符集 ...
- 初学Python(第二课)
一.列表.元组的操作 1.定义:列表类似于C中的数组,使用方法也相似.它的定义举例如下:letter = ['A','B','C','D','E','F']; 2.列表的切片 (1)访问一个元素且知道 ...