17. docker引入
17.1. docker简介
- docker首先从图标下手的话,是一个鲸鱼背上放着箱子在游,可以看出docker主要功能是可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。集装箱运输货物,而Docker运输软件。
1.和集装箱一样,Docker在执行操作时,并不关心容器中到底装了什么,不管是web服务器,还是数据库,
或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。
2.Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,
然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,
Docker容器方便替换,可以叠加,易于分发,并且尽量通用。
- docker的基本架构 容器和镜像 就像我们学的java中对象和类的关系差不多,基于类创建对象,用户基于镜像去运行自己的容器
-
- 可以把镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。
- Docker可以帮助构建和部署容器,只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。
-
- 镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
- 总结:docker = 一个镜像格式 + 一些列标准操作 + 一个执行环境。
- 开发者使用docker时,只需要将自己的项目以及配备的环境之类的一些列东西装进去,运输,用的时候拿出来直接部署就可以
- docker 不同于之前的需要在Linux上运行项目需要我们自己一个一个单独安装各种环境配置啥的启动命令各式各样,docker中通过拉取各个配置的镜像就能配置,启动命令也是直接
docker start mytomcat/nginx
等 - 说起配置镜像,docker 还有个优势就是能够将我们自己配置好的一些开发环境也设置成镜像,给其他人用的时候直接拉取镜像就可以,就比如开发项目组长统一开发环境啥的
17.2. Registry(注册中心)
Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)
17.3. docker创建容器常用参数
创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。交互式
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,
如果只加-i -t两个参数,创建后就会自动进去容器)。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。
注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
17.4. docker常用命令
17.4.1. 有关镜像
开启docker : systemctl start docker
关闭docker : systemctl stop docker
拉取镜像 : docker pull 镜像名字
查看镜像 : docker images
搜索镜像 :docker search 镜像名称
删除镜像 :docker rmi 镜像ID
17.4.2. 有关容器
查看容器 :
查看正在运行的容器 : docker ps
查看所有容器 : docker ps -a
查看最后一次运行的容器 : docker ps -l
查看停止的容器 : docker ps -f status=exited
创建容器 :
交互式创建容器 : docker run -it --name=容器名字 镜像名称:标签 /bin/bash
守护式创建容器 : docker run -id --name=容器名字 镜像名称:标签 /bin/bash
登录守护式容器 : docker exec -it 容器名字 /bin/bash
区别是 : 一个可以直接进入容器目录(交互) ; 一个需要手动登录容器(守护)
退出当前容器 : exit
开启容器 : docker start 容器名字
关闭容器 : docker stop 容器名字
拷贝文件到容器内 :docker cp 需要拷贝的文件或目录 容器名称:容器目录
容器内文件拷贝到外面 :docker cp 容器名称:容器目录 需要拷贝的文件或目录
删除指定容器 :docker rm 容器名称(容器ID)
17.4.3. 其他命令
目录挂载 :docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
17.5. docker应用部署
17.5.1. 部署Mysql
拉取mysql镜像 :docker pull centos/mysql-57-centos7
创建容器 :
docker run -di --name=mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
17.5.2. 部署tomcat
拉取镜像 :docker pull tomcat:7-jre7
创建容器 : 创建容器 -p表示地址映射
docker run -di --name=mytomcat -p 8080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
17.5.3. 部署nginx
拉取镜像 :docker pull nginx
创建Nginx容器 :docker run -di --name=mynginx -p 80:80 nginx
17.5.4. 部署redis
拉取镜像 :docker pull redis
创建容器 :docker run -di --name=myredis -p 6379:6379 redis
17.6. 迁移与备份
1. 容器保存为镜像
将容器保存为镜像 : docker commit mynginx mynginx_i
2. 镜像备份
将镜像保存为tar 文件 :docker save -o mynginx.tar mynginx_i
3. 镜像恢复与迁移
先删除掉mynginx_i镜像 :docker rmi 镜像ID
镜像恢复 :docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
17.7. Docker私有仓库
1.拉取私有仓库镜像(此步省略) :docker pull registry
2.启动私有仓库容器 :docker run -di --name=registry -p 5000:5000 registry
3.打开浏览器 输入地址http://主机号:5000/v2/_catalog
看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
4.修改daemon.json :vi /etc/docker/daemon.json
添加以下内容,保存退出 :{"insecure-registries":["192.168.149.148:5000"]}
此步用于让 docker信任私有仓库地址
5.重启docker 服务 :systemctl restart docker
6.标记此镜像为私有仓库的镜像 :docker tag jdk1.8 192.168.149.148:5000/jdk1.8
7.再次启动私服容器 :docker start registry
8.上传标记的镜像 :docker push 192.168.149.148:5000/jdk1.8