什么是Docker容器?

容器是打包代码及其所有依赖项的软件的标准单元,因此应用程序可以从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级的,独立的,可执行的软件软件包,其中包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置 容器映像在运行时会成为容器,对于Docker容器,映像会在Docker Engine上运行时成为容器。不论基础架构如何,容器化软件都可用于基于Linux和Windows的应用程序,始终运行相同。容器将软件与其环境隔离开来,并确保尽管开发和登台之间存在差异,但软件仍可以均匀地工作。 Docker容器具有以下特点:

  • 标准: Docker创建了容器的行业标准,因此它们可以在任何地方移植
  • 轻量级:容器共享计算机的OS系统内核,因此不需要每个应用程序都具有OS,从而提高了服务器效率并降低了服务器和许可成本
  • 安全:应用程序在容器中更安全,并且Docker提供了业界最强大的默认隔离功能

Docker基础

  • Docker环境安装 Ubuntu Docker 安装

    #卸载旧版本
    $ sudo apt-get remove docker docker-engine docker.io       containerd runc
    #更新apt
    $ sudo apt-get update
    #安装 apt 依赖包,用于通过HTTPS来获取仓库:
    $ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    #添加 Docker 的官方 GPG 密钥:
    $ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/l     inux/ubuntu/gpg | sudo apt-key add -
    #使用以下指令设置稳定版仓库
    $ sudo add-apt-repository \
    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-     ce/linux/ubuntu/ \
    $(lsb_release -cs) \
    stable"
    #安装 Docker Engine-Community
    $ sudo apt-get update
    #安装最新版本的 Docker Engine-Community 和 containerd 
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io

    CentOS Docker 安装

    #卸载旧版本
    $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
    #设置仓库
    $ sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    #设置阿里云仓库
    $ sudo yum-config-manager \
          --add-repo \
          https://download.docker.com/linux/centos/docker-ce.repo
    #安装Docker Engine-Community
    $ sudo yum install docker-ce docker-ce-cli containerd.io
    #启动docker
    sudo systemctl start docker
    sudo systemctl ebable docker

    Windows 安装

    Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。 Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows

    Mac 安装

    #Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:
    brew install --cask --appdir=/Applications docker
  • Dockerfile构建镜像

    Docker的镜像是层叠结构的。 这个有点像git。就是最上一层的images,可能是下一层的images,为 基础构建的。

    1. 构建Dockerfile

    FROM nginx
    RUN echo '这是一个本地构建的nginx镜像' > /usr/share/ngin   x/html/index.html

    FROM :依赖的基础镜像

    RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

     # <命令行命令> 等同于,在终端操作的 shell 命令。
    1. RUN <命令行命令>
      #RUN ["./test.php", "dev", "offline"] 等价于 RUN ./tes    t.php dev offline
    2. RUN ["可执行文件", "参数1", "参数2"]

    COPY:用于从本地文件中复制到容器中

    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

    ADD:和copy一样,包含了解压的操作

    CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    1. CMD 在docker run 时运行。
    2. RUN 是在 docker build。

    ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

    ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

    ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

    ENV <key> <value>
    ENV <key1>=<value1> <key2>=<value2>...

    ARG:构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

    ARG <参数名>[=<默认值>]

    VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

    VOLUME ["<路径1>", "<路径2>"...]
    VOLUME <路径>

    EXPOSE:仅仅只是声明端口。 1. 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。 2. 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    WORKDIR: 指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    WORKDIR <工作目录路径>
    1. 构建Docker镜像

    docker build -t nginx:v3 .

    在 Dockerfile 文件的存放目录下,执行构建动作。 以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。命令中的. 是上下文路径。

  • Docker容器常用使用命令

    1. 下载容器 docker pull 镜像:tag

    默认下载走的是Dockerhub官方镜像,大家可以设置下阿里云的镜像仓库

    #修改镜像地址
    vim /etc/docker/daemon.json
    { "registry-mirrors": ["https://iv7stq00.mirror.aliyuncs.com"] }

    启动容器

     docker run -itd -v /opt/opt -p 5000:5000 --name test nginx  
       
    • -i: 交互式操作。
    • -t: 终端。
    • -d: 后端运行(不加会占用你的控制台,关闭控制台则关闭容器)。
    • -v: 映射容器内部文件夹。
    • -p: 映射端口。
    • --name: 容器名称

    查看当前镜像

    docker images 

    查看当前启动容器

    # -a启动失败的也可以看到
     docker ps -a 

    删除容器

     docker rm -f 容器名称/容器Id

    查看容器概况

     docker inspect 容器名称/容器Id

    进入容器

     docker exec -it 容器名称/容器Id bash

    重启容器

     docker restart 容器名称/容器Id

    其他命令

     docker command --help  

