一、概念
Docker是一个开源的项目,是一种容器的技术,是基于Google公司推出的Go语言实现,它就像一个一个的集装箱,每个集装箱就是一个容器,容器就相当我们的一个环境,甚至你可以理解为一个操作系统,我们可以在容器里面放一个工具,每个容器相互独立共存。
Docker是为了解决一些安装的环境的复杂问题,只需要安装一个有相关环境的容器,实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器等技术。(例如一个Mysql的容器直接使用,不需要配置mysql环境和安装)
特点:
二、Docker的组件
Docker的服务端和客户端
用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的构件部分,其实镜像就相当于一个模板。
从面向对象来看,镜像就是一个类,而容器就是一个对象。
例子:服务端就相当于一个店铺,镜像就相当于店铺的菜单的一个商品,而商品需要去供应商进货的才会有(镜像需要去注册中心下载过来),选择镜像创建一个容器也就相当于看中了菜单某个商品然后购买了一件商品(可以创建多个)。
Docker也不关心你要把容器运到何方:我们可以在自己的笔记本总构建容器,上传到Resgistry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。
Registry(注册中心)
Docker用Registry来保存用户构件的镜像。Resgistry分为公共和私有两种,Docker公司运营公共的Rsgistry叫做Doceker Hub。用户可以在Docker Hub注册中号,分享并保存自己的镜像。
三、Docker安装与启动
我采用的环境是阿里云的CentOS7
一、配置基本环境与安装
1、yum包更新到最新
sudo yum update
2、安装需要的软件包,用来下一步设置yum源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置yum源为阿里云,原来默认是国外的站点,会很慢
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装docker,ce是社区版免费使用,de是体检版
sudo yum install docker-ce
5、安装后查看docker版本
docker -v
二、设置ustc的镜像
ustc的docker镜像加速器速度很快。
https://lug.ustc.edu.cn/wiki/lug/services/mirrors
编辑以下文件:
vi /etc/docker/daemon.json
在文件中输入以下内容设置国内镜像源:如何编辑保存出现错误提示可以考虑是否未创建目录和文件,需要先运行docker服务生成/etc/docker目录(一开始是没有这个目录的可以使用find / -name docker查下看)然后touch命令创建daemon.json文件
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
三、Docker的启动与停止
systemctl命令是系统服务管理器指令
启动docker
systemctl start docker
停止docker
systemctl stop docker
重启docker
systemctl restart docker
查看docker状态
systemctl status docker
开机启动
systemctl enable docker
查看docker概要信息
docker info
四、镜像相关命令
一、查看镜像
docker images
镜像列表属性:
PEPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像创建日期
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
二、搜索镜像
如何你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 景象名称
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由DOCKER Hub自动构件流程创建的
三、拉取镜像
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做多个目录或文件映射。作用:在宿主机上做修改,然后共享到容器上。宿主机就是运行容器的虚拟机。
(1)交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动桩体
退出当前容器
exit
(1)守护式方式创建容器:相当于在后台开启
docker run -di --name=容器名称 镜像名称:标签
如何进去呢?
docker exec -it 容器名称 /bin/bash
使用守护式方式创建容器的话使用exit还是处于运行中的容器,可以使用下面命令进行启动与停止
停止与启动容器
docker stop 容器名或者容器ID
docker start 容器名或者容器ID
三、容器文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
四、目录挂载
我们可以在创建容器的适合,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为宿主机目录:容器目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如何共享的是多级目录,可能会出现权限不足的提示。
这是因为centos7中的安全模块selinux把权限禁掉了,我们需要添加参数--privileged=true来解决挂载的目录没有权限的问题
五、查看容器IP地址
docker inspect 容器名称(容器ID)
直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
六、删除容器
docker rm mycentos2(容器名称或ID)
删除错误指的是容器在运行无法删除,先停止运行再删除
如果删除镜像需要停止和删除所有相关镜像
六、Docker的应用场景
一、Mysql部署
1.拉取mysql镜像
docker pull centos/mysql-57-centos7
2.创建容器
docker run -di --name=mysql_centos -p 3307:3307 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 代表端口映射,格式为宿主机映射端口:容器运行端口
-e 代表添加环境变量MYSQL_ROOT_PASSWORD 是root用户的登录密码
3.进入mysql容器
docker exec -it tensquare_mysql /bin/bash
登录mysql
mysql -u root -p
5.远程登录mysql
二、tomcat部署
1.拉取镜像
docker pull tomcat:7-jre 7
2.创建容器
创建容器 -p表示地址映射
docker run -di --name=mytomcat -p 9000:8080
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
注:使用目录挂载 webapps是新创建的,root已经被清空了,所以访问默认是404的
三、nginx部署
1.拉取镜像
docker pull nginx
2.创建nginx容器
docker run -di --name=mynginx -p 80:80 nginx
四、Redis部署
1.拉取镜像
docker pull redis
2.创建容器
docker run -di --name=myredis -p 6379:6379 redis
七、迁移与备份
什么时候需要迁移?当我们想要从一台服务器迁移到另一台服务器,或者说在容器中我们配置了自己特有的环境,我们可以选择迁移和备份。
1.容器保存为镜像
docker commit 容器名称 镜像名称(新的名称)
2.镜像备份
docker save -o name.tar 镜像名
3.镜像恢复
docker load -i 指定备份文件
八、Dockerfile
一、概念
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像
1.对于开发人员:可以为开发团队提供一个完全一致的开发环境
2.对于测试人员:可以直接拿开发时所构件的景象或者通过Dockerfile文件构建一个新的镜像开始工作了;
3.对于运维人员:在部署时,可以实现应用的无缝移植。
二、常用命令
三、应用实例JDK8
实现:构建一个已经配置好环境变量的jdk8镜像
1.先上传jdk8
2.进入目录
3.构件Dockerfile与使用命令
vi Dockerfile
4.构建镜像
5.构建成功
九、总结
对于docker从以上来看,我们已经有一个基本的了解,从我的理解角度出发,docker就是一个一个封装了指定环境,指定工具的镜像,我们需要mysql,就下一个mysql镜像,需要一个tomcat,就下个tomcat镜像,并且docker是可以实现多个容器化。既下既用,特别方便,docker提供的端口映射,目录挂载完美解决了宿主机与docker关系的复杂性,不需要特地去docker容器配置。同时docker最大的作用还是环境一致性,我们知道,有时候环境不一致导致的问题真的很让人头疼。