博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2020.3.14docker
阅读量:4159 次
发布时间:2019-05-26

本文共 5368 字,大约阅读时间需要 17 分钟。

前言——为什么会有docker出现

一款产品从开发到上线,从操作系统,到运行环境、在到应用配置。作为开发和运维人员之间的这些工作是许多公司经常面临的问题。还有在产品后期不断有不同版本的迭代,这些不同版本环境的兼容,都是问题。

通俗讲:就是开发人员将代码、配置、开发的环境、数据等等都封装为一个个体术语叫镜像,这样给运维去部署。
在这里插入图片描述

通过docker安装tomcat镜像心得:(1)首先docker会有daemon.json文件问题(一般是没有这个文件,加上就可以了);(2)docker启动后访问拒绝;一般是操作系统的权限不够,简单就是直接su进入管理员权限(3)下面就是镜像的下载和启动,docker中容器启动后,由于是封闭的,所以注意容器端口、虚拟机端口、虚拟机外部端口这端口如果开通;(4)上面端口一般虚拟机端口和容器端口是没有打开关联,还有就是虚拟机端口和虚拟机外部端口没有打开关联(5)虚拟机端口和容器端口是没有打开关联——通过docker启动命令关联,但是注意先关闭防火墙,然后再启动docker,否则会有端口关联问题。
一些小问题:(1)docker启动会遇到提示没有daemon.json文件;所以在:   https://blog.csdn.net/weixin_45496075/article/details/109123709 cd /etc/docker 目录下创建一个daemon.json文件 然后编辑该文件: { "registry-mirrors": ["https://registry.docker-cn.com"]}或者阿里镜像库{  "registry-mirrors": ["https://679xpnpz.mirror.aliyuncs.com"]}就可以了.(2)会提示permission denied————    https://www.cnblogs.com/informatics/p/8276172.htmldocker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。需要进入root用户: su 直接进入root账户。就可以了

上面基础问题解决了:还有一些如防火墙、端口、容器启停、容器内部目录的进入等问题;

nmap localhost 可以查看本地虚拟机对外暴露了那些端口。

一.docker概念

docker三要素:仓库、镜像、容器。docker是一个解决运行环境、配置和应用容器虚拟化技术。docker就是将代码和运行环境,配置封装为一个个体(术语是镜像)的引擎技术。

docker特点
应用之间耦合度很低:每个个体(镜像)都有自己的文件系统,所以相互之间是互不会影响。
docker既然可以将应用和该应用所需的环境绑定成一个镜像,所以docker虚拟化过程中环境只绑定自己需要的那些包,而共用的那些系统内核可以使用宿主机的内核。物尽其用。

三要素

仓库:就是docker的镜像的集合

镜像:就是封装应用和环境的一个模板。类似于java的类镜像是应用和该应用运行环境和配置信息的封装个体的抽象状态。
容器:是镜像的一个个实例。类似于java类创建的对象容器也通常是镜像的运行实例,如一个镜像运行了三次,就创建了三个该镜像的容器。
在这里插入图片描述

二.docker安装

首先使用yum安装epel仓库,因为docker是由epel发布的,类似于java运行mysql,需要驱动包一样。安装docker所需要的依赖库epel

(1)yum install -y epel-release;
注意!!
如果安装不成功的话,提示不能检索到epel,需要修改:

/etc/yum.repos.d/epel.repo文件中将第三行baseurl放开,将第四行注释

在这里插入图片描述

在这里插入图片描述
centos系统版本太低升级方式:
1.yum update;

:因为docker是2014年才出现的技术,一些centos上不支持该技术服务。所以可以升级一下centos的内核版本(6.5以上都可以)。

上面安装失败终极大招:

yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm另一种方式(1)curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun另一种(2)curl -sSL https://get.daocloud.io/docker | sh然后如果显示错误:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?解决方式:   顺序执行下面两条然后就OK了。 systemctl daemon-reload  systemctl restart docker

