Docker
目标:
一:什么是docker
小结:
-
Docker是一个应用容器引擎;
-
应用场景:web的自动化打包发布,自动化测试、可持续集成,安装各种组件;
-
与传统虚拟机比较:docker启动速度比较快,占用体积(内存)较小;
-
组成:docker守护进程,仓库,镜像,容器,docker客户端
- 为了避免测试人员和开发人员的环境不一致,使用docker来避免这种问题。
docket架构:
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
docket镜像与容器:(相当于类和对象)
二、Docker安装与启动
docker 安装命令:
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker- ce/linux/centos/docker-ce.repo
docker -v //查看docker版本
然后要设置ustc镜像
systemctl start docker // 启动docker
systemctl restart docker //重启docker
systemctl stop docker //停止docker
systemctl status docker //查看运行状态
卸载docker命令:
yum list installed |grep docker
镜像列表
yum remove 镜像列表名称
find / -name docker*
rm -rf 查找的文件名称
三、docker镜像相关命令
四、docker容器相关命令
4.1容器相关命令:
查看正在运行的容器: docker ps
查看所有容器:docker ps -a
创建并启动交互式容器:docker run -it --name=mycentos7 centos:7 /bin/bash
启动交互式容器之后是直接进入容器终端;可以查看容器的文件结构;使用exit 命令则会退出终端并且停止容器。
长期运行的容器,我们需要创建一个守护式容器,容器名不能重复。
# 创建并启动守护式容器
docker run -di --name=mycentos2 centos:7
# 启动容器后再进入容器
docker exec -it mycentos2 /bin/bash
守护式容器在启动之后会一直在后台运行,即使进入容器之后执行exit命令也不会停止容器,适用于需要长期运行容器的情况。
停止和启动容器命令
docker stop 容器名/容器id
docker start 容器名/容器id
将文件拷贝到容器命令格式:
dir //查看有什么文件
docker cp 文件名 容器名:/use/local //将文件复制到容器的/use/local的目录下
docker exec -it 容器名 /bin/bash //启动容器后再进入容器
cd /usr/local //进入这个目录下
dir //查看这个文件已经复制过来了。
Exit //退出
将容器的文件拷贝出来如图命令:
查看容器IP: Docker inspect 容器名
删除容器: docker rm 容器名
删除所有容器:docker rm `docker ps -a -q` (慎用)
五、部署
5.1在虚拟机上部署Mysql
mysql部署命令:
1.拉取mysql镜像到本地
docker pull centos/mysql-57-centos7
2.以守护式创建容器并设置mql登录密码, -p表示映射 ,宿主机端口:容器端口,通过操作宿主机端口来操作容器中的mql,centos/mysql-57-centos7:容器名
docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWOR D=123456 centos/mysql-57-centos7
3.docker ps //查看正在运行的容器,如果发现Mysql容器没有运行,则查docker ps -a 在docker start 容器id,来开启容器。
4. ip addr //查看虚拟机ip,然后用Mysql图形界面画工具连接这个ip
部署成功:(这里是通过宿主机ip对容器的访问,因为做了端口映射)
在创建容器的时候指定环境变量MYSQL_ROOT_PASSWORD表示使用root进行远程连接时候的密码。如果需要进行远程连接的话可以使用-p进行端口映射。
5.2 部署Tomcat
1.拉取镜像
docker pull tomcat
2.创建容器。name=容器名,-p映射端口,-v目录挂载,/usr/local/tomcat/webapps:下载到webapps下,如果文件目录没有自动下载,tomcat:镜像名,或者用id也可以。
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps tomcat
3.查看运行状态 docker ps //如果没运行,则命令开启运行。
浏览器访问刚刚映射的端口号,看到猫你就部署成功了。
5.3 Nginx部署
1.拉取镜像
docker pull nginx
2.创建Nginx容器,name=创建的容器名, -p 映射端口 镜像名
docker run -di --name=mynginx -p 80:80 nginx
3.查看是否启动
docker ps
浏览器输入 宿主机ip:80 即可看到这个页面,则部署成功。
接下来我们把静态页面部署到Nginx上去。
1.将准备好的静态页面文件名index.html(一定这个名字,否则覆盖不了,一般都是网站的主页)拷贝到一个路径文件夹下
C:\develop\static //我放在这个本地目录下
2.命令:上传这个目录到宿主机上
put -r C:\develop\static
显示上传成功
可以看到static目录下的dongtu.html //由于开始我名称不对,导致没有覆盖。后面访问不到,
将上传的这个目录拷贝到容器中
hdocker exec -it mynginx /bin/bash //进入容器
cd etc //进入etc目录
cd nginx //进入nginx 目录
dir //查看文件
cat nginx.conf //查看配置信息基本
cd conf.d
dir
cat default.conf //查看配置信息
可以看到其实配置了一个server,root 路径下/usr/share/nginx/html.就是我们看到的欢迎页。
我们需要将我们刚上传的static目录下的页面拷贝到root这个路径下。
exit //退出
dir //查看下目录
mv static html //把static 目录改名为html ,要为了覆盖root路径下的html
docker cp html mynginx:/usr/share/nginx/ //把html目录拷贝到root的路径下
如图输入命令
由于我的dongtu.html 名称不对,没有覆盖。后面我修改过来了。就可以访问了。
5.4 部署Redis
1.拉取镜像
docker pull redis
2.创建容器,两种任选一
docker run -di -- name=myredis -p 6379:6379 redis //redis不设置密码
docker run -id --name=myredis -p 6379:6379 redis --requirepass "123456"// 设置 密码的
3.查看开启状态
docker ps
4.找到本地redis客户端路径
C:\develop\redis-2.8.9 //我的本地redis路径
5.管理员身份打开cmd
cd C:\develop\redis-2.8.9
redis-cli -h 宿主机ip //比如redis-cli -h 192.168.0.1 。这里是远程访问
6.如果设置密码
auto "123456" //如:auto "你的password"
7.测试存储
set name mkk
get name
部署成功。
六.docker 的迁移与备份
docker 的迁移与备份-- 命令中以mynginx容器为例,因为它之前已经部署了静态页面。用它来测试恢复。
1.将docker容器保存为镜像
docker commit mynginx mynginx_a //mynginx:容器名,mynginx_a:镜像名。此新镜像的内容就是当前容器的内容,接下来你可以用此镜像再次运行新的容器
docker run -di --name=mynginx2 -p 81:80 mynginx_a //基于这个新镜像来创建一个容器。当然,以后我们可以把修改好之后的容器在保存为镜像。基于含有内容的新镜像来操作。浏览器测试:ip:81可以访问
2.镜像备份:把镜像保存为一个文件即可。比如,我们要把当前的镜像放到另一台服务器上去部署,我们可以把当前镜像保存为一个文件,然后把文件恢复为镜像即可。
简单理解就是:镜像保存(备份)为文件,文件恢复为镜像。在做好文件之后,在把这个镜像给删掉即可。
docker save -o mynginx.tar mynginx_a //-o 表示输出,mynginx.tar是自定义文件名,mynginx_a:是新镜像
dir //查看下,有这个文件mynginx.tar。
3.镜像恢复与迁移:事先把镜像备份为文件,如果该镜像损坏或删除了,则可以用镜像的备份文件来恢复。
如果镜像里面有容器,先要停止容器运行。在删除容器,在删镜像。
docker stop mynginx2
docker rm mynginx2
docker rmi mynginx_a
docker load -i mynginx.tar // -i :表输出,恢复文件为镜像
docker images //查看镜像
docker 私有仓库的搭建
1.拉取私有仓库镜像
docker pull registry
2.启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
3.浏览器访问 看到下图内容表示搭建成功,且内容为空。
4.修改daemon.json
vi /etc/docker/daemon.json
添加以下内容,保存退出。
{"insecure-registries":["宿主机ip:5000"]} //表示信任私有仓库的地址
5.重启docker 服务生效
systemctl restart docker
将镜像上传到私有仓库
docker tag jdk1.8 宿主机IP:5000/jdk1.8
docker start registry //开启私有仓库
docker push 宿主机IP:5000/jdk1.8
在浏览器访问如下: