1、Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

2、Ubuntu16.04上安装docker比较容易,如果你的Ubuntu系统当中还没有安装docker,输入docker命令后,Ubuntu16.04系统会提示你执行怎样的命令完成docker的安装。

3、docker的使用:基本的docker命令

1)

docker run ubuntu:15.10 /bin/echo "Hello world"  

语句参数说明:

docker: Docker 的二进制执行文件。

run:与前面的 docker 组合来运行一个容器。

ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

/bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以理解为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world"语句。

2)容器的启动方式

1>启动命令行交互模式的容器,即为容器启动伪终端。

docker run -i -t ubuntu:15.10 /bin/bash

语句参数说明:

-t:在新容器内指定一个伪终端或终端。

-i:允许你对容器内的标准输入 (STDIN) 进行交互。

此时我们已进入一个 ubuntu15.10系统的容器

我们尝试在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表

2>启动后台运行模式的容器,使用-d参数

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

标题说明:

CONTAINER ID:容器ID

NAMES:自动分配的容器名称

在容器内使用docker logs命令,查看容器内的标准输出

docker logs e403feed3e7a

因为docker在创建并运行容器的时候自动为我们的容器分配了id和名字,所以我们还可以使用以下命令进行日志的查看:

docker logs sad_agnesi

可以看到效果是一样的。

3)容器的停止:使用docker stop 容器id/容器名

1>根据容器id停止指定的容器

docker stop e403feed3e7a

  2>根据指定容器名停止容器

docker stop sad_agnesi

4)获取或者拉新镜像

docker pull ubuntu:15.10

5)创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

1>从已经创建的容器中更新镜像,并且提交这个容器镜像

我们通过需要修改的镜像创建一个容器并运行容器。

docker run -t -i ubuntu:15.10 /bin/bash

在运行的容器伪终端内使用 apt-get update 命令进行应用更新。
      在完成操作之后,输入 exit命令来退出这个容器的伪终端。

此时容器ID为748bddac7d6d的容器,是按我们的需求更改了的容器。我们可以通过命令 docker commit来提交容器副本。

参数说明:

-m:提交日志信息

-a:指定镜像作者

748bddac7d6d:指定提交的容器ID

runoob/ubuntu:v2:指定要创建的目标镜像名

我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2,如上图。

使用我们的新镜像 runoob/ubuntu 来启动一个容器:

2>使用 Dockerfile 指令来构建一个新的镜像

我们使用命令 docker build , 从零开始来构建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

执行镜像构建文件:

构建命令参数说明:

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

查看我们新构建的镜像:

以我们新构建的镜像启动一个容器:

从上面看到新镜像已经包含我们创建的用户lfy。

对Dockerfile构建镜像文件说明:

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定从哪个镜像源创建新的镜像。

RUN 指令告诉docker 在镜像内执行命令,安装了什么。

给镜像增加tag标签:使用 docker tag 命令

可以看到,执行docker tag命令是为镜像新添加一个标签,而不是修改原有的标签。

6)镜像的删除:镜像的删除,需要先停止相应镜像的容器的运行,否则会报错。

我们可以使用如下命令查看当前系统已经创建的所有容器,无论其是否在启动运行。

删除容器:

删除指定镜像:

小结:

1>删除容器使用命令docker rm 容器id/容器名;删除镜像使用命令docker rmi 镜像id/镜像名。

2>删除镜像前,需要先删除容器。

7)docker容器的连接

docker run -d -p 4000:22 -p 4001:8080 -p 4002:1521  -p 4003:445  -p 4004:3999  -p 4005:8443  -p 4006:18011  -p 4007:18043  --name usdp40 -h usdp40 --privileged 127.0.0.1:5000/usdp/video:c82 /etc/init.d/after.local

-P :是容器内部端口随机映射到主机的高端口。
  -p : 是容器内部端口绑定到指定的主机端口。

 