三.docker仓库修改

在这里插入图片描述

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://2d6k7x7j.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reload sudo systemctl restart docker

在这里插入图片描述

(1)配置好后,重新启动docker服务:service docker restart;
(2)查看镜像是否改变:ps -ef | grep docker; 该命令会显示指定服务的进程状态,会有指向阿里云的提示。
(3)uname -r 查看系统内核版本; docker -v查看docker的版本。

四 docker原理

docker原理是:dcoker也是client-server结构系统。docker客户端的命令,操作服务端,如docker客户端运行docker run 镜像。这样服务端会运行该镜像,就生成一个容器了。docker客户端一般就在虚拟机的doc窗口,但是加了docker表示是docker的命令行命令。如linux下的ps查看linux的进程,而docker ps 是查看docker服务端的进程命令。

本质:docker的命令通过客户端接收,然后服务器上的守护进程接收到客户端命令后,真正使该服务器运行。
在这里插入图片描述

(4.1)docker为啥比VM运行快

在这里插入图片描述

五 docker的命令

简单分类:帮助命令、容器命令、镜像命令;

(5.1)帮助命令

docker version(docker版本信息),docker info(docker的详细信息),docker --help;

(5.2)镜像命令

  • docker images(列出本地主机上的所有镜像)
  • docker search 镜像名;——会从docker hub 上查找所有该镜像名的各种版本的镜像。可选项【-s 限制star星数显示、 --no-trunc 显示完整的描述信息。】
  • docker pull 镜像名:tag;——从docker hub或者阿里云上下载指定版本的镜像。
  • docker rmi 镜像名:tag。——删除指定版本镜像;默认tag是latest版本。注意删除镜像正在使用,可以使用-f 强制关闭然后删除。如果想级联删除,相邻镜像之间空开就行。

(5.3)容器的命令

在这里插入图片描述

容器运行时,容器服务默认的端口和可以访问该容器服务的真实端口的设置。

docker run 运行镜像时 端口的映射细节:

-p 宿主机端口:容器服务的默认端口;如tomcat容器—— -p 1111:8080表示实际虚拟的物理端口是1111,映射为tomcat容器的默认端口8080前面1111端口是docker所在的虚拟机的物理端口,而后面8080是docker镜像的逻辑端口

在这里插入图片描述

  1. docker run 镜像名;——通过镜像新建(create)一个容器并运行(start)这个新建的容器;一般有-it(interact、tty)选项;表示用docker运行这个容器后弹出一个终端,用于我和它交互。
    注意一个细节:docker run 是将通过镜像创建一个容器,并运行这个容器。即该命令将image(镜像) ——> 一个contain(容器)了。 类似于java的类(image)创建一个实例对象(container)。
docker run -it centos ;表示在docker上运行一个centos的实例(镜像),此时需要返回一个命令终端,用于和这个centos交互。
  1. docker ps ;——查看docker中正在运行的进程有哪些(docker里面有哪些容器在运行)。区别ps(查看linux中进程);选项:-a(正在运行的和历史上运行过的、-q相似于镜像命令中,只显示容器编号)
  2. exit;ctrl+p+q;两种退出容器的方式;exit是关闭运行容器且退出,而后一个是不关闭,而退出该容器。
  3. docker start container_id——docker通过镜像构建一个容器实例后,单独启动容器:
  4. 正常停止——docker stop 容器id;重新启动——docker restart 容器id;强制停止容器——docker kill 容器id或者容器名。
  5. docker rm 容器名或者id;——删除已停止的容器
  6. 一键删除所有运行的容器:
    在这里插入图片描述
    在这里插入图片描述

进阶部分

(1)docker run -it centos;表示后台启动centos容器,且会返回一个前台终端命令窗口,用于和centos容器交互。

docker run -d centos表示只是后台启动centos容器,前台没有交互窗口。docker 的机制默认如果容器没有前台命令交互就会立即关闭该后台服务(容器后台运行,就必须有一个前台进程)。所以docker ps 查看docker是否有进程是显示没有运行的进程的。
(2)查看docker上运行容器这个容器服务的日志
在这里插入图片描述
(3)查看某个容器内的进程:docker top 容器id。区别于docker ps 这个是docker内运行的那些容器进程。而这边docker top 容器id表示容器这个服务自己内部运行的自己服务的进程。应用容器虚拟化,核心在于容器自己提供的服务奥!
(4)查看容器服务内部细节:docker inspect 容器id;
(5)进入运行的容器的交互终端界面——上面运行容器同时以终端交互方式运行,然后exit、ctrl+p+q退出容器这个服务的终端窗口,如果再次进入呢?——docker exec -it 容器id bin/bash,docker exec -t表示在docker终端执行容器终端命令用于交互,然后进入容器的bin/bash。还有一种简单的直接进入容器终端——docker attach 容器id。
在这里插入图片描述
(6)将容器内的文件迁移到容器外的宿主机上;——docker cp 容器id:容器资源位置(源资源位置) 宿主机的资源位置(目的位置)。
在这里插入图片描述

小结:

镜像构建一个容器实例后,可以对容器进行(1)启动、(2)停止、(3)重启、(4)通过终端进入容器交互、(5)查看运行的容器进程等操作。

六 镜像理论概念

在这里插入图片描述

在这里插入图片描述
上面可知道,docker镜像本质是union文件系统,而union文件系统主要包含两部分:bootfs和rootfs,镜像是服务和该服务运行环境的打包体,而bootft就是运行环境,rootft类似于该服务实现的文件部分。
在这里插入图片描述

下面开始操作制作自己的镜像:

背景:启动一个远程下载的tomcat镜像,并启动该镜像为一个运行的容器,修改这个tomcat容器,删除这个tomcat的一个文档,然后制作成没有文档的tomcat镜像。

在这里插入图片描述
构建一个新的docker镜像

docker commit -a="作者" -m="对新镜像的描述" 父镜像id(也即是当前修改的镜像) 新镜像名称(其中可用自定义版本号,但需要用冒号标识开:)

在这里插入图片描述

七 容器数据卷

能干嘛?——容器中数据的持久化、容器间数据的共享

创建容器数据卷的方式:

docker run -it -v 宿主机目录A:容器中指定目录B  centos【镜像名】表示启动一个镜像为容器,然后这个容器中目录B和外面的宿主机上的目录A是相通的。其中-v  volume卷的意思上面是容器的持久化,那么容器间的数据共享呢?通过继承的设置实现容器间共享文件的功能容器A --volumn-from  容器B    表示容器A继承了容器B的数据卷关系。dockerFile是镜像模板的描述文件,类似于shell中脚本语言,通过脚本语言将镜像表示功能的逻辑过程以命令描述但它是用docker的语法来对docker镜像的描述文件。

在这里插入图片描述

在这里插入图片描述案例:
在这里插入图片描述

你可能感兴趣的文章
进程创建时文件系统处理
查看>>
进程创建时信号处理函数处理
查看>>
进程创建时信号处理
查看>>
进程创建时内存描述符处理
查看>>
进程创建时命名空间处理
查看>>
进程创建时IO处理
查看>>
进程创建时线程栈处理
查看>>
进程创建时pid分配
查看>>
进程创建时安全计算处理
查看>>
进程创建时cgroup处理
查看>>
进程创建时共享内存处理
查看>>
idle进程创建
查看>>
内核线程创建
查看>>
linux elf tool readelf
查看>>
linux tool objdump
查看>>
linux tool nm
查看>>
字节对齐
查看>>
把类成员函数封装成线程API所需要的函数
查看>>
HTTP Live Streaming直播(iOS直播)技术分析与实现
查看>>
Ribbon界面图标可以直接用PNG做透明图标
查看>>