Docker基础

一、简介

  Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup、Namespace、Union FS等技术实现的一种系统级虚拟化技术。

特性

  • 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
  • 更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 一致的运行环境:开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug 并未在开发过程中被发现。而Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现「这段代码在我机器上没问题啊」这类问题。
  • 持续交付和部署:Docker是build once,run everywhere. 使用Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile 来进行镜像构建,并结合持续集成(CI) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(CD) 系统进行自动部署。
  • 更轻松的迁移:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。使用Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

组件 

镜像(Image)
  镜像,可以理解为一个模板,这个模版提供了器运行时所需的程序、库、资源、配置等必要文件。只要有了这个模版,我们可以在任何装有docker的系统上运行容器,也就是所谓的Docker是build once,run everywhere。
 
容器(Container)
  容器,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
 
仓库(Repository)
  仓库,故名思义就是存放东西的,这里的“东西”就是Image。用户可以通过仓库拉取镜像运行容器,也可以构建镜像存放在仓库中。仓库可分为为公共仓库和私有仓库,所有用户都能使用的仓库称为公共仓库,而私有仓库则是个人或者团队自己搭建,只供个人或者团队使用。
 
一个直观图说明其各个组件运行关系:

版本

  Docker 从v17.03开始划分为CE 和EE。CE 即社区版,EE 即企业版,强调安全,付费使用。Docker在1.13 版本之后,从2017年的3月1日开始,版本命名规则变为如下:
  

  Docker CE 每月发布一个Edge 版本(17.03,17.04,17.05…),每三个月发布一个Stable 版本(17.03,17.06,17.09…),Docker EE 和Stable 版本号保持一致,但每个版本提供一年维护。

二、安装部署

安装说明

  安装需求:

  •  Linux kernel(内核) 3.10+
  •  Linux kernel cgroups and namespaces 

由于Docker是建立在linux中两种核心技术之上:namespace与Cgroup,而User namespace出现的版本是3.8,所以安装docker需要内核版本大于3.10,centos6内核版本是2.6所以无法在其上使用docker。

 namespace系统调用参数 隔离内容 内核版本 

centos7安装

1. 安装依赖

yum install -y yum--mapper-persistent-

2.添加仓库

yum-config---add-//download.docker.com/linux/centos/docker-ce.repo

3. 查看docker版本列表

yum list docker-ce --showduplicates | sort -r

4. 安装指定版本的docker(可忽略,直接安装最新版)

yum install docker-ce- docker-ce-cli- containerd.io

5.安装最新版docker

yum install docker-ce docker-ce-cli containerd.io

Debian&Ubuntu

1. 更新包管理

sudo apt-get update

2. 添加https包信任

sudo apt--transport---properties-common

3. 添加docker官方GPG 证书

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

4. 写入软件信息

sudo add-apt-

4. 更新并安装docker

sudo apt--get install docker-ce docker-ce-cli containerd.io

5.若安装指定版本采用如下方式

$ apt-cache madison docker-docker-ce | 5:18.09.1~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/<span style="color: #000000;">stable amd64 Packages
docker
-ce | 5:18.09.0~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/<span style="color: #000000;">stable amd64 Packages
docker
-ce | 18.06.1~ce~3-0~debian | https://download.docker.com/linux/debian stretch/<span style="color: #000000;">stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~debian | https://download.docker.com/linux/debian stretch/<span style="color: #000000;">stable amd64 Packages
<span style="color: #008000;">#<span style="color: #008000;">安装
sudo apt-get install docker-ce= docker-ce-cli= containerd.io

运行docker

停止防火墙、关闭selinux

systemctl stop firewalld && systemctl disable firewalld && setenforce 0

配置镜像加速

