一 docker简介
1.什么是虚拟化
将一台计算机虚拟出多个逻辑计算机,每个逻辑计算机可运行不同的操作系统
应用程序相互独立不受影响
2.问题:为什么会有docker出现
一款产品从开发到测试再到上线,不同环境,不同的机器,运维人员都要去进行配置
这对运维人员就是灾难,如何解决 所以docker出现了提出 软件可以带环境安装
3.什么是Docker
Docker 是一个开源的应用容器引擎,基于Go语言开发(解释)
可以让开发者打包应用及相关依赖到一个容器里面 然后发布到其他任何linux机器上
实现 一次封装,到处运行
4.Docker应用场景
① Web应用的自动化打包和发布
② 自动化测试和持续集成、发布(jenkins)
使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。
5.docker容器与虚拟机比较(画图)
a.Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,
而传统虚拟机则是在硬件层面实现虚拟化
b.与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
c.容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高
6.Docker组成部分
Docker是一个客户端-服务器(C/S)架构程序
https://blog.csdn.net/syaziou/article/details/79329584
a.docker客户端与服务器
docker client向docker daemon发送请求,docker daemon完成相应的任务,并把结果返还给容器
b.docker镜像(类)
一个只读的模板,就跟一个操作系统镜像一个意思
c.docker容器(对象)
容器就是镜像的运行实例
镜像是创建容器的软件 , 容器是由镜像运行产生的运行实例
d.docker仓库
保存docker镜像的地方,就跟maven仓库一个意思
Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。
用户可以在Docker Hub注册账号,分享并保存自己的镜像
二 Docker安装与启动
1.docker的安装
a.ip地址
ip addr
c.安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 (centos7.6)
d.设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
e.安装docker
sudo yum install docker-ce -y
f.安装后查看docker版本
docker -v
2.docker的启动/停止
a.启动
systemctl start docker
b.停止
systemctl status docker
systemctl stop docker
systemctl restart docker
c.开机启动
systemctl enable docker
d.查看docker概要信息
docker info
e.查看docker帮助文档
docker --help
3.docker常见命令
a.查看镜像
docker images
b.搜索镜像
docker search nginx
c.拉取镜像
docker pull 镜像名称 (不指定版本,会下载最新的版本)
d.删除镜像
docker rmi 镜像ID
删除所有镜像
docker rmi `docker images -q`
4.容器相关命令
a.查看运行的容器
docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps –l 查看最后一次运行的容器
docker ps -f status=exited 查看停止的容器
b.交互式方式创建容器(前台)
docker run -it --name=mycentos centos /bin/bash
# docker run:表示创建容器
# -it:表示运行容器并进入它的命令行
# --name=mycentos:给当前的容器命名
# centos: 使用该镜像创建
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
执行之后我们可以把每个容器都看成一个小电脑或者服务器
c.退出当前容器
exit
退出之后,容器也退出了,没有删除
d.创建后台容器(守护式方式创建容器 后台)
docker run -id --name=mycentos2 centos
*进入容器
docker exec -it mycentos2 /bin/bash
退出之后容器没有退出
e.启动与停止容器
docker start mycentos2
docker stop mycentos2
f.删除容器
docker rm mycentos2
5.文件拷贝
a.概念
把操作系统里面的文件拷贝到容器当中
b.命令
linux操作系统到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录
touch a.txt
例如: docker cp a.txt mycentos2:/usr/
进入到容器当中
docker exec -it mycentos2 /bin/bash
看容器中有哪些文件
cd /usr/local ls
容器到操作系统(需要退出容器)
docker cp 容器名称:容器目录 需要拷贝的文件或目录
例如: docker cp mycentos2:/usr/local/a.txt ./
6.目录挂载
a.概念
将宿主机的目录与容器内的目录进行映射(共享)
b.命令
宿主机目录:容器目录
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
7.查看容器IP地址和信息
*信息
docker inspect mycentos3
*ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3
8.删除容器
docker stop mycentos3
docker rm mycentos3
docker rmi 6f5604be75c1
三 应用部署
1.mysql部署
a.拉取mysql镜像
docker pull centos/mysql-57-centos7
b.创建容器
#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 看是否映射成功
下面操作不用做
c.docker之mysql连接 Authentication plugin 'caching_sha2_password' cannot be loaded
1.docker exec -it mysql88 bash
2.mysql -uroot -p 密码
3.ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';
4.FLUSH PRIVILEGES;
2.Nginx部署
a.拉取镜像
docker pull nginx
b.创建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部署
a.拉取镜像
docker pull redis
b.创建容器
docker run -di --name=myredis -p 6389:6379 redis
docker exec -it myredis /bin/bash
4.docker安装tomcat
a.拉取镜像
docker pull tomcat
b.创建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.容器保存为镜像
a.命令
docker commit myredis my_redis_image
b.看当前系统的镜像
docker images
c.创建备份redis容器
docker run -di --name=my_redis_image_instance -p 6399:6379 my_redis_image
d.可以看到一个新的容器
docker ps
2.镜像备份
docker save -o my_redis_image.tar my_redis_image
3.镜像恢复与迁移
a.需要先删除原有镜像
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