docker 入门教程

本贴最后更新于 1052 天前,其中的信息可能已经东海扬尘

docker

1. 容器简介

ScreenShot20180320at9.24.09AMtcm1956643.png

1.1 虚拟化技术

Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。

被Hypervisor用来执行一个或多个虚拟机器的电脑称为主体机器(host machine),这些虚拟机器则称为客体机器(guest machine)。hypervisor提供虚拟的作业平台来执行客体操作系统(guest operating systems),负责管理其他客体操作系统的执行阶段;这些客体操作系统,共同分享虚拟化后的硬件资源。

起初,大家普遍认为基于hypervisor的方式可以在最大程度上提供灵活性。所有虚拟机实例都能够运行任何其所支持的操作系统,而不受其他实例的影响。然而,越来越多的用户发现hypervisor提供这样一种广泛支持的特性其实是在给自己制造麻烦。对于hypervisor环境来说,每个虚拟机实例都需要运行客户端操作系统的完整副本以及其中包含的大量应用程序。从实际运行的角度来说,由此产生的沉重负载将会影响其工作效率及性能表现。

1.2 容器

因此出现了一种称为容器(Container)的新型虚拟化技术来帮助解决这些问题。

操作系统层虚拟化(英语:Operating system–level virtualization),亦称容器化(英语:Containerization),是一种虚拟化技术,这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。

1.3 虚拟机与容器的对比

项目 虚拟机 容器
启动时间 分钟级启动 秒级启动
体积 以G为单位 容器镜像大小通常以M为单位
性能 需要Hypervisor层,需要虚拟化硬件设备,具有完整的Guest OS,开销大,性能较容器差 共享宿主机内核,系统级虚拟化,没有Hypervisor层开销,性能基本接近物理机
安全性 具有完成的Guset OS,隔离性,稳定性好 因为共享了宿主机内核,只是进程级的隔离,因此隔离性和稳定性不如虚拟机。且容器有权限访问宿主机内核,存在一定的安全隐患。
要求 基于硬件虚拟化,需要cpu支持虚拟化技术 不用考虑cpu是否支持虚拟化

2. docker是什么

Docker是一个开源的应用容器引擎,使用GO语言开发,并利用 Linux 内核的几个特性来提供其功能。Docker 使应用程序与基础设施分开,以便可以快速交付软件。

2.1 应用场景

3. docker架构

Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。

image.png

Docker 守护进程

Docker 守护进程 ( dockerd) 监听 Docker API 请求并管理 Docker 对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。

Docker 客户端

Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当您使用诸如 之类的命令时docker run,客户端会将这些命令发送到dockerd,从而执行它们。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。

Docker 仓库

Docker仓库用来存储 Docker 镜像。Docker Hub 是一个任何人都可以使用的公共仓库平台,Docker 默认配置在 Docker Hub 上查找镜像。也可以配置自己的私有仓库。

4. 安装docker

4.1 linux上安装

在各种linux系统上安装docker最简单的方法是使用官方脚本自动安装。

安装命如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

各种linux系统的手动安装步骤见官方文档

安装好docker服务后还应该把docker服务设置为开机启动命令如下:

# 查看是否设置开机启动
systemctl list-unit-files | grep docker.service.*enabled

# 设置开机启动
systemctl enable docker.service

# 关闭开机启动
systemctl disable docker.service

4.2 mac上安装

  1. 下载 Docker Desktop for Mac
  2. 双击Docker.dmg打开安装程序,然后将 Docker 图标拖到 Applications 文件夹中。

dockerappdrag.png

Docker Desktop 安装包括 Docker Engine、Docker CLI 客户端、 Docker Compose、Docker Content Trust、Kubernetes和Credential Helper。

4.3 windows上安装

注意dokcer只支持win10

  1. 下载Docker Desktop for windows
  2. 安装和开启Hyper-V
  3. 双击下载安装包按照提示进行安装

5. 镜像加速

国内从 DockerHub 拉取镜像会比较慢,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

5.1 linux系统

修改/etc/docker/daemon.json文件,如果没有先建一个即可

sudo vim /etc/docker/daemon.json

修改配置文件内如下:

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

然后重启服务

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

5.2 windows系统

对于使用 Windows 10 的系统,在系统右下角托盘 Docker 图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Daemon。在 Registrymirrors 一栏中填写加速器地址 **https://docker.mirrors.ustc.edu.cn/** ,之后点击 Apply 保存后 Docker 就会重启并应用配置的镜像地址了。

5.3 Mac系统

