docker容器入门总结

docker容器入门

1、what(什么是docker?)

Docker 是基于Go语言开发的应用容器引擎。它是目前最流行的 Linux 容器解决方案

2、why

1、环境隔离
一台机器运行多个容器互不影响
2、快速交付,更易迁移扩展
利用镜像快速构建一套标准的研发环境,不同的人员可以直接通过使用相同的环境来部署代码。docker容器几乎可以在任意的平台上运行
3. 资源利用率高
docker容器的运行不需要额外的虚拟化管理程序的支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低
4、效率高

效率高:Docker引擎运行在操作系统上,在容器启动后,容器里的进程直接与内核交互,无需经过Docker引擎中转,因此更加快。 而VM需要通过一层 一个软件层Hypervisor ,所以效率会低。

创建快:新建一个虚拟机时,虚拟机软件需要加载GuestOS(虚拟机操作系统),返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

5、更简单的管理
使用Dockerfile,只需要小小的配置修改,就可以替代以往的大量的更新工作。并且所有修改都是以增量的方式进行分发和更新,从而实现自动化和高效的容器管理

3、docker底层原理

底层使用到Linux的四项技术,chroot、Namespace、Cgroups 和联合文件系统

  • chroot: 可以改变某进程的根目录,使这个程序不能访问目录之外的其他目录

  • Namespace: 是 Linux 内核的一项功能,该功能对内核资源进行隔离,使得容器中的进程都可以在单独的命名空间中运行,并且只可以访问当前容器命名空间的资源。Namespace 可以隔离进程 ID、主机名、用户 ID、文件名、网络访问和进程间通信等相关资源。

  • Cgroup: 可以限制和隔离进程的资源使用情况(CPU、内存、磁盘 I/O、网络等)

  • 联合文件系统: 它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下

4、docker基本概念

Docker镜像:
镜像是一个只读的文件和文件夹组合,是 Docker 容器启动的先决条件。

镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub(最大的公开仓库)/registry(仓库注册服务器)上下载。

Docker容器:
容器是镜像的运行实体。Docker利用容器来运行应用。

容器有初建、运行、停止、暂停和删除五种状态。

每个容器都是相互隔离的。可以把容器看做是一个简易版的 Linux 环境
注: 镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

Docker仓库:
仓库是集中存放镜像文件的场所。

目前,Docker Hub 是 Docker 官方的公开镜像仓库,它不仅有很多应用或者操作系统的官方镜像,还有很多组织或者个人开发的镜像供我们免费存放、下载、研究和使用。除了公开镜像仓库,你也可以构建自己的私有镜像仓库

Docker引擎:
创建和管理容器的工具,通过读取镜像来生成容器,并负责从仓库拉取镜像或提交镜像到仓库中

Docker镜像,容器,仓库之间的关系
Docker仓库用于存放Docker镜像, 用户可以从仓库pull镜像到本机, 或从本机push镜像到仓库 通过Docker镜像来创建Docker容器
在这里插入图片描述

5、docker架构

在这里插入图片描述

Docker 整体架构采用 C/S(客户端 / 服务器)模式,主要由客户端和服务端两大部分组成。客户端负责发送操作指令,服务端负责接收和处理指令。客户端和服务端通信有多种方式,既可以在同一台机器上通过UNIX套接字通信,也可以通过网络连接远程通信。

Docker 客户端:

Docker 客户端其实是一种泛称。其中 docker 命令是 Docker 用户与 Docker 服务端交互的主要方式。除了使用 docker 命令的方式,还可以使用直接请求 REST API 的方式与 Docker 服务端交互,甚至还可以使用各种语言的 SDK 与 Docker 服务端交互。目前社区维护着 Go、Java、Python、PHP 等数十种语言的 SDK,足以满足你的日常需求。

Docker 服务端:

Docker 服务端是 Docker 所有后台服务的统称。

  • dockerd 是一个非常重要的后台管理进程,它负责响应和处理来自 Docker 客户端的请求,然后将客户端的请求转化为 Docker 的具体操作。

  • containerd是 Docker 服务端的一个核心组件,它是从dockerd中剥离出来的 ,是容器标准化后的产物。containerd通过 containerd-shim 启动并管理 runC,可以说containerd真正管理了容器的生命周期。

  • runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的。

6、安装部署

1、清理环境(关闭防火墙, SELINUX)

[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# systemctl stop firewalld

2、配置Docker源

[root@localhost ~]# curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

3、安装合适版本的Docker

1、查看Docker版本
[root@localhost ~]# yum list docker-ce --showduplicates| grep "^docker"
2、安装合适版本的Docker
[root@localhost ~]# yum -y install docker-ce-18.06.0.ce

4、配置加速器

可以登录阿里云控制台, 搜索容器镜像服务, 来获取自己的镜像加速地址

[root@localhost ~]#  mkdir /etc/docker 
[root@localhost ~]#  vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://jqcrbrq3.mirror.aliyuncs.com"]
}

5、启动Docker


[root@localhost ~]# systemctl enable docker //设置开机启动
[root@localhost ~]# systemctl start docker  //启动Docker

查看配置是否成功
[root@docker ~]# docker info 

