Docker
-
学习目标:
· 掌握Docker基础知识,能够理解Docker镜像与容器的概念
· 完成Docker安装与启动
· 掌握Docker镜像与容器相关命令
· 掌握Tomcat Nginx 等软件的常用应用的安装
· 掌握docker迁移与备份相关命令
· 能够运用Dockerfile编写创建容器的脚本
能够搭建与使用docker私有仓库
鲸鱼背上有集装箱 ,
在大海里面---------宿主机系统Window10
鲸鱼 --------docker
集装箱 ---------容器实例 来自 我们的镜像模板.
一 Docker简介
1. 什么是虚拟化
将一台计算机虚拟出多个逻辑计算机,每个逻辑计算机可运行不同的操作系统
应用程序相互独立不受影响
2. Docker是什么?
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。基于Go语言实现的云开源项目 也就是通过对应用组件的封装, 分发, 部署, 运行 等生命周期 , 的管理 ,使用户的App (可以是一个WEB应用或数据库应用等)及其 运行环境能够做到 " 一次封装, 到处运行 "
解决了运行环境和配置问题软件容器 , 方便做持续集成并有助于整体发布的容器虚拟化技术
3. Docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
4. Docker的基本组成
①docker镜像 (就像千层饼)
就是一个只读的模板 . 镜像可以用来创建Docker容器 , 一个镜像可以创建很多个容器
② docker容器
③镜像仓库
总结
二 常用命令
1. 帮助命令
docker version : 显示 Docker 版本信息
docker info : 显示 Docker 系统信息,包括镜像和容器数
docker help : 帮助文档
2.镜像命令
①docker images 列出本地主机上的镜像模板
OPTIONS :
docker images -a 列出本地所有镜像(含中间映像层)
docker images -q 只显示镜像 ID
docker images --digests 显示镜像摘要信息
docker images --no-trunc 显示完整的镜信息
② search 就是去 Github上查找有哪些镜像
docker search 某个镜像名字 . 比如 : docker search tomcat
docker search -s 30 tomcat : 查找点赞数超过30的tomcat
docker search -s 30 --no-trunc tomcat 显示完整的镜像描述
③ docker pull 下载镜像
docker pull 某个镜像名字 比如 : docker pull tomcat
④ docker rmi 删除镜像
docker rmi rmi -f镜像ID : 删除单个
docker rmi rmi -f镜像名1 镜像名2 :删除多个 比如: docker rmi rmi -f tomcat nginx
docker rmi rmi -f${docker images -qa} : 删除全部
3.容器相关命令
①查看运行的容器
docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps –l 查看最后一次运行的容器
docker ps -f status=exited 查看停止的容器
②交互式方式创建容器(前台)
docker run -it --name=mycentos centos /bin/bash
# docker run:表示创建容器
# -it:表示运行容器并进入它的命令行
# --name=mycentos:给当前的容器命名
# centos: 使用该镜像创建
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
执行之后我们可以把每个容器都看成一个小电脑或者服务器
③退出当前容器
exit
退出之后,容器也退出了,没有删除
④创建后台容器(守护式方式创建容器 后台)
docker run -id --name=mycentos2 centos
docker exec -it mycentos2 /bin/bash
退出之后容器没有退出
⑤启动与停止容器
docker start mycentos2
docker stop mycentos2
4. 文件拷贝
概念:把操作系统里面的文件拷贝到容器当中
命令:
linux操作系统到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录
touch a.txt
例如: docker cp a.txt mycentos2:/usr/local/
进入到容器当中
docker exec -it mycentos2 /bin/bash
看容器中有哪些文件
cd /usr/local ls
容器到操作系统(需要退出容器)
docker cp 容器名称:容器目录 需要拷贝的文件或目录
例如: docker cp mycentos2:/usr/local/a.txt ./
5.目录挂载
概念:将宿主机的目录与容器内的目录进行映射(共享)
命令:
宿主机目录:容器目录
docker run -id --name=mycentos3 -v /usr/local/mydata:/usr/local/mydata centos
进入cd /usr/local/mydata
touch b.txt
vim b.txt 编辑内容
进入容器看看内容
docker exec -it mycentos3 /bin/bash
cd /usr/local/mydata
ls
cat b.txt
exit
查看容器IP地址
docker inspect mycentos3
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3
删除容器
docker stop mycentos3
docker rm mycentos3
docker rmi 6f5604be75c1
三 应用部署
1.mysql部署
拉取mysql镜像: docker pull centos/mysql-57-centos7
创建容器
docker run -di --name=容器名字 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=mysql密码 镜像名称
docker run -di --name=mysql88 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123 centos/mysql-57-centos7
利用docker ps 看是否映射成功
2.Nginx部署
拉取镜像 : docker pull nginx
创建Nginx容器:gitlab-ctl
docker run -di --name=mynginx3 -p 82:80 nginx
docker exec -it mynginx /bin/bash
vi /etc/nginx/nginx.conf
3.redis部署
拉取镜像 :docker pull redis
创建容器 :
docker run -di --name=myredis -p 6389:6379 redis
docker exec -it myredis /bin/bash
4.docker安装tomcat
拉取镜像 :docker pull tomcat
创建Nginx容器
docker run -di --name=mytomcat -p 8090:8080 tomcat
docker cp myweb.war mytomcat:/usr/local/tomcat/webapps/
https://www.cnblogs.com/yds941268778/p/12748308.html
四 迁移与备份
1.容器保存为镜像
命令 :docker commit myredis my_redis_image
看当前系统的镜像 :docker images
创建备份redis容器 :docker run -di --name=my_redis_image_instance -p 6399:6379 my_redis_image
可以看到一个新的容器 :docker ps
2.镜像备份
docker save -o my_redis_image.tar my_redis_image
3.镜像恢复与迁移
需要先删除原有镜像
docker stop my_redis_image_instance
docker rm my_redis_image_instance
docker rmi my_redis_image
docker load -i my_redis_image.tar
docker images
五 Dockerfile
1.什么是Dockerfile
之前我们都是用的别人的镜像,如果我们想自己开发一个镜像就需要用到dockerfile
Dockerfile其实就是一个文本文件,由一系列命令和参数构成
2.操作步骤
a.创建目录
mkdir –p /usr/local/software/my_docker
b.上传jdk-8u152-linux-x64.tar.gz文件到目录/usr/local/software/my_docker
c.创建dockerfile文件
vim Dockerfile
参看资料里面的文件
d.执行命令构建镜像
docker build -t='jdk1.8' .
e.执行
docker run -it --name=myjdk jdk1.8 /bin/bash
六 Docker私有仓库
1.拉取私有仓库镜像
docker pull registry
2.启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
3.访问地址
http://10.211.55.95:5000/v2/_catalog
4.创建并修改配置文件
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://8y2y8njn.mirror.aliyuncs.com"],
"insecure-registries":["10.211.55.95:5000"]
}
5.重启docker服务
systemctl restart docker
6.标记此镜像为私有仓库的镜像
docker tag redis 10.211.55.95:5000/private_redis
7.再次启动私服容器(因为上面重启的docker服务)
docker start registry
8.上传标记的镜像
docker push 10.211.55.95:5000/private_redis
9.从私有仓库拉取镜像(在另外一台机器上拉取)
也需要配置vim /etc/docker/daemon.json 这个文件
{
"registry-mirrors": ["https://8y2y8njn.mirror.aliyuncs.com"],
"insecure-registries":["10.211.55.95:5000"]
}
需要重启另外一台服务器
systemctl restart docker
docker pull 10.211.55.95:5000/private_redis
docker images
docker push 10.211.55.95:5000/private_redis
9.从私有仓库拉取镜像(在另外一台机器上拉取)
也需要配置vim /etc/docker/daemon.json 这个文件
{
“registry-mirrors”: [“https://8y2y8njn.mirror.aliyuncs.com”],
“insecure-registries”:[“10.211.55.95:5000”]
}
需要重启另外一台服务器
systemctl restart docker
docker pull 10.211.55.95:5000/private_redis
docker images