对于使用 Mac OS X 的用户,在任务栏点击 Docker for mac 应用图标-> Perferences...-> Daemon-> Registrymirrors。在列表中填写加速器地址 **https://docker.mirrors.ustc.edu.cn/** 。修改完成之后,点击 Apply&Restart 按钮,Docker 就会重启并应用配置的镜像地址了。

配置好后运行下面的命令检查配置是否生效:

$ docker info
Registry Mirrors:
    https://docker.mirrors.ustc.edu.cn/

6. 镜像操作

6.1 什么是镜像

Docker镜像可以理解为一个精简的Linux操作系统安装包。通过镜像可以快速的启动容器。

6.2 镜像常用命令

  1. 下载镜像

    docker hub是由docker官方负责维护的公共仓库,包含大量的容器镜像。

    hub.docker.com上搜索你要的镜像,然后根据页面提示下载,命令格式:

    $ sudo docker pull 镜像名
    
  2. 查看镜像列表

    $ sudo docker image ls
    
  3. 删除镜像

    $ sudo docker image rm 镜像名
    
  4. 推送镜像

    推送一个镜像到镜像仓库

    $ sudo docker push 镜像名
    
  5. 保存镜像

    保存一个或多个镜像到一个tar归档文件

    $ sudo docker image save 镜像名 -o xxx.tar
    
  6. 加载镜像

    从tar归档或者标准输入来加载镜像

    $ sudo docker image load 镜像名 -i xxx.tar
    
    
  7. 构建镜像

    从Dockerfile构建一个镜像

    $ sudo docker build -t name:tag path
    

7. 容器操作

7.1 什么是容器

容器就是根据镜像启动的一个进程,它是一个运行的系统。

7.2 容器的常用命令

  1. 创建容器

    根据镜像创建一个容器

    $ sudo docker container run [OPTIONS] image [command]
    

    例如:

    $ sudo docker run ubuntu:lastest /bin/echo "Hello world"
    

    表示通过镜像unbuntu:lastest启动一个容器,运行/bin/echo "hello world"命令,如果本地没有unbuntu:lastest镜像,会自动去仓库下载。

  2. 创建容器的常用参数

    参数 描述
    -i 交互式创建容器
    -t 分配一个伪终端
    -d 运行容器到后台
    -e 设置环境变量
    -p 映射容器端口到主机
    -h 设置容器主机名
    --link 添加连接到另一个容器
    --network 连接容器到一个网络
    -v 挂载宿主机目录到容器
    --restart 容器退出后的重启策略,默认no[always|failure]
    --name 给容器命令
  3. 启动容器

    启动一个停止的容器

    $ sudo docker container start 容器名/ID
    
  4. 停止容器

    停止一个运行的容器

    $ sudo docker container stop 容器名/ID
    
  5. 查看日志

    查看运行的容器的日志

    $ sudo docker container logs 容器名/ID
    
  6. 执行命令

    在运行的容器中执行命令

    $ sudo docker container exec -it 容器名/ID command
    
  7. 查看容器列表

    $ sudo docker container ls
    
  8. 删除一个容器

    $ sudo docker container rm 容器名/ID
    

8.使用docker安装jenkins

  1. 下载镜像

    在hub.docker.com中搜索jenkins,可以找到官方镜像,但是已经弃用,推荐使用社区维护的镜像,地址为:https://hub.docker.com/r/jenkins/jenkins。选择一个合适的版本下载,例如:

    $ sudo docker pull jenkins/jenkins:alpine
    
  2. 创建容器

    创建命令如下:

    docker run -d -u root --name jenkins -v jenkins_home:/var/jenkins_home -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -p 50000:50000 jenkins/jenkins:alpine
    

    参数说明:

    • -d: 后台运行容器
    • -u root:使用root用户登录
    • -v jenkins_home:/var/jenkins_home:创建卷jenkins_home持久化workhome
    • -v $(which docker):/usr/bin/docker: 映射宿主机中的docker客户端到容器中
    • -v /var/run/docker.sock:/var/run/docker.sock: 映射docker守护进程的unix socket程序到容器中
    • -p 8080:8080: 映射容器的8080端口到宿主机的8080端口
  3. 访问jenkins

    容器创建成功后,在宿主机上访问http://127.0.0.1:8080即可访问容器中的jenkins

学习docker没有云服务器怎么行?

阿里云服务器新人特惠连接(仅限新人)地址

2 操作
877649301 在 2021-10-28 19:33:29 更新了该帖
877649301 在 2021-09-23 15:30:44 更新了该帖
回帖
请输入回帖内容 ...