docker入门到实践——简单操作

发喜小爹 发喜小爹     2022-10-13     411

关键词:

1.对比传统虚拟机总结

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

2.基本概念

Docker包括三个基本概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

Docker镜像

  • Docker镜像就是一个只读的模板。
  • 镜像可以用来创建Docker容器。

Docker容器
Docker利用容器来运行应用。
容器是从镜像创建运行实例。它可以被:

  • 启动
  • 开始
  • 停止
  • 删除

每个容器都是相互隔离的,保证安全的平台。

Docker仓库

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含多个镜像,每个镜像有不同的标签(tag)。

仓库分为:

  • 公开仓库(Public);
  • 私有仓库(Private);

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

3.CentOS系列安装Docker

  安装说明URL:https://docs.docker.com/install/linux/docker-ce/centos/#set-up-the-repository

Uninstall old versions:

$ sudo yum remove docker docker-common docker-selinux docker-engine

Install Docker CE:

Install using the repository:

SET UP THE REPOSITORY:
1.Install required packages.
$ sudo yum install -y yum-utils   device-mapper-persistent-data   lvm2
2.安装配置docker repo源。
$ sudo yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
3.启用边缘并测试存储库。
$ sudo yum-config-manager --enable docker-ce-edge
$ sudo yum-config-manager --enable docker-ce-test

或者禁用:

$ sudo yum-config-manager --disable docker-ce-edge

CentOS7系统CentOS-Extras库中已带Docker,可以直接安装:

$ sudo yum install docker-ce

安装之后启动 Docker 服务,并让它随系统启动自动加载。

$ sudo systemctl start docker

4.镜像

4.1 获取镜像

可以使用 docker pull 命令来从仓库获取所需要的镜像。

4.2 列出本地镜像

使用 docker images 显示本地已有的镜像。

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB
ubuntu precise 74fe38d11401 4 weeks ago 209.6 MB
ubuntu 14.04 99ec81b80c55 4 weeks ago 266 MB
ubuntu latest 99ec81b80c55 4 weeks ago 266 MB
ubuntu trusty 99ec81b80c55 4 weeks ago 266 MB

...

在列出信息中,可以看到几个字段信息 :
来自于哪个仓库,比如 ubuntu;
镜像的标记,比如 14.04;
它的 ID 号(唯一);
创建时间 ;
镜像大小;
其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的镜像 ID,说明它们实际上是同一镜像。

例如下面的命令指定使用镜像 ubuntu:14.04 来启动一个容器。

$ sudo docker run -t -i ubuntu:14.04 /bin/bash

如果不指定具体的标记,则默认使用 latest 标记信息。

4.3.1 创建镜像

创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。

4.3.2 修改已有镜像

先使用下载的镜像启动容器。

$ sudo docker run -t -i training/sinatra /bin/bash
[email protected]:/#

4.4 存出和载入镜像

4.4.1 存出镜像

如果要导出镜像到本地文件,可以使用docker save命令。

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 c4ff7513909d 5 weeks ago 225.4 MB
$sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

4.4.2 载入镜像

可以使用docker load从导出的本地文件中再导入到本地镜像库,例如:

$ sudo docker load --input ubuntu_14.04.tar
或
$ sudo docker load < ubuntu_14.04.tar

4.5 移除

4.5.1 移除本地镜像

docker rmi:移除本地镜像;
docker rm:移除容器;

注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

4.5.2 清理所有未打过标签的本地镜像

$ docker images

可以列出本地所有的镜像,其中很可能会包含有很多中间状态的未打过标签的镜像,大量占据着磁盘空间。

使用下面的命令可以清理所有未打过标签的本地镜像:

$ sudo docker rmi $(docker images -q -f "dangling=true")

其中 -q 和 -f 是缩写, 完整的命令其实可以写着下面这样,是不是更容易理解一点:

$ sudo docker rmi $(docker images --quiet --filter "dangling=true")

4.6 镜像的实现原理

Docker 镜像是怎么实现增量的修改和维护的? 每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去。
通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。 Docker 在 AUFS 上构建的容器也是利用了类似的原理。

5 Docker容器

简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

5.1.1 启动容器

启动容器有两种方式:
一种是基于镜像新建一个容器并启动;
另外一个是将在终止状态(stopped)的容器重新启动;

5.1.2 新建并启动

所需要的命令主要为 docker run
例如,下面的命令输出一个 “Hello World”,之后终止容器。

$ sudo docker run ubuntu:14.04 /bin/echo ‘Hello world‘
Hello world

下面的命令则启动一个 bash 终端,允许用户进行交互:
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
[email protected]:/#

$ sudo docker run -it ubuntu:14.04 /bin/bash
[email protected]:/#

其中,

-t选项:让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上;
-i选项:则让容器的标准输入保持打开;

在交互模式下,用户可以通过所创建的终端来输入命令,例如

[email protected]:/# pwd
/
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载 ;
利用镜像创建并启动一个容器 ;
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
从地址池配置一个 ip 地址给容器 ;
执行用户指定的应用程序 ;
执行完毕后容器被终止;

启动已终止容器
可以利用 docker start 命令,直接将一个已经终止的容器启动运行。

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。

[email protected]:/# ps
PID TTY          TIME CMD
1 ?        00:00:00 bash
11 ?        00:00:00 ps

5.2 后台(background)运行

更多的时候,需要让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。
下面举两个例子来说明一下。
如果不使用 -d 参数运行容器:

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