7、docker基本操作

docker [command [command]]

7.1 对镜像操作

在这里插入图片描述

7.1.1 拉取、查看、打标签、删除、导出导入
1.从指定的仓库中搜索busybox镜像
# docker search busybox
2.拉取镜像
# docker pull busybox
3.查看本地镜像
# docker images
4.给busybox镜像打新标签
# docker tag busybox busybox:v1
5.删除容器busybox:v1
# docker rmi busybox:v1
6.镜像导出导入
docker image save mysql:5.6 -o mysql:5.6.tar.gz
docker image load -i mysql:5.6.tar.gz
7.1.2 运行镜像
docker run [选项] 镜像 [command]  // 从指定镜像运行一个容器 常用选项:   
	-i             // 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上  
	-t             // 让容器的标准输入保持打开。 -it一般同时使用                   
	-d             // 在后台运行容器                                           
	--name         // 指定容器的名称    
	--network      // 指定容器的网络连接方式,默认为NAT.     
	--ip           // 指定容器的IP地址
	--restart      //重启方式    
	-p <宿主端口>:<容器端口>    // 端口映射,将容器指定端口映射到宿主机的指定端口.      
	-P                       // 将容器的所有已声明端口映射到宿主机的随机端口    
	-v <宿主目录>:<容器目录>    //将宿主机的指定目录映射到容器的指定目录 
常见用例:

1、创建nginx容器,指定映射端口、容器名字、网络模式、重启方式、目录挂载
docker run -d -p 80:80  \
 --name nginxweb \
 --net bridge \
 --restart always   \
 -v /usr/local/docker/nginx/html:/usr/share/nginx/html \
 -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
 -v /usr/local/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
 -v /usr/local/docker/nginx/logs:/var/log/nginx \
 nginx

注意:容器后台运行需要有存活的进程,否则容器开启后会自动关闭,-it开启伪终端命令行模式,等同于开启一个持续的终端进程

7.1.3 构建镜像

构建镜像主要有两种方式:
1、使用docker commit命令从运行中的容器提交为镜像;
2、使用docker build命令从 Dockerfile 构建镜像。

1) commit
1、先创建一个容器,终端模式放置后台
# docker run -itd busybox
2、进去容器创建文件
# docker exec -it busybox sh
# touch test.txt
# docker commit busybox busybox:test
1) Dockerfile

这种方式是最重要也是最常用的镜像构建方式。Dockerfile 是一个包含了用户所有构建命令的文本。通过docker build命令可以从根据Dockerfile 生成镜像。

使用 Dockerfile 构建镜像具有以下特性:

  • Dockerfile 的每一行命令都会生成一个独立的镜像层,并且拥有唯一的 ID;

  • Dockerfile 的命令是完全透明的,通过查看 Dockerfile 的内容,就可以知道镜像是如何一步步构建的;

  • Dockerfile 是纯文本的,方便跟随代码一起存放在代码仓库并做版本管理。

下面介绍下dockerfile的常见参数:
在这里插入图片描述

实战案例:
基于centos7优化yum源,设置时区,下载nginx,设置环境变量,映射端口,开启服务

1、 首先创建一个目录(作为到时候传到docker引擎的上下文目录)
mkdir test-dockerfile && cd test-dockerfile
2、在目录下创建 Dockerfile 文件
vim Dockerfile

from centos:centos7
copy CentOS-Base.repo /etc/yum.repos.d/CentOS7-Base.repo
copy epel.repo /etc/yum.repos.d/epel.repo
run ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum -y install nginx
env HOST=mynginx
expose 80
cmd systemctl start nginx

需要把需要copy的文件放在该目录下,或者
# ls
CentOS-Base.repo  Dockerfile  epel.repo

3、构建镜像
# docker build -t 'centos7/nignx:v1' .

bulid使用方法

语法: docker build [command] . 

选项: 

-t 指定构建完成后的镜像名称 

-f 指定dokerfile的路径, 如果省略此选项, docker会在 context-dir目录(当前目录) 中查找名称"Dockerfile"的文件进行构建


.  上下文路径,是指 docker 在构建镜像,docker build 命令得知这个路径后,会将路径下的所有内容打包发送给docker引擎

7.2 对容器操作

1.查看运行的容器 [-a 所有容器] 
docker ps 

2.查看指定容器的进程信息 
docker top ee5a6a56c658

3.启停指定容器 
docker stop|start|restart|kill ee5a6a56c658

4.暂停|恢复指定容器 
docker pause|unpause ee5a6a56c658

5. 删除指定容器(删除之前必须先停止容器) 
docker rm [容器id/名称]      

6.查看指定容器日志  
docker logs [容器id/名称]                

7.容器与宿主机之间的文件传递
docker cp  container:src_file  dst_path   //将容器中的文件复制到宿主机上 
docker cp src_file container:dst_path     // 将宿主机上的文件复制到容器中 

8.以json格式显示出容器的具体信息
docker inspect [容器id/名称]               

9.查看容器资源使用率
docker stats

10.进入容器
docker exec -it centos /bin/bash         //连接可用exit命令退出,不影响容器
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值