一、docker安装
docker安装参考:https://www.cnblogs.com/yufeng218/p/8370670.html
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
7、安装docker
sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
sudo yum install <FQPN> #例如:sudo yum install docker-ce-18.03.1-ce
8、启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
二、常用命令
systemctl start docker #启动
systemctl stop docker #关闭
docker version #显示docker版本信息
docker info #显示docker系统信息,包括镜像和容器数
docker images #列出本地所有镜像
docker ps #列出正在运行的容器
docker ps -a #查看所有的容器
docker search mysql #列出从docker hub中搜索符合条件的镜像
docker pull centos/mysql-57-centos7 #下载镜像到本地,默认下载最新的
docker images centos/mysql-57-centos7 #查看指定镜像
docker images centos/mysql-57-centos7 #查看进行是如何构建的
docker rmi sameersbn/redis #删除镜像,可根据id删除
docker rm 容器id #删除容器需要先停止容器
docker rm mysql5.7 #删除容器
三、制作容器demo
Dockerfile制作容器:
将准备好的jdk与tomcat上传至/usr/local/soft下tar –zxvf解压后编写Dockerfile文件:
FROM centos
# 维护者信息
# MAINTAINER d
#执行命令:创建目录
RUN mkdir -p /usr/local/soft
#将jdk1.8.0_171添加到镜像centos的/usr/local/soft/目录下,并命名为jdk
ADD jdk1.8.0_171 /usr/local/soft/jdk
#将apache-tomcat-8.5.2添加到镜像centos的/usr/local/soft/目录下,并命名为tomcat
ADD apache-tomcat-8.5.2 /usr/local/soft/tomcat
#添加环境变量
ENV JAVA_HOME /usr/local/soft/jdk
ENV CATALINA_HOME /usr/local/soft/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
#暴露8080端口
EXPOSE 8080
#启动时运行tomcat
CMD ["/usr/local/soft/tomcat/bin/catalina.sh","run"]
docker build -t='tomcat8_jdk1.8' . #构建tomcat+jdk环境镜像 名字为:tomcat8_jdk1.8 .是指当前目录
docker run -d -p 8080:8080 --name=tomcat8_jdk1.8 tomcat8_jdk1.8 #启动镜像,访问 xx.xx.xx.xx:8080
-d 后台运行
-p 端口映射 宿主机port : 容器port
--name 指定容器运行名称
http://xx.xx.xx.xx:8080/ #浏览器访问图如下
http://xx.xx.xx.xx:8080/myweb/ #hello word发布
四、配置docker仓库
docker pull registry #从dockerHub拉取registry镜像
docker run -di --name=registry -p 5000:5000 registry #根据镜像启动容器
http://xx.xx.xx.xx:5000/v2/_catalog #浏览器访问后有:{"repositories":[]}说明私库建创成功
vi /etc/docker/daemon.json #配置私库可信任
{"insecure-registries":["xx.xx.xx.xx:5000"]}
systemctl restart docker #重启docker
docker start registry #启动私库
docker tag tomcat8_jdk1.8 xx.xx.xx.xx:5000/tomcat8_jdk1.8 #将tomcat8_jdk1.8镜像标记到私库
#tomcat8_jdk1.8 #要标记的镜像名称
#xx.xx.xx.xx:5000/tomcat8_jdk1.8 #ip:port/后面的名字可以随意起
docker push xx.xx.xx.xx:5000/tomcat8_jdk1.8 #把xx.xx.xx.xx:5000/tomcat8_jdk1.8镜像放到私库
http://xx.xx.xx.xx:5000/v2/_catalog #浏览器访问
五、其它
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
命令解析:
docker run #运行一个容器
-di守护式
--name为创建的容器命名
-p mysql容器映射到宿主机的端口号默认3306,如果想改只需要改动前边的端口就行,一般不动
通过宿主机访问docker的容器,docker容器需要映射到宿主机上一个端口号
-e MYSQL_ROOT_PASSWORD docker中初始化变量的方式为mysql设置一个默认密码
centos/mysql-57-centos7 所制作容器镜像的名称
提示:如果要制作的容器是最新版本(latest),制作容器命令后面就不用写版本了,否则在镜像名称后面加版本:7
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7:7
进入docker容器中执行命令
docker exec –it <ContainerName, CONTAINER ID> /bin/bash
国外的镜像很难下载,这里配置阿里云镜像加加速。
vi /etc/docker/daemon.json #配置内容如下:
{
"registry-mirrors": ["https://eqcxmbvw.mirror.aliyuncs.com"],
"insecure-registries":["xx.xx.xx.xx:5000"]
}
配置内容介绍:
"registry-mirrors": ["https://eqcxmbvw.mirror.aliyuncs.com" #配置阿里加速地址
"insecure-registries":["xx.xx.xx.xx:5000"] #配置私库地址
systemctl daemon-reload #重新加载、使生效
systemctl restart docker #需重启docker
k8
六、docker介绍
2010年在美国旧金山成立了一家名为dotCloud的公司,这家公司主要提供基于Pass的云计算服务。具体来说是和LXC有关的容器技术,LXC,就是(Linux Container)虚拟容器技术,后来dotCloud公司将自己的容器技术进行了简化和标准化,并命名为—Docker。
作为一家小型创业企业,在激烈的竞争下,正当他们要坚持不下去的时候,脑子里蹦有了“开源”的想法。也就是将原来内部保密的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。
Docker开源人气迅速攀升,速度之快。开源当月,Docker 0.1版本发布。此后的每一个月,Docker都会发布一个版本。到2014年6月9日,Docker 1.0版本正式发布。此时的Docker,已经成为行业里人气最火爆的开源技术,没有之一。
Docker和容器技术为什么会这么火爆?就是因为它“轻”。在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表:是VMWare和OpenStack。虚拟机,常用的是在你电脑上装VMWare软件,通过VMware软件装多台虚拟机,虚拟机,类似于“子电脑”,子电脑与子电脑之间是相互隔离的,互不影响。虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。为什么说它是轻量级呢,因为它仅仅是一个进程而已。容器启动本质就是一个开启一个进程,因此Docker容器启动都是秒启。So
Docker 从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器。
Docker 进程和普通的进程没有任何区别,它就是一个普通的应用进程。不过是用来操作镜像文件的。
传统的VM的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,其中虚拟机操作系统占用内存是比较大的,一个操作系统有好几个 G,自然在启动速度和资源利用率以及性能上有非常大的开销,而 VM 虚拟机的上层是运行的运行时库和应用,整个虚拟机的空间是非常的庞大,但是容器化技术 Docker 技术的出现后,省去了操作系统这一层,多个容器之间相互隔离且共用了宿主操作系统和运行时库。
所以 Docker 应用容器相对于 VM 有以下几个优点:
· 启动速度快,容器启动本质就是一个开启一个进程而已,因此都是秒启,而 VM 通常要更久。· 资源利用率高,一台普通 PC 可以跑成百上千个容器,但跑不了几十个 VM 。· 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源。
所以很多移动互联网的应用或者云计算的后端节点都可以用 docker 来替换物理机器或者虚拟机。比如腾讯地图的很多后台服务基本上都迁移 docker 部署了。
Docker技术的三大核心概念,分别是:
镜像(Image)
容器(Container)
仓库(Repository)
Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。
例如:一个镜像可以完全包含了centos操作系统环境,可以把它称作一个centos镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。
镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。用户可以从网上下载一个已经做好的应用镜像,并通过命令直接使用。总之,应用运行是需要环境的,而镜像就是来提供这种环境。
Docker容器(Container)类似于一个轻量级的沙箱(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
可以吧每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。
镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。就像用ISO装系统之后,ISO并没有什么变化一样。
Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。
有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。
根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
当用户创建了自己的镜像之后就可以使用push将它上传到指定的公有或则私有仓库。这样用户下次在另一台机器上使用该镜像时,只需将其从仓库pull下来就可以了。