默认docker从DockerHUB上拉取镜像,由于国内网络原因下载镜像速度会变慢,所以可以配置国内镜像加速地址https://registry.docker-cn.com,当有多个镜像加速地址时候可在列表中以逗号分割。
mkdir /etc/> /etc/docker/daemon.json <<: [EOF

运行docker

systemctl daemon- [root@app51 ~] 18.09.21.3910.6624796210 04:13:27 2019/Arch: linux/Server: Docker Engine -<span style="color: #000000;"> Community
Engine:
Version:
18.09.2<span style="color: #000000;">
API version:
1.39 (minimum version 1.12<span style="color: #000000;">)
Go version: go1.
10.6<span style="color: #000000;">
Git commit:
6247962<span style="color: #000000;">
Built: Sun Feb
10 03:47:25 2019<span style="color: #000000;">
OS
/Arch: linux/amd64

三、docker基本操作

容器操作

docker 命令采用了分组管理的思想,已经纳入管理的docker命令如下(版本18.09.2): 

其中docker container 则是管理容器命令,老的版本中是使用docker进行容器管理,新版本兼容老版本docker命令,所以对容器管理既可用docker也可以用docker container。

1.启动容器 

方式1:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
常用OPTIONS:
  • -i:--interactive,交互式启动
  • -t:--tty,分配终端
  • -v:--volume,挂在数据卷
  • -d:--detach,后台运行
  •  --name:容器名字
  •  --network:指定网络
  •  --rm:容器停止自动删除容器
  • -P:自动暴露所有容器内端口,宿主随机分配端口
  • -p:指定端口映射,将容器内服务的端口映射到宿主机的指定端口,可以使用多个-p
    可以使用如下三种方式:
    :随机分配宿主机的一个端口作为映射端口
    :指明主机的端口映射为容器端口
    ::指定主机ip和端口
 
示例:运行一个名字为nginx-container的容器,使用镜像nginx,并将宿主机的8080映射到容器内部80端口,然后进入交互模式。 
[root@app51 ~] root@fd92290433da:/ bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

2.查看容器

docker ps [OPTIONS]

常用选项:
  • -a:--all ,查看所有容器,包括退出和其他状态的
  • -n::--last int,显示最后n个创建的容器
  • -l,:--latest ,显示最近的容器
示例 :
root@app51 ~] 11 seconds ago Up 9 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp nginx-~] 41 seconds ago Up 39~]

3.查看容器具体信息

docker inspect [OPTIONS] NAME|ID [NAME|ID…]

示例:

[root@app51 ~] : : : : [],

4.停止容器

方式一:docker stop [OPTIONS] CONTAINER [CONTAINER…]
方式二: docker kill [OPTIONS] CONTAINER [CONTAINER…] 
区别:docker stop 相当于发送15停止信号,而kill是强制终止对应信号9
示例:
[root@app51 ~] nginx-container

5.启动已停止的容器

docker start [OPTIONS] CONTAINER [CONTAINER…]

常用选项:
  • -a:--attach 附加终端
  • -I:--interactive 交互式 
[root@app51 ~] / / 1 root 0:00 /bin/7 root 0:00 ps

6.删除容器

docker rm [OPTIONS] CONTAINER [CONTAINER…] 或者docker container rm
如果删除的容器正在运行则需要指定-f进行强制删除
常用选项:
  • -f: --force 强制删除
示例: 
docker rm nginx-container

Ps:删除所有容器

