Docker入门

96次阅读

共计 5105 个字符,预计需要花费 13 分钟才能阅读完成。

docker

1. docker 的安装

1.1 centos7 虚拟机环境准备

为学习 docker 的使用, 重新安装配置 Centos7Docker 的虚拟机;

  • 最小安装, 设置用户名密码 root 123456
  • 关闭防火墙

    • systemctl stop firewalld.service 关闭防火墙
    • systemctl disable firewalld.service 禁止防火墙重启

1.2 docker 的安装

参考官方文档 https://docs.docker.com/insta…

1.2.1 查看当前 linux 版本

cat /etc/redhat-release

1.2.2 安装 gcc 相关包

yum install -y gcc
yum install -y gcc-c++

1.2.3 卸载老版本 docker

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotatedocker-logrotate

1.2.4 安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.2.5 设置稳定快速的镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.2.6 更新 yum 软件包索引

yum makecache fast

1.2.7 安装最新版的 docker-ce

yum -y install docker-ce

1.2.8 测试安装成功

docker version 查看当前的 docker 的版本信息
docker run hello-world 测试运行 一个简单的 demo 镜像

1.2.9 配置镜像加速

1.mkdir -p /etc/docker 创建文件夹

2.vi /etc/docker/daemon.json 创建并修改 daemon.json 文件, 添加如下信息:

 #网易云
{"registry-mirrors": ["http://hub-mirror.c.163.com"] }

3.systemctl daemon-reload

4.systemctl restart docker

1.2.10 删除卸载安装的 docker

systemctl stop docker

yum -y rm docker-ce

rm -rf /var/lib/docker

2. docker 组成

需要正确的理解仓储 / 镜像 / 容器这几个概念:

Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image 镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

  • image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
  • 一个容器运行一种服务,当我们需要的时候,就可以通过 docker 客户端创建一个对应的运行实例,也就是我们的容器
  • 至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

2.1 镜像(Image)

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

2.2 容器(Container)

Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。

它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

2.3 仓库(Repository)

仓库(Repository)是集中存放镜像文件的场所。
仓库 (Repository) 和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/),
存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云 等

3. docker 的常用命令

3.1 帮助命令

  • docker info
  • docker version
  • docker --help

3.2 镜像相关命令

docker images

列出本地主机的所有镜像

REPOSITORY TAG IMAGE ID CREATED SIZE
表示镜像的仓库源 镜像的标签 镜像 ID 镜像创建时间 镜像大小

docker search

在 docker hub 的库中查找某个镜像

docker pull

从 repository 中拉取镜像到本地, 默认不添加 TAG 的话, 会拉取[:lastest]

docker pull 镜像名称[:TAG]

docker rmi

docker rmi -f 镜像名称或 ID 删除单个镜像

docker rmi -f 镜像名 1:TAG 镜像名 2:TAG 删除多个镜像

docker rmi -f $(docker images -qa) 删除全部镜像

3.3 容器相关命令

docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 创建并启动容器

OPTIONS 说明(常用):有些是一个减号,有些是两个减号

–name=” 容器新名字 ”: 为容器指定一个名称;
-d: 后台运行容器,并返回容器 ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式

  ip:hostPort:containerPort
  ip::containerPort
  hostPort:containerPort
  containerPort

docker ps

docker ps 列出所有正在运行的容器

docker ps -a 列出所有正在运行和历史运行过的 container

docker start

docker start containerId/Name 根据容器的 id 或容器的名称运行容器

docker restart

docker restart containerId/Name 根据容器的 id 或容器的名称重新运行容器

docker stop

docker stop containerId/Name 根据容器的 id 或容器的名称停止运行容器

docker kill

docker kill containerId/Name 根据容器的 id 或名称强制停止容器

docker rm

docker rm containerId/Name 根据容器的 id 或名称删除容器

3.4 其他重要命令

docker logs

查看容器日志

docker logs -f -t --tail 容器 ID

  • -t 是加入时间戳
  • -f 跟随最新的日志打印
  • –tail 数字 显示最后多少条

docker exec

docker exec -it 容器 ID bashShell 进入正在运行的容器并以命令行交互

例如docker exec -it 398ac /bin/bash

docker top

docker top 容器 ID 查看容器内运行的进程

docker inspect

docker inspect 容器 ID 查看容器内部细节

docker cp

docker cp 容器 ID: 容器内路径 目的主机路径

4. docker 的镜像

4.1 image 的介绍

UnionFS(联合文件系统)

Union 文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker 镜像加载原理

docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统 UnionFS。
bootfs(boot file system)主要包含 bootloader 和 kernel, bootloader 主要是引导加载 kernel, Linux 刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 bootfs。这一层与我们典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs。

rootfs (root file system),在 bootfs 之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs 就是各种不同的操作系统发行版,比如 Ubuntu,Centos 等等。