Docker学习--docker的基本认识的更多相关文章

  1. DOCKER学习 docker

    DOCKER只能安装到LIUX系列机器上 如果WINDOWS想安装必须通过虚拟机来完成. 比如用VM,VBOX等 安装之前需要用ROOT账户 su 安装DOCKER (CE是个人版本,EE是企业版本) ...

  2. Docker学习—Docker简介

    什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...

  3. Docker学习-Docker搭建Consul集群

    1.环境准备 Linux机器三台 网络互通配置可以参考 https://www.cnblogs.com/woxpp/p/11858257.html 192.168.50.21 192.168.50.2 ...

  4. docker学习---docker基础知识

    目录 docker的基础 1.安装docker 2.使用镜像 3.镜像迁移|导入和导出 4.docker Hub介绍 5.搭建私有镜像仓库 5.1.docker开源的镜像分发工具--docker Re ...

  5. Docker学习のDocker镜像

    一.列出镜像 命令:docker images [optsions] [repositort] -a 标识列出所有 -f  写过滤条件 --no-trunc  不截断id -q 只显示唯一id rep ...

  6. Docker学习のDocker的简单应用

    一.常见基本docker命令 docker是在一个linux虚拟机上运行的(对于windows来说),打开Docker quickStart terminal,就连街上了docker的 daemon ...

  7. Docker学习のDocker和虚拟机

    最初听到Docker,是作为虚拟机来宣传的,但是它本质不是虚拟机 一.虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. ...

  8. 1.ASP.NET Core Docker学习-Docker介绍与目录

    Docker的优点: 1节约时间,快速部署和启动 2节约成本 3标准化应用发布 4方便做持续集成 5可以用Docker做为集群中的轻量主机或节点 6方便构建基于SOA或者微服务架构 的系统 学习目录: ...

  9. Docker学习のDocker初识

    一.Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...

随机推荐

  1. 第1章 (名词)Le nom

    ★名词的种类:(1)普通名词 —专有名词,如:          un livre —la Chine(2)可数名词—不可数名词,如:          un ami —le lait(3)具体名词— ...

  2. UVa 12118 nspector's Dilemma (构造+DFS+欧拉回路)

    题意:给定n个点,e条边和每条边的长度t,每两个点之间都有路相连,让你求一条最短的路经过这e条边. 析:刚开始想到要判连通,然后把相应的几块加起来,但是,第二个样例就不过,后来一想,那么有欧拉回路的还 ...

  3. (并查集)A Bug's Life -- POJ -- 2492

    链接: http://poj.org/problem?id=2492 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...

  4. genymotion无法连接相机问题

    genymotion模拟器即时打开了相机的开关,也无法连接到相机.这是因为其他进程占用了相机,虚拟设备无法获得,可以尝试: 1.不关闭模拟器,重启adt的Eclipse 2.重启ADB,adb kil ...

  5. mac下能同时安装两个版本的xcode吗

    http://www.cocoachina.com/bbs/read.php?tid-288160-page-1.html

  6. 解决由AJAX请求时forms认证实效的重新认证问题

    前言: 当用AJAX请求一个资源时,服务器检查到认证过期,会重新返回302,通过HTTP抓包,是看到请求了登录页面的,但是JS是不会进行跳转到登录页面. 使用环境: ASP.NET MVC 4 JQU ...

  7. DevOps Workshop 研发运维一体化(广州站)

    第一天对软件开发的需求管理.项目计划和源代码管理进行的全面而深入的介绍,并且为到会的所有开发人员提供现场动手实验的机会,大家兴致高涨,按照我们的操作手册完成了所有实验课题. 第二天主要介绍了最新的自动 ...

  8. 使用ABP框架踩过的坑系列5

    DDD领域驱动开发,实际是为复杂的业务场景而生的,为了让开发人员专注于业务,而操作系统.数据库.网络之类的技术细节,必须要持久透明化:实际就是数据库系统DBMS的ORM抽象,目标就是业务不需要考虑数据 ...

  9. Hibernate一级缓存测试分析

    Hibernate 一级缓存测试分析 Hibernate的一级缓存就是指Session缓存,此Session非http的session会话技术,可以理解为JDBC的Connection,连接会话,Se ...

  10. WPF点滴(2) 创建单实例应用程序

    最近有同事问道在应用程序启动之后,再次双击应用程序,如何保证不再启动新的应用程序,而是弹出之前已经启动的进程,本质上这就是创建一个单实例的WPF应用程序.在VS的工程树中有一个App.xaml和App ...