docker rm -f `docker ps -a --a |awk -F |xargs docker rm -f

7. 暂停某个容器

docker pause CONTAINER [CONTAINER…]

示例:

[root@app51 ~] nginx-container

8.恢复暂停的容器

docker unpause CONTAINER [CONTAINER…]

[root@app51 ~] nginx-container

9.查看容器日志

docker logs [OPTIONS] CONTAINER

常用选项:

  • -t,--timestamps :显示日志时间
root@app51 ~] 10.1.201.30 - - [23/Feb/2019:10:55:33 +0000] 304 0

10.在已运行的容器中运行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
常用选项:
  •   -d:--detach ,后台运行命令
  •   -e,--env list             设置env
  •   -i,--interactive         启用交互式
  •   -t,--tty                     启用终端
  •   -u,--user string        指定用户 (格式: [:])
  •   -w,--workdir string       指定工作目录 

示例:

[root@app51 ~] =101(nginx) gid=101(nginx) groups=101

11.容器导出

docker export [OPTIONS] CONTAINER
容器导出类似于容器快照,导出的是容器的在宿主机上的文件系统压缩包,导出的文件系统可使用docker import进行导入,在其他机器导入时候会以镜像的方式存在。
常用参数
  • -o,--output  导出的文件名称
示例 :
[root@app51 ~] [root@app51 ~] -rw------- 1 root root 107M 2月 23 19:18 ningx.tar

12.将导出的容器导入为镜像
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
容器导入可以是文件、文件url、镜像仓库
示例: 
[root@app51 ~] ~] 10 940cdf68f69d 78 days ago 12 weeks ago 109MB

其他导入示例

docker http://example.com/image.tar.gz repository:tag

12.将容器提交为镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
常用选项:
  • -a,--author     指定作者
  • -m,--message 本次提交的信息
  •  -p,--pause      提交为镜像时候暂停容器
  • -c,--change list 修改镜像某些属性,列如启动命令
示例: 
[root@app51 ~] ~] 62 hours ago 108MB

镜像操作

在老版本中镜像操作也是使用的docker命令,新版本进行了分组,可使用docker image 来进行镜像操作。

1.搜索镜像

docker search [OPTIONS] TERM

常用选项:
  • --limit 限制搜索的结果条目数量,默认显示25条 
[root@app51 ~] 5179/centos7-ansible Ansible on Centos7 120/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86… 106/centos-xfce-vnc Centos container with VNC session… 80 [OK]

结果字段含义:
NAME:镜像名称
DESCRIPTION :镜像描述
STARS :获赞数量
OFFICIAL :是否为官方镜像
AUTOMATED:是否为自动构建 

2.下载镜像 

docker image pull  :  或者docker pull

TAG不写默认为最新版本latest

[root@app51 ~] library/ centos:latest

3.查看镜像

docker image ls 或者docker images
常用选项:
  • -a: 查看所有已下载的镜像
  • -f: --filter,过滤某些镜像 
[root@app51 ~] 2 months ago 202MB

4.删除镜像

 docker image rm [OPTIONS] IMAGE [IMAGE...]  或者docker rmi IMAGE

[root@app51 ~]

5. 镜像导出

docker save [OPTIONS] IMAGE [IMAGE...]

将镜像打包为压缩包,可在其他docker主机进行导入,一次可打包多个
常用选项:
  • -o,--output   输出到文件
示例:
[root@app51 ~]

6.镜像导入

docker load [OPTIONS]
将已经导出的镜像压缩文件导入为镜像

常用选项:

  • -i,--input 指定文件来源 
[root@app51 ~]

7.查看镜像信息

docker image inspect [OPTIONS] IMAGE [IMAGE...]

[root@app51 ~] :

其他

运行信息查看docker info

[root@app51 ~] Containers: 11418.09.2

版本信息查看 docker version

root@app51 ~] 18.09.21.3910.6624796210 04:13:27 2019/Arch: linux/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


最近一直在开发Apworks框架的案例代码,同时也在一起修复Apworks框架中的Bug和一些设计上的不足。遇到的一个普遍问题是,代码的调试过程需要依赖很多外部系统,比如MongoDB、PostgreSQL、RabbitMQ等。当然可以在本机逐一安装这些服务,然后对服务进行配置,使其满足自己开发调试
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务。其实在Docker中运行SQL Server是非常容
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些。项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整合官方文档的某些步骤的基础上,写篇文章简单总结一下。 Rook-Ceph是Kubernetes中分布
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件。对于多阶段构建,您可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个指令都开始一个新的构建。您可以选择
本文介绍compose配置文件参数的使用,熟练编写compose文件 [root@docker lnmp]# cat lnmp.yaml version: &#39;3&#39; services: nginx: build: /root/docker_demo/nginx/ ports: - &q
环境 docker-machine主机:192.168.1.9 docker主机:192.168.1.10 步骤: 安装docker-machine 创建ssh密钥对,实现两主机无密登录 创建docker主机,命名host1 变更docker环境变量 运行容器查看两端是否同步 镜像容器同步测试成功
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
https://blog.csdn.net/wanglei_storage/article/details/77508620 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行。然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容
1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题。 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel。 Kestrel is grea
docker rm `docker ps -a | grep Exited | awk &#39;{print $1}&#39;` 删除异常停止的docker容器 docker rmi -f `docker images | grep &#39;&lt;none&gt;&#39; | awk &#3
什么是Docker Compose 在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具。 但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到了以下的一个需求,让我明白了在一台服务器上不得不用多个服务的时
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS中的附加进程非常强大,目前提供了9种常用的附加方式。 在当前.Net Core支持跨平台的大背景下,其中Linux环境和
https://www.cnblogs.com/bigberg/p/8867326.html 一、简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行
.Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图。 实现 安装Nuget包 &lt;PackageReference Include=&quot;Selenium.Chrome.WebDriver&quot; Version=&quot;85.0.0&quot; /&g
原文&#160;https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定。 co