Docker三剑客简介

  • Docker Swarm

    Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。

  • Docker Machine

    能够帮助快速创建docker容器环境,Docker Machine也可以集中管理所有的docker主机,比如快速的给100台服务器安装上docker。

machine

  • Docker Compose

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

走进docker-初识的更多相关文章

  1. Docker初识

    <Docker--从入门到实践>是Docker技术的入门教程,学习时长两天,现整理关键点如下: 1. 什么是Docker? 轻量级操作系统虚拟化解决方案:Go语言实现:下图很好地说明了Do ...

  2. docker --- 初识

    Docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).ba ...

  3. docker 初识之二(简单发布ASP.NET Core 网站)

    在发布ASP.NET Core网站以前,先介绍一下DaoCloud 一个免费的docker云容器服务平台.登陆官方网站,创建一台docker主机,这台主机有120分钟的使用时间,对于鄙人学习使用正好合 ...

  4. 1021 docker初识

    docker与虚拟机相比,没有虚拟化内核,转而使用宿主机的内核.因此docker更轻更快 docker缺点:后端兼容性测试需求.把软件安装在不同的操作系统上进行测试,观察软件运行是否良好. 不能用do ...

  5. 走进docker的世界之入门篇

    by zhouzhipeng from https://blog.zhouzhipeng.com/walk-in-docker-beginning.html本文可全文转载,但需要保留原作者和出处. 什 ...

  6. Docker初识笔记

    Docker docker说白了就是:环境打包 我们能用docker什么? 1.如果配置好本地的linux环境交接给其他人,很麻烦,交接时要告诉他,装这个装那个,还可能出现问题,那我直接把这个环境放到 ...

  7. Docker 初识之路

    一. 安装配置 1.安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2   2.设置阿里云镜像源 sudo yu ...

  8. Docker学习のDocker初识

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

  9. docker 初识1

    学习网址 https://git.oschina.net/yangllsdev/docker-training https://docs.docker.com/engine/installation/ ...

  10. docker初识-docker安装、基于docker安装mysql及tomcat、基本命令

    一.docker是什么 用go语言开发,开源的应用容器引擎,容器性能开销极低 二.整体架构图 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 r ...

随机推荐

  1. 北京网络赛G BOXES 大模拟+BFS

    题目描述 Description There is a strange storehouse in PKU. In this storehouse there are n slots for boxe ...

  2. 如何实现一个简易版的 Spring - 如何实现 @Component 注解

    前言 前面两篇文章(如何实现一个简易版的 Spring - 如何实现 Setter 注入.如何实现一个简易版的 Spring - 如何实现 Constructor 注入)介绍的都是基于 XML 配置文 ...

  3. 一个汉字在php中占几个字节?

    问:一个汉字在php中占几个字节? 答: 对于中文字符,若使用 GBK.Big-5 版本,每个中文字符相当于 2 个字节: 若使用 UTF-8 版本,每个中文字符相当于 3 个字节.

  4. export html to canvas image

    export html to canvas image canvas.toDataURL https://developer.mozilla.org/en-US/docs/Web/API/HTMLCa ...

  5. taro 小程序 & touch event 转换 bug

    taro 小程序 & touch event 转换 bug before after 事件处理 https://nervjs.github.io/taro/docs/event.html#do ...

  6. js 增加数组的嵌套层数

    class A {} const proxy = new Proxy(new A(), { get(o, k) { if (!/\d+/.test(k.toString())) return o[k] ...

  7. Flutter 设置input边框

    example 1 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp ext ...

  8. Iterable object of JavaScript

    数组是可迭代的,所以数组可以用于for of,字符串也是可迭代的,所以字符串也可以用作for of,那么,对象呢? 试一试: var somebody = { start:0, end:100 } f ...

  9. 使用OkHttp和OkHttpGo获取OneNET云平台数据

    图1是OneNET官网关于NB-IoT文档关于批量查询设备最新数据的介绍,可以看到GET方法的URL地址和两个头部信息(图2是Htto请求消息结构).所以在写url时,还要添加两行头部字段名,不然获取 ...

  10. [计算机图形学]光栅化算法:DDA和Bresenham算法

    目录 一.DDA 二.Bresenham 三.绘制图形 1. 绘制直线 2. 绘制圆 3. 绘制椭圆 一.DDA DDA算法是最简单的直线绘制算法.主要思想是利用直线的斜截式:\(y=kx+b\) 对 ...