容器会把输出的结果(STDOUT)打印到宿主机上面
如果使用了 -d 参数运行容器:

$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a

此时容器会在后台运行并不会把输出的结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)。
注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。
使用 -d 参数启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。

$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77b2dc01fe0f ubuntu:14.04 /bin/sh -c ‘while tr 2 minutes ago Up 1 minute agitated_wright

要获取容器的输出信息,可以通过 docker logs 命令:

$ sudo docker logs [container ID or NAMES]
hello world
hello world
hello world

5.3 终止容器

$ docker stop

此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。
处于终止状态的容器,可以通过 docker start 命令来重新启动。
此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它。

5.4 进入容器

在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。

5.4.1 attach 命令

docker attach 是Docker自带的命令。下面示例如何使用该命令。

$ sudo docker run -idt ubuntu
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550

$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia
$sudo docker attach nostalgic_hypatia
[email protected]:/#

但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

docker入门实践基本操作

Docker安装完毕。我们就能够试着来执行一些命令了。看看docker能够干什么。(一)创建一个容器首先。让我们执行一个最简单的容器,hello-world。假设安装没有问题。并执行正确的话,应该会出现下面的结果:$dockerrunhello-worldUnabletofi... 查看详情

docker入门到实践(上)

  Docker是一个开源的应用容器引擎,开发可以打包自己的应用或者是依赖包上传到可移植的容器里,然后进行发布到任何linux机器上,也可实现虚拟化  容器是完全使用沙箱机制的,相互之间不会存在任何接口,几... 查看详情

docker入门之三:docker构建私有镜像入门到实践(代码片段)

docker的简单使用1.docker构建私有镜像1.1.使用Dockerfile定制镜像1.2.构建镜像1.docker构建私有镜像1.1.使用Dockerfile定制镜像在空目录创建文件,命名为Dockerfile[hadoop@hadoop101file]$cddocker/[hadoop@hadoop101docker]$mkdirmydockerfile[hadoop@hadoop101docker]$to... 查看详情

实战docker入门实践二:docker服务基本操作和测试helloworld

操作环境操作系统:CentOS7.2 内存:1GB CPU:2核Docker服务常用命令docker服务操作命令如下service docker start #启动服务service docker stop  #停止服务service docker restart #重启服务se 查看详情

docker入门实践

...过程,并简单的介绍了腾讯云容器服务的使用方法。通过Docker快速拉起一个定制服务,极大的简化了部署,加快了业务部署节奏,并降低了运维成本。------人生苦短,快用Docker。一、实践背景初次接触Docker,按照我的学习习惯,... 查看详情

docker从入门到实践系列四-docker容器编排利器dockercompose(代码片段)

文章目录Compose简介概念组成安装与卸载二进制包方式安装测试卸载docker-compose.yml文件详解概念案例versionservicesimagebuildcontextdockerfilecontainer_namedepends_onportsexposerestartenvironmentenv_filecommandvolumesnetwork_modenetworksali 查看详情

docker实践之01-入门介绍(代码片段)

目录一.Docker概述镜像容器仓库二.安装Docker1.在CentOS上安装Docker2.在Ubuntu上安装Docker3.启动docker4.建立Docker用户组5.测试Docker是否安装成功三.配置镜像加速器Ubuntu14.04/Debian7WheezyUbuntu16.04+/Debian8+/CentOS7一.Docker概述Docker是利用Linux内核... 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi... 查看详情

13-docker技术基本应用实践(代码片段)

文章目录Docker技术简介概述版本说明Docker参考手册Docker应用分析Docker安装准备工作开启虚拟机系统离线安装docker在线安装DockerDocker入门实践基本操作核心对象分析镜像容器数据卷Docker镜像操作实践下载运行镜像删除镜像文件Docker... 查看详情

python编程从入门到实践

Python编程从入门到实践1起步2变量和简单数据类型3列表简介4操作列表5if语句6字典7用户输入和while循环8函数9类10文件和异常11测试代码12武装飞船13外星人14记分15生成数据16下载数据17使用API18Django19用户账户20设置应用程序的样式... 查看详情

docker实践入门之四

...这个方法做一个例子。首先需要一个基本image,目前docker推荐的是用一个轻量 查看详情

docker入门与实践之docker安装与了解(代码片段)

一、Docker 概述Docker是一个开源的应用容器引擎,基于 Go语言 并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚... 查看详情

dockerphp入门实践(三)

...主要实现两个接口。在我们进行应用编码之前,首先使用Docker安装并运行ThinkPHPThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直... 查看详情

storm实时计算:流操作入门编程实践

转自:http://shiyanjun.cn/archives/977.htmlStorm实时计算:流操作入门编程实践 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比较简单,实际编程开发起来相对容易。下面,简单介绍编程实践过程中需要... 查看详情

docker入门实践之dokerfile编写(代码片段)

Dockerfile是一个文本格式的配置文件,通过dockerfile可以快速创建自定义镜像以适应测试,预发布,生产环境等各种应用部署镜像,一个好的dockerfile可以让我们的镜像更方便管理以及应用。一.Dokerfile的基本结构Dockfile是由一行行命... 查看详情

docker从入门到实践系列二-docker安装(代码片段)

...及内核(可选)卸载老版本安装依赖包设置阿里云镜像安装docker启动docker将docker服务设为开机启动停止docker检验安装是否成功查看centos版本Docker要求CentOS系统的内核版本高于3.10。通过命令:uname-r查看当前centos版本,如版本... 查看详情