Docker概述
Docker为什么出现?
问题:在我的电脑上可以运行 ? 环境配置
现在:开发打包部署上线,一套流程做完!
Docker安装
Docker的组成
镜像(image):
docker镜像就好比使一个模板,可以通过这个模板来创建容器服务,tomcat镜像===> run=> tomcat01容器 (提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建。
启动、停止、删除,基本命令!
目前就可以把这个容器理解为是一个简易的linux系统
仓库(repository):
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub(默认是国外的)
阿里云…. 都有容器服务器(配置镜像加速!)
安装Docker
环境准备
1、会一点linux的基础
2、CentOS 7
3、使用Xshell连接远程服务器进行操作!
环境查看
# 系统内核是 3.10 以上的
[root@mfei ~]# uname -r
3.10.0-1127.19.1.el7.x86_64
安装文档:https://docs.docker.com/engine/install/centos/
配置镜像加速
卸载docker
#1、卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
#2、删除资源
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Docker常用命令
https://docs.docker.com/engine/reference/run/
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker version # 显示docker的版本信息
docker 命令 --help # 帮助命令
镜像命令
docker search # 搜索
docker image
-a # 列出所有的镜像
-q # 只显示镜像id
docker pull # 下载镜像,默认最新版
docker pull mysql:5.7 # 指定版本下载
docker rmi -f 镜像id # 删除镜像
docker rmi -f $(docker images -aq) # 批量删除
docker
容器命令
docker run --help
docker run [可选参数] image
# 参数说明
--name="Name" 容器名称 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行
-p 指定容器的端口
-P 随机指定端口
docker run -it centos /bin/bash
exit 从容器中退出主机
docker ps 当前正在运行的容器
docker ps -a 所有包括历史运行的容器
docker ps -n=? 显示最近创建的容器(个数)
-q 只显示容器的编号
docker rm 容器id 只能删除退出的容器
docker rm -f $(docker pa -aq) 删除全部容器
docker ps -a -q|xargs docker rm 删除所有的容器
inspect 查看容器的一些细节
退出容器
exit # 容器停止并退出
CTRL+P+Q # 容器不停止并退出
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前运行的容器
docker kill 容器id # 强制停止当前容器
常用的其他命令
docker run -d 镜像名
# 问题docker ps,发现centos停止了
# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了
docker top 容器id # 查看容器的进程信息
docekr inspect 容器id # 查看容器元数据
进入当前正在运行的容器
# 通常容器都是使用后台方式进行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id /bin/bash
# 方式二
docker attach 容器id
# 区别
# docker exet # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器中拷贝到主机
docker cp 容器id:容器内路径 目的地主机路径
如何提交一个自己的镜像
commit镜像
docker commit 提交一个容器成为一个新的副本
# 命令和git原理类似
docker commit -m="提交的信息" -a="作者" 容器id 目标镜像名:[TAG]
容器数据卷
方式一:直接使用命令来挂载 -v
# 测试
docker run -it -v/home/ceshi:/home centos /bin/bash
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
拓展
# 通过 -v 容器内的路径:ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 可读可写
初始Dockerfile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本!
通过脚本可以生产镜像
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end-----"
CMD /bin/bash
docker build -f dockerfile1 -t /home/docker-test-volume/dockerfile1 -t kuangshen/centos:1.0 .
数据卷容器
多个mysql同步数据!!
docker run -it --name docker02 --volumes-from docker01 kuangshen/centos:1.0
Dockerfile
Dockerfile是用来构建docker镜像的文件! 命令参数脚本!
构建步骤:
1、编写一个dockerfile文件
2、docker build构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)
Dockerfile构建过程
基础知识:
1、每个保留关键字(指令)都必须是大写形式
2、执行从上到下运行
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供的服务器
DockerFile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFile 这个时候会运行INBUILE 的指令,触发指令
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量
创建一个自己的centos
# 1、编写Dockerfile的文件
FROM centos
MAINTAINER kuangshen<@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yun -y install vim
RUN yun -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
# 2、通过这个文件构建镜像
# 命令docker build -f dockerfile文件路径 -t 镜像名:[tag]
# 3、测试运行
发布镜像
DockerHub
阿里云镜像仓库
Docker 网络
查看所有的docker‘网络
docker network ls
网络模式
bridge:桥接docker(默认)
none:不配置网络
host:和宿主机共享网络
container:容器内网络连通
# 自定义一个网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# docker run -d -P --name tomcat-net-01 --net mynet tomcat
# docker run -d -P --name tomcat-net-02 --net mynet tomcat
网络连通的操作
docker network connect mynet tomcat01
实战:部署一个redis集群
# 1、创建一个网卡
docker create redis --subnet 172.38.0.0/16
# 2、查看服务
docekr network ls
# 狂神docker38节
springboot微服务打包docker镜像
Docker Compose
参考文档:https://docs.docker.com/compose/
简介:
之前使用docker时,通常使用dockerFile文件,然后docker build 、 docker run,手动操作,单个容器。微服务,100个微服务!依赖关系
Docker compose 来轻松高效的管理容器!定义运行多个容器
官方文档介绍
作用:批量容器编排
docker-compose.yml
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
安装
1、官网的下载地址,下载的特别慢 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
1、国内的镜像,
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、
2、授权
sudo chmod +x /usr/local/bin/docker-compose
3、体验
流程:
- 创建网络
- 执行Docker-ciompose.yaml
- 启动服务
yaml规则
https://docs.docker.com/compose/compose-file/compose-file-v3/
# 3 层
version: '' # 版本
service: # 服务
服务1: web
# 服务配置
images
build
network
depends_on # 依赖
......
服务2: redis
......
服务3: