Docker 简介与使用

目录

1. 什么是 Docker ?
2. CentOS 环境安装 Docker
3. Docker 的使用
4. 创建 Docker 镜像
5. 存取上传 Docker 镜像

1. 什么是 Docker ?

单个服务器, 物理性能;

云时代, 凭借虚拟化技术构建的集群处理能力;

大型主机虚拟化 → 虚拟机虚拟化 → 容器技术

基于容器打造的云平台称为 “容器云”;

Docker 是众多容器技术中的佼佼者;

诞生于 2013 年;已经加入 Linux 基金会,遵循 Apache 2.0 协议;

Linux 各大发行版已经在官方软件源中默认带有 Docker 软件包;

Docker 的构想是要实现“Build,Ship and Run Any App,Anywhere”,即通过对应用的封装(Packaging)、
分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到
处运行”。

组件,可以是一个 Web 应用、一个编译环境、一套数据库平台服务、一个操作系统或集群。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个
虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行
版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 三大核心概念:镜像(Images)、容器(Containers)、仓库(Registry)

1.镜像:一个 Apache 镜像包括一个基本的操作系统环境和 Apache 应用程序。

2.容器:可以看作一个简易版的 Linux 系统环境以及运行在其中的应用程序打包而成的盒子。
       镜像自身是只读的。容器从镜像启动时,会在镜像的最上层创建一个可写层。

3.仓库:可以将自己的镜像 push 到指定的公有或私有仓库。使用时 pull 下来即可。

Docker 引擎分两个版本:社区版本(Community Edition,CE)和企业版本(Enterprise Edition,EE)。
Docker 社区版本每月发布一次尝鲜(Edge)版本,每季(3、6、9、12月)发行一次稳定(Stable)版本。
返回目录

2. CentOS 环境安装 Docker

官方链接:Install Docker Engine on CentOS

2.1 安装 yum-utils 包(提供了 yum-config-manager)
$ sudo yum update
$ sudo yum install -y yum-utils
2.2 添加 Docker 稳定版本的 yum 软件源 (/etc/yum.repos.d/docker-ce.repo)
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2.3 安装 Docker 引擎(可以直接安装最新版本,也可以选择安装旧版本)
$ sudo yum install -y docker-ce docker-ce-cli containerd.io
2.4 查看 Docker 版本
$ sudo docker version(或 info)

返回目录

3. Docker 的使用

3.1 启动 Docker
$ sudo systemctl start docker
3.2 测试 hello-world image
$ sudo docker image pull hello-world  
$ sudo docker run hello-world         ## docker run 具有抓取 image 文件功能,所以可以省略上面的抓取操作。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
## run 后容器自动结束

$ docker container ls                 ## 查看正在运行的容器
$ docker container ls --all           ## 查看全部容器

$ docker container kill [containerID] ## 终止指定容器
$ docker container rm [containerID]   ## 删除指定容器文件
3.3 image 文件操作
$ docker image ls                     ## 查看本机所有 image 文件
$ docker image rm [imageName]         ## 删除 image 文件

## Docker 将应用程序及其依赖,打包成 image 文件(平台通用)。
## 通过这个 image 文件生成 Docker 容器。
## Docker 容器运行即相当于用户需求的可执行文件的运行。

返回目录

4. 创建 Docker 镜像

4.1 基于已有镜像的容器创建

官方链接:docker container commit

$ docker container commit -m "message" -a "author" a23b909c384 Repository:0.1
    ## -m 提交信息
    ## -a 作者信息
    ## -c 提交时执行 docker 指令
    ## -p 提交时暂停容器执行
9e9c814023bcffc3e67e892a235afe6lb02f66a947d2747f724bd317dda02f27  ## 返回新的 ID 信息
4.2 基于 Dockerfile 创建

关于 Dockerfile:官方链接:Dockerfile reference

Dockerfile 主体分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令

Dockerfile 文件结构:
# escape=\ (backslash)
# This dockerfile uses the ubuntu:xeniel image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command]

# Base image to use, this must be set as the first line
FROM ubuntu:xeniel

# Maintainer: docker_user <docker_user at email.com> (@docker_user)
LABEL maintainer docker user<docker user@email.com>

# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ xeniel main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaeron off;" >> /etc/nginx/nginx.conf

# Commands when creating a new container
CMD /usr/sbin/nginx

创建步骤:参考链接:Docker 入门教程

1. 先下载源码:
  $ wget https://github.com/ruanyf/koa-demos/archive/master.zip
  $ unzip koa-demos-master.zip
  $ cd koa-demos
  koa-demos/
  demos  Dockerfile  logo.png  package.json  package-lock.json  README.md

2. 新建文本文件 .dockerignore
  $ mkdir .dockerignore
    # /.docerignore
    .git
    node_modules
    npm-debug.log

  ## 在.dockerignore 文件中添加以上三个路径,目的是排除不打包进 image 文件。
  ## 如果没有这三个路径可以不新建 .dockerignore。

3. 编辑 Dockerfile 文件
  $ vim Dockerfile
  ## /Dockerfile
  FROM node:8.4
  COPY . /app
  WORKDIR /app
  RUN npm install --registry=https://registry.npm.taobao.org
  EXPOSE 3000
  CMD node demos/0.1.js

  ## FROM node:8.4:继承官方 8.4 版本的 node image。
  ## COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
  ## WORKDIR /app:指定接下来的工作路径为/app。
  ## RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
  ## EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。
  ## CMD node demos/0.1.js:容器启动后执行该命令。(注意:插入该命令后,docker container run -p 8000:3000 -it koa-demo /bin/bash 后面将无法添加附加命令 /bin/bash)

4. 创建 image 文件
  $ docker image build -t koa-demo .
  ## 或者
  $ docker image build -t koa-demo:0.0.1 .
  ## 其中:-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
  $ docker image ls     ## 查看是否创建成功

  ## 运行该容器
  $ docker container run -p 8000:3000 -it koa-demo /bin/bash  ## 无 CMD 命令执行该命令
  $ docker container run -p 8000:3000 -it koa-demo            ## 有 CMD 命令执行该命令

返回目录

5. 存取上传 Docker 镜像

5.1 存出镜像(导出到本地)
$ docker save -o ubuntu_18.04.tar ubuntu:18.04  ## 导出本地镜像 ubuntu:18.04 为文件 ubuntu_18.04.tar 
5.2 载入镜像(本地导入)
$ docker load -i ubuntu_18.04.tar		## 导入本地 ubuntu_18.04.tar 文件
5.3 上传镜像到 Docker Hub 官方仓库

注册:dockerhub

$ docker login                              ## 登录仓库
$ docker tag test:0.0.1 user/test:0.0.1     ## 添加新的标签 user/test:latest
$ docker push user/test:0.0.1               ## 使用 push 命令上传

返回目录

官方链接:Install Docker Engine on CentOS
官方链接:Dockerfile reference
参考链接:Docker 入门教程
参考书籍:《Docker技术入门与实战 第3版》

posted @ 2021-09-12 17:48  xiaobo0602  阅读(66)  评论(0编辑  收藏  举报