一 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
b.yum 包更新到最新(升级所有bai包同时也升级软件和系统du内核)
sudo yum update -y
vim /etc/sysconfig/network-scripts/ifcfg-ens33
改为ONBOOT=yes
c.安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
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:7 /bin/bash
# docker run:表示创建容器
# -it:表示运行容器并进入它的命令行
# --name=mycentos:给当前的容器命名
# centos:7: 使用该镜像创建
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
执行之后我们可以把每个容器都看成一个小电脑或者服务器
c.退出当前容器
exit
退出之后,容器也退出了,没有删除
d.创建后台容器(守护式方式创建容器)
docker run -id --name=mycentos2 centos:7
docker exec -it mycentos2 /bin/bash
退出之后容器没有退出
e.启动与停止容器
docker start mycentos2
docker stop mycentos2
5.文件拷贝
a.概念
把操作系统里面的文件拷贝到容器当中
b.命令
linux操作系统到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录
例如: 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 ./
6.目录挂载
a.概念
将宿主机的目录与容器内的目录进行映射
b.命令
docker run -id --name=mycentos3 -v /usr/local/mydata:/usr/local/mydata centos:7
进入cd /usr/local/mydata
touch a.txt
vim a.txt 编辑内容
进入容器看看内容
docker exec -it mycentos3 /bin/bash
cd /usr/local/mydata
ls
cat a.txt
exit
7.查看容器IP地址
docker inspect mycentos3
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3
8.删除容器
docker stop mycentos3
docker rm mycentos3
docker rmi 6f5604be75c1
三 应用部署
1.mysql部署
a.拉取mysql镜像
docker pull mysql
b.创建容器
#docker run -di --name=容器名字 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=mysql密码 镜像名称
docker run -di --name=mysql88 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
利用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容器
docker run -di --name=mynginx -p 80:80 nginx
3.redis部署
a.拉取镜像
docker pull redis
b.创建容器
docker run -di --name=myredis -p 6379:6379 redis
四 迁移与备份
1.容器保存为镜像
a.命令
docker commit myredis image_redis
b.看当前系统的镜像
docker images
c.创建备份redis容器
docker run -di --name=image_redis_instance -p 6380:6379 image_redis
d.可以看到一个新的容器
docker ps
2.镜像备份
docker save -o image_redis.tar image_redis
3.镜像恢复与迁移
a.需要先删除原有镜像
docker stop image_redis_instance
docker rm image_redis_instance
docker rmi image_redis
docker load -i image_redis.tar
docker images
五 Dockerfile
1.什么是Dockerfile
之前我们都是用的别人的镜像,如果我们想自己开发一个镜像就需要用到dockerfile
Dockerfile其实就是一个文本文件,由一系列命令和参数构成
2.操作步骤
a.创建目录
mkdir –p /usr/local/software
b.上传jdk-8u144-linux-x64.tar.gz文件到目录
c.创建dockerfile文件
vim Dockerfile
这里面的配置在最下面
d.执行命令构建镜像
docker build -t='jdk1.8' .
六 Docker私有仓库
1.拉取私有仓库镜像
docker pull registry
2.启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
3.访问地址
http://192.168.0.168:5000/v2/_catalog
4.镜像上传至私有仓库
docker tag redis 192.168.0.168:5000/pri_redis
5.再次启动私服容器
docker start registry
6.上传标记的镜像
docker push 192.168.0.168:5000/pri_redis
7.从私有仓库拉取镜像
a.找另外一条机器从私有仓库拉去镜像
修改配置文件
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"],
"insecure-registries":["192.168.0.168:5000"]
}
b.拉取私有仓库镜像
docker pull 192.168.0.168:5000/pri_redis
docker images
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER zhangqaing
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
docker pull很慢解决办法
https://blog.csdn.net/julien71/article/details/79760919