1.Docker技术简介
- Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。
帮忙启动容器。 - 设计思想:分而治之,每个容器启动后分配一个唯一的命名空间
Docker官网
无需部署环境
镜像官网
劣势:性能稍差
2. Docker架构(CS)
- Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
执行流程
- 命令
docker build 打包
docker pull
docker run
3. Docker安装实践
3.1查看Linux的ip地址
前提是已经安装虚拟机
3.2 创建终端
以上三个文件下载地址
下载docker离线包
下载离线安装工具
3.3 查询文件
3.4增加安装权限
3.5 安装docker到Linux
4. Docker服务基本实现(Linux)
systemctl start docker 启动docker服务
systemctl status docker 查看Docker状态
systemctl stop docker 关闭docker服务
systemctl enable docker 设置Docker开机自启
systemctl disable docker 禁用Docker开机自启
systemctl restart docker 重新启动Docker服务
docker info 查看Docker信息
docker info | grep 'Docker Root Dir:' 查看docker info中具体key的信息
ps -ef | grep docker 查看进程
5.镜像加速
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
6. 镜像操作
docker pull hello-world 下载镜像
docker images 查看镜像
docker run hello-world 运行镜像
卸载镜像
docker image rm hello-world
显示容器正在使用
此时需要关闭容器
docker container re 52a
删除镜像
docker container rm hello-world
查看所有容器
docker ps -a
下载镜像(pull),如果本地镜像没有,则需要从远程镜像中下载
查看镜像历史
docker history hello-world
导出镜像文件
docker save hello-world | gzip > hello-world.tar.gz
导入镜像操作
docker load < hello-world.tar.gz
导出镜像文件到images目录
此时只能在Linux系统使用,Windows下使用需要Download
7. 容器操作
创建并启动容器 打开交互模式
docker run -it centos:7 bash
删除容器
docker container rm 802 #802为容器id
强制删除
docker container rm -f 802 #802为容器id
清除所有容器
docker container prune
8. Docker数据管理实践
在容器中管理数据的方式 数据卷(Volumes)、挂载主机目录 (Bind mounts)
数据卷
命令:
查看数据卷目录 docker volume ls
创建数据卷 docker volume create container-vol
查看数据卷信息 docker volume inspect container-vol
删除数据卷 docker volume rm container-vol
在启动容器时,以目录直接挂载的方式进行数据操作 docker run -it -v container-vol:/cgb2107 centos:7 bash
挂载的目的是删除容器数据不丢,相当于备份,数据卷仍存在
挂载主机目录
docker run -it -v /app:/container centos:7 bash
9. Dockerfile及镜像制作实践
创建Dockerfile文件
vim Dockerfile编辑
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
查看文件
在Dockerfile所在目录执行docker build指令
查看镜像
运行镜像、查看java版本 基于镜像启动容器
基于JDK镜像启动sentinel
docker run -d -p 8180:8080 --name sentinel \
-v /root/servers:/usr/sca \
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.1.jar
sentinel运行在基于jdk:8容器的基础上,所以可以放在一起创建镜像
9.镜像安装实践
进入容器登录mysql
创建目录和文件
创建redis实例并启动
拖入镜像
导入镜像
创建数据卷
启动nginx服务
访问成功
10. 容器互联实践
方案:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
创建网络
docker network create t-net
docker run -it --name app1 --network t-net centos:7 启动容器
实现容器互联互联