平时我们安装进虚拟机的 CentOS 都是好几个 G,为什么 docker 这里才 200M??对于一个精简的 OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的 linux 发行版, bootfs 基本是一致的, rootfs 会有差别, 因此不同的发行版可以公用 bootfs。

分层的镜像

以我们的 pull 为例,在下载的过程中我们可以看到 docker 的镜像好像是在一层一层的在下载

镜像分层的 最大的一个好处就是 – 共享资源

比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份 base 镜像,
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

镜像的特征

Docker 镜像都是只读的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”

制作镜像

docker commit 提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息”-a=“作者”容器 ID 要创建的目标镜像名:[标签名]

5. 容器数据卷

先来看看 Docker 的理念:

  • 将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
  • 容器之间希望有可能共享数据

Docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据做为镜像的一部分保存下来,
那么当容器删除后,数据自然也就没有了。

为了能保存数据在 docker 中我们使用卷。


卷就是目录或文件,存在于一个或多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此 Docker 不会在容器删除时删除其挂载的数据卷

特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

5.1 数据卷

docker run -it -v / 宿主机绝对路径目录:/ 容器内目录 镜像名

5.2 数据卷容器

6. 常用软件的安装

6.1 docker 安装 rabbitmq

  • docker search rabbitmq:management 查询 rabbitmq
  • docker pull rabbitmq:management 从镜像仓库拉取镜像
  • docker run -d --name rabbitmq --publish 5671:5671 --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 rabbitmq:management 创建容器
  • 关机后, 重新启动 container

    • docker ps -a 查询所有的容器
    • dokcer start 容器 id 或名称 启动容器

7. 配置 docker 使得 docker 能够通过外部连接

正文完
 0

Docker入门

96次阅读

共计 3192 个字符,预计需要花费 8 分钟才能阅读完成。

Docker 简介

  • Docker 是使用 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。
  • 隔离的进程独立于宿主和其它的隔离的进程。
  • Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等
  • 优点是没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Docker 的优势

  • 高效的利用系统资源
  • 快速的启动时间
  • 一致的运行环境
  • 持续交付和部署:对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成 (Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署 (Continuous Delivery/Deployment) 系统进行自动部署。

  • Docker 确保了执行环境的一致性,使得应用的迁移更加容易
  • Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。社区健壮,一堆开源项目团队维护一批高质量的官方景象。

对比图
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 MB GB
性能 接近原生 较弱
系统支持量 单机支持上千个容器 一般几十个

相关基本概念

Docker 包括三个基本概念

  • 镜像(Image)
  • 容器(Container)

    • 容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。
  • 仓库(Repository)

    • 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

三个概念包括 Docker 的生命周期

安装 (CentOS)

  • 卸载旧版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  • 使用 yum 安装
$sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2
  • 国内网络问题,强烈建议使用国内源
$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 官方源
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  • 安装 Docker CE
sudo yum makecache fast
sudo yum install docker-ce
  • 使用脚本自动安装
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
  • 启动 Docker CE
$ sudo systemctl enable docker
$ sudo systemctl start docker
  • 建立 docker 用户组

    • 建立 docker 组:
    sudo groupadd docker
    • 将当前用户加入 docker 组:
    sudo usermod -aG docker $USER
  • 测试 Docker 是否安装正确
$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
  • 镜像加速器

    • Ubuntu 14.04、Debian 7 Wheezy 配置
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
  • 重新启动服务。
$ sudo service docker restart
  • Ubuntu 16.04+、Debian 8+、CentOS 7 在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
  • 重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
  • 添加内核参数

    • CentOS 使用 Docker CE 看到下面的这些警告信息:
      WARNING: bridge-nf-call-iptables is disabled
      WARNING: bridge-nf-call-ip6tables is disabled

解决方法:内核配置参数以启用这些功能。

  sudo tee -a /etc/sysctl.conf <<-EOF
  net.bridge.bridge-nf-call-ip6tables = 1
  net.bridge.bridge-nf-call-iptables = 1
  EOF

然后重新加载 sysctl.conf

  sudo sysctl -p

正文完
 0

Docker 入门

109次阅读

共计 436 个字符,预计需要花费 2 分钟才能阅读完成。

安装 Docker For Windows
Docker For Windows 仅支持 window 10(64 位) 专业版、企业版、教育版或者更高版本
双击 Docker Desktop for Windows Installer.exe 以运行安装程序。如果您尚未下载安装程序(Docker Desktop Installer.exe),则可以从 download.docker.com 获取。
安装后 Docker 不会自动启动。要启动它,请搜索 Docker,在搜索结果中选择 Docker Desktop for Windows,然后单击它(或按 Enter 键)。

安装过程可能会多次自动重启,当桌面右下角的 Docker Desktop is starting 变成 Docker Desktop is running 时表示安装完成。
当状态栏中的鲸鱼保持稳定时,Docker 正在运行,并且可以从任何终端窗口访问。

如果鲸鱼隐藏在通知区域中,请单击任务栏上的向上箭头以显示它。

参考:
Install Docker Desktop for Windows

正文完
 0