码迷,mamicode.com
首页 > 其他好文 > 详细

Docker

时间:2021-06-16 17:54:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:数字   数据库   extra   目录   操作   redis   指令   http   install   

docker概念:

docker 基于操作系统之上的虚拟化技术,采用的是容器的概念。与之对应的是基于硬件的虚拟化技术,像vm。docker是管理容器的引擎,基于linux的容器技术,对linux的容器技术(lxc)进行了进一步的封装,是对软件和其依赖环境的标准打包,应用之间相互隔离,共享一个操作系统的内核。

yum list installed | grep docker	#检查是否安装docker
#如果安装了会出现下面的信息
docker.x86_64 2:1.13.1-205.git7d71120.el7.centos @extras  
docker-client.x86_64 2:1.13.1-205.git7d71120.el7.centos @extras  
docker-common.x86_64 2:1.13.1-205.git7d71120.el7.centos @extras 

docker yum install docker -y	#安装docker
docker -v	#查看docker版本
#卸载docker  
yum remove docker.x86_64 -y
yum remove docker-client.x86_64 -y
yum remove docker-common.x86_64 -y
#ps:-y表示自动确认

service docker start	#启动docker 
service docker stop	#停止docker  
service docker restart	#重启docker  
service docker status	#查看docker运行状态  
ps -ef | grep docker	#查看docker进程  
docker info	#查看docker信息  

docker运行机制:

docker不是容器,是一个管理容器的引擎。docker服务启动->下载镜像->启动该镜像得到一个容器->容器中运行程序。

docker引擎包括docker的进程,此外还有docker客户端,使用docker提供的命令通过客户端来操作docker,docker构建一个容器的过程是通过客户端发出构建的命令,然后到达docker引擎去找对应的镜像,如果没有对应的镜像就会去docker的远程仓库去找,找到后就将镜像下载到docker引擎中,然后docker去运行这个镜像,从而得到一个容器。

通过镜像运行容器:

搜索镜像可以在镜像仓库的网站上去搜索,可以直接命令搜索。

docker search 镜像名称	#搜索某个镜像
#比如搜索tomcat
docker search tomcat
#下载镜像/拉取镜像
docker pull 镜像名称
#运行镜像 前台启动 可以在控制台看到日志  通过ctrl+c即可关闭
docker run 镜像名称/镜像id
#后台启动  在run后面加上参数-d
docker run -d 镜像名称/镜像id 
docker images   #查看docker有多少镜像
docker ps  #查看正在运行了哪些容器
docker stop 容器id	#停止指定的容器

#进入某个容器,其中i表示交互式的,也就是保持标准输入流打开
#t表示虚拟控制台,分配一个虚拟控制台
docker exec -it 容器id bash
#退出容器
exit

客户机访问docker的容器:

需要有端口映射,docker容器默认采用桥接模式与宿主机通信,需要将宿主机的ip端口映射到容器的ip端口上。就是用户访问linux的8080端口,然后要将linux的8080端口映射到容器的8080端口上。
通过映射宿主机端口的方式启动容器:

 #映射宿主机的8080端口到容器docker.io/tomcat上
 docker run -d -p 8080:8080 docker.io/tomcat
 #前面的8080是linux的端口,后面的8080是容器的端口

镜像:

镜像相等于一个类,通过镜像产生的容器相当于这个类的实例化对象,镜像可以通过pull从官方镜像仓库下载,也可以自己去Dockerfile文件构建。

 #删除镜像
 # rmi 是删除镜像 rm 是删除容器
 docker rmi redis:latest

容器:

容器是镜像创建的运行实例,它可以被启动、停止、删除。

docker start 容器id或者容器名称	#启动已有且已经停止运行的容器
docker rm 容器id/容器名称	#删除容器	运行时的容器是不允许删除的
docker inspect 容器id/容器名称    #查看容器的元信息
docker stop $(docker ps -q)	#停用全部运行中的容器
docker rm (docker ps -aq)	#删除全部容器
docker stop $(docker ps -q) & docker rm -f $(docker ps -aq)	#停用并删除容器

仓库:

仓库用于存放镜像文件,仓库有个仓库注册服务器的概念,仓库注册服务器上存在着很多的仓库,每个仓库有包含众多的镜像,每个镜像有自己的标签(tag),仓库又分公开仓库和私有仓库。

#这是一条语句,表示运行mysql容器并创建一个workdb的数据库,密码是123456,后台运行,
#映射宿主机的3306端口
docker run -d -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql
#	-d  表示后台运行
#	-p  表示映射端口,将宿主机的端口和容器的端口做映射
#	-e  表示环境变量,指定环境,后面的都是mysql的相关环境
#   -e MYSQL_DATABASE=workdb   表示mysql的数据库的名称叫workdb
#   -e MYSQL_ROOT_PASSWORD=123456   表示mysql root用户的密码是123456
#	docker.io/mysql mysql的镜像名称
mysql -u root -p    #登录mysql

授权远程登录访问:

假设现在mysql的容器里面建了一张表,并添加了数据,这个时候将这个容器关闭掉,那么再次通过命令打开的时候,之前的数据和表都会没有,这个时候处于瞬时状态。

