留神:这里倡议装置在CentOS7.x以上的版本,在CentOS6.x的版本中,装置前须要装置其余很多的环境而且Docker很多补丁不反对更新。
Docker筹备及装置
yum 包更新到最新
sudo yum update -y
装置须要的软件包, yum-util 提供yum-config-manager性能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
装置docker后查看
sudo yum install docker-ce -y;docker -v;
配置镜像减速
设置docker配置文件
docker装置后默认没有daemon.json这个配置文件,须要进行手动创立。
配置文件的默认门路:/etc/docker/daemon.json
mkdir -p /etc/docker;cd /etc/docker;vi daemon.json;
Docker 官网和国内很多云服务商都提供了国内加速器服务,例如:
网易:https://hub-mirror.c.163.com
七牛云加速器(举荐):https://reg-mirror.qiniu.com
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
#重新启动服务systemctl daemon-reload;systemctl restart docker;#查看减速是否失效docker info;
Docker的启动与进行
systemctl 命令是零碎服务管理器指令#启动dockersystemctl start docker#进行dockersystemctl stop docker#重启dockersystemctl restart docker#查看docker状态systemctl status docker#开机启动systemctl enable docker#查看docker概要信息docker info#查看docker帮忙文档docker --help
镜像
查看镜像
docker images#字段解释REPOSITORY:镜像名称TAG:镜像标签IMAGE ID:镜像IDCREATED:镜像的创立日期(不是获取该镜像的日期)SIZE:镜像大小这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
搜寻镜像
#如果你须要从网络中查找须要的镜像,能够通过以下命令搜寻docker search 镜像名称#字段解释NAME:仓库名称DESCRIPTION:镜像形容STARS:用户评估,反馈一个镜像的受欢迎水平OFFICIAL:是否官网AUTOMATED:主动构建,示意该镜像由Docker Hub主动构建流程创立的
拉取镜像
#拉取镜像就是从地方仓库中下载镜像到本地docker pull 镜像名称#例如,我要下载centos7镜像docker pull tutum/centos
删除镜像
#按镜像ID删除镜像docker rmi 镜像ID#删除所有镜像docker rmi `docker images -q`
容器
查看容器
#查看正在运行的容器docker ps#查看所有容器docker ps –a#查看最初一次运行的容器docker ps –l#查看进行的容器docker ps -f status=exited
创立与启动容器
- 创立容器罕用的参数阐明:
- 创立容器命令:docker run
- -i:示意运行容器
- -t:示意容器启动后会进入其命令行。退出这两个参数后,容器创立就能登录进去。即调配一个伪终端。
- --name :为创立的容器命名。
- -v:示意目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),能够应用多个-v做多个目录或文件映射。留神:最好做目录映射,在宿主机上做批改,而后共享到容器上。
- -d:在run前面加上-d参数,则会创立一个守护式容器在后盾运行(这样创立容器后不会主动登录容器,如果只加-i -t两个参数,创立后就会主动进去容器)。
- -p:示意端口映射,前者是宿主机端口,后者是容器内的映射端口。能够应用多个-p做多个端口映射
(1)交互式形式创立容器(退出命令后容器也退出)#命令:docker run -it --name=容器名称 镜像名称:标签 /bin/bashdocker run -it --name=mycentos tutum/centos /bin/bash#这时咱们通过ps命令查看,发现能够看到启动的容器,状态为启动状态#退出以后容器exit
(2)守护式形式创立容器(退出命令后容器不退出)#命令:docker run -di --name=容器名称 镜像名称:标签docker run -di --name=mycentos2 tutum/centos#登录守护式容器形式:#命令:docker exec -it 容器名称 (或者容器ID) /bin/bashdocker exec -it mycentos2 /bin/bash#退出容器exit
进行与启动容器
#进行容器docker stop 容器名称(或者容器ID)#启动容器docker start 容器名称(或者容器ID)
文件拷贝
#如果咱们须要将文件拷贝到容器内能够应用cp命令docker cp 须要拷贝的文件或目录 容器名称:容器目录
#也能够将文件从容器内拷贝进去docker cp 容器名称:容器目录 须要拷贝的文件或目录
目录挂载
咱们能够在创立容器的时候,将宿主机的目录与容器内的目录进行映射,这样咱们就能够通过批改宿主机某个目录的文件从而去影响容器。
#创立容器 增加-v参数 后边为 宿主机目录:容器目录,例如:#宿主机创立目录mkdir -p /usr/local/myhtmldocker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 tutum/centos
如果你共享的是多级的目录,可能会呈现权限有余的提醒。
这是因为CentOS7中的平安模块selinux把权限禁掉了,咱们须要增加参数 --privileged=true 来解决挂载的目录没有权限的问题
查看容器IP地址
咱们能够通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID)**
#也能够间接执行上面的格式化命令间接输入IP地址docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
删除容器
#删除指定的容器(先进行容器)docker rm 容器名称(容器ID)
迁徙与备份
需要:咱们须要在原有根底的环境减少新的配置,打包成镜像,再运行镜像,在这之下来减少配置
#咱们能够通过以下命令将容器保留为镜像docker commit mynginx mynginx_bak
#应用备份的镜像运行容器docker run -di --name=mynginx2 -p 81:80 mynginx_bak
镜像备份
咱们能够通过以下命令将镜像保留为tar 文件docker save -o mynginx.tar mynginx_bak
镜像复原与迁徙
首先咱们先删除掉mynginx_bak镜像,删除镜像前须要先删除容器#敞开容器docker stop mynginx2#删除容器docker rm mynginx2#删除镜像docker rmi mynginx_bak
#复原docker load -i mynginx.tar#执行后再次查看镜像,能够看到镜像曾经复原
Dockerfile
什么是Dockerfile
Dockerfile是由一系列命令和参数形成的脚本,这些命令利用于根底镜像并最终创立一个新的镜像。
1、对于开发人员:能够为开发团队提供一个完全一致的开发环境;
2、对于测试人员:能够间接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,能够实现利用的无缝移植。
常用命令
- FROM image_name:tag
定义了应用哪个根底镜像启动构建流程 - MAINTAINER user_name
申明镜像的创建者 - ENV key value
设置环境变量 (能够写多条) - RUN command
是Dockerfile的外围局部(能够写多条) - ADD source_dir/file dest_dir/file
将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后主动解压 - COPY source_dir/file dest_dir/file
和ADD类似,然而如果有压缩文件并不能解压 - WORKDIR path_dir
设置工作目录
**应用脚本创立镜像搭建Linux Centos7+jdk1.8的环境
**
应用dockerfile构建JDK8,应用根底镜像是centos7
#宿主机创立一个目录,而后把jdk传进去mkdir –p /usr/local/dockerjdk8
下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
#创立文件Dockerfile cd /usr/local/dockerjdk8vi Dockerfile
增加Dockerfile的配置信息
#依赖镜像名称和ID,镜像如果不存在的话会去下载FROM tutum/centos#指定镜像创建者信息MAINTAINER ITCAST#切换工作目录WORKDIR /usrRUN mkdir /usr/local/java#ADD 是相对路径jar,把java增加到容器中ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/#配置java环境变量ENV JAVA_HOME /usr/local/java/jdk1.8.0_171ENV JRE_HOME $JAVA_HOME/jreENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATHENV PATH $JAVA_HOME/bin:$PATH
#执行命令构建镜像(留神后边的空格和点,不要省略)docker build -t='jdk1.8' .
#查看镜像是否建设实现docker images
#把jdk1.8镜像生成容器docker run -di --name=mycentosjdk jdk1.8#进入容器docker exec -it mycentosjdk /bin/bash
进入 /usr/local/java 查看是否有jdk1.8.0_171的目录
查看Java版本,验证是否有环境变量以及是否可能查看java的版本
Docker公有仓库
需要:除了一些相似MySQL,Tomcat这些公共的镜像,很多企业在开发的时候会有我的项目特有的镜像环境,为了在企业外部局域网能够下载镜像,能够搭建公有的镜像仓库提供下载
#拉取公有仓库镜像docker pull registry
#启动公有仓库容器docker run -di --name=registry -p 5000:5000 registry
关上浏览器,输出地址:http://宿主机ip:5000/v2/_catalog看到 `{"repositories":[]}` 示意公有仓库搭建胜利并且内容为空
#Docker信赖公有仓库地址,批改daemon.jsonvi /etc/docker/daemon.json#增加以下内容,保留退出。"insecure-registries":["宿主机ip:5000"]
#重启docker服务systemctl restart docker
镜像上传至公有仓库
在Dockerfile试验中,咱们创立了jdk1.8的镜像,咱们把这个镜像上传至公有仓库
#标记此镜像为公有仓库的镜像docker tag jdk1.8 宿主机ip:5000/jdk1.8
#再次启动私服容器docker start registry
#上传标记的镜像docker push 宿主机ip:5000/jdk1.8
浏览器再拜访公有仓库,显示有jdk1.8的镜像
从公有仓库拉取镜像
1.删除之前jdk1.8mycentosjdk容器
2.删除jdk1.8的镜像
3.删除刚刚标记上传公有仓库的镜像:宿主机ip:5000/jdk1.8
4.从公有仓库拉取jdk1.8镜像
docker pull 宿主机ip:5000/jdk1.8
其余服务器拉取公有仓库的镜像
1.须要装置docker
2.须要信赖公有仓库地址,批改daemon.json
3.拉取公有仓库镜像:docker pull 宿主机ip:5000/镜像名称