持久化:

那么怎么进行持久化:

#将宿主机/opt/mysql/data这个路径作为和容器进行数据同步的路径
#   /opt/mysql/data 宿主机的路径
#   /var/lib/mysql  容器的路径
docker run -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql

意思是通过-v命令将宿主机的路径和容器的路径关联起来,到时候容器的数据会同步到宿主机的路径下。
其原理就是通过该命令启动容器,将容器的某个路径下的数据同步到宿主机的某个目录,等到容器停止运行的时候,再次运行之前的命令,这个时候会将宿主机那个目录下的数据同步到容器的那个路径。

docker cp /root/test.html 容器id:/usr/local/tomcat/webapps/Root
#将宿主机root下的test.heml的文件拷贝到某个容器路径为/usr/local/tomcat/webapps/Root下

保存为新镜像:

docker容器被修改后保存为新的镜像,那么下次通过镜像创建的容器,就是带有上次数据资源的容器了。

#将容器id为xxx的容器重新保存为镜像名称为yyy的新镜像
docker commit xxx yyy

docker私有镜像仓库搭建及镜像共享:

? 制作新镜像后,需要将新镜像复制到另一台服务器中使用,有两种方式可以做到,一种是上传镜像到仓库中(本地仓库或者远程的公共仓库)。
? 在etc/docker路径下修改docker.json文件

#配置加速:
#在etc/docker路径下修改docker.json文件
vim docker.json	#"registry-mirrors":["https://registry.docker-cn.com"]
#查找仓库注册服务器  
docker search registry
#拉取仓库注册服务器  
docker pull 仓库服务器名称

仓库也是一个镜像

 docker run -d -p 5000:5000 registry #启动仓库镜像

通过http://ip:5000/v2/_catalog 访问镜像仓库
通过http://ip:5000/v2/cat/tomcat/tags/list 查看上传的镜像的版本

#打标签:
docker tag [imageid] ip:5000/cat/镜像名称
#推送到镜像仓库:
docker push ip:5000/cat/镜像名称

第二种是将新镜像保存为一个文件,然后将这个文件复制到另一个机器上,然后直接运行这个文件。可以使用docker save和docker load来存储和加载镜像。

docker save -o 要保存的文件名 要保存的镜像名称
#-o  表示output	    文件名一般是文件名称.tar.gz格式

#然后再另一台宿主机上
docker load --input 文件名称
#或者
docker load < 文件名

自定义镜像-以JDK为例:

使用Dockerfile用于构建Docker镜像,Dockerfile文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像。

Dockerfile的基本结构:

分为四个部分:

  • 基础镜像信息:
  • 维护者信息:
  • 镜像的操作指令:
  • 容器启动时执行指令:
FROM centos:latest	#从centos:latest这个基础镜像开始构建
MAINTAINER cat	#作者信息
ADD jdk-8u191-linux-x64.tar.gz /opt/jdk	#将jdk的压缩包自动解压到/opt/jdk
ENV JAVA_HOME /opt/jdk/jdk1.8.0_191	#通过env配环境变量JAVA_HOME
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version #执行java-version命令

#除此之外,像tomcat这样的容器,构建过程中可能需要指定端口,这是可以通过EXPOSE来进行指定
EXPOSE 8080

编辑好Dockerfile后,执行以下命令:

docker build -t 镜像名称	#构建镜像
docker run -d 镜像名称	#运行镜像

docker部署springboot的jar包:

jar包:

1、将开发的springboot程序打包成jar包;

2、将包上传至linux的某个目录;

3、定义Dockerfile文件,用于创建项目镜像;

FROM 某个镜像	
MAINTAINER cat
ADD jar包 某个目录
#执行赋权命令 
RUN chmod +x 某个目录/jar包
#RUN指令	在当前镜像基础之上执行指定命令,并提交为新镜像,当命令较长时可使用\换行,如果需要多条命令联合可使用&&;
CMD java -jar 目录/jar包名

jar包所需依赖的环境也要启动。

war包:

war包是部署在tomcat中的。

FROM tomcat	#依赖于tomcat的镜像	
MAINTAINER cat
ADD war包 某个目录
EXPOSE 8080	#指定端口
CMD 目录/bin/catalina.sh run

源码方式构建镜像运行容器:

将源码上传至linux,通过maven打包,然后再构建镜像,运行容器。

在linux下配置maven环境。

maven clean package -Dmaven.test.skip=true	#打包

docker-compose容器编排:

容器编排用于管理镜像容器的工具,用于定义和运行多个容器的应用工具,可以在一个配置文件中配置应用的所有服务,然后使用一个命令即可创建并启动配置文件中所配置的所有服务。

安装compose:

curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#检查是否安装成功
docker-compose --version
#查看帮助命令
docker-compose --help

docker-compose up -d --scale 服务名=数字	#创建并启动容器
#将某个springboot的程序部5份,那么数字就是5
#scale表示对应的服务同时启动几个容器
docker-compose down	#停止并删除容器,如果不想删除则使用stop

Docker

标签:数字   数据库   extra   目录   操作   redis   指令   http   install   

原文地址:https://www.cnblogs.com/zhaojunjin/p/14887616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!