Docker
docker工作目录:/var/lib/docker
安装
- 安装工具包
yum install -y yum-utils
- 配置阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum软件包索引
yum makecache fast
- 安装docker
yum install docker-ce docker-ce-cli containerd.io
- 启动docker
systemctl start docker
- 或者阿里云官网容器界面
卸载
- 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
- 删除资源
rm -rf /var/lib/docker
常用命令 及 配置阿里云镜像加速
版本信息docker version
系统信息docker info
删除资源rm -rf /var/lib/docker
rm -rf /var/lib/containerd
配置阿里云镜像加速
阿里云官网->容器镜像服务->加速器
镜像命令
docker images
-q
只查看所有镜像id
docker search xxx
搜索镜像
docker search xxx --filter=STARS=3000
搜索出来的镜像STARS大于3000
docker pull
下载镜像
docker pull mysql:5.7
指定版本下载
docker rmi
删除镜像
docker rmi -f 镜像id 镜像id 镜像id
根据id删除镜像
容器命令
(有了镜像才可以创建容器)
docker run image
启动镜像
--name="Name"
给容器起名,区分容器-d
后台方式运行-i -t / -it
交互方式运行-p 主机端口:映射端口
指定端口(常用)-e
环境配置
docker run -it centos /bin/bash
启动并进入容器
exit
容器停止退出
Ctrl+p+q
容器不停止退出
docker ps
列出正在运行的容器
docker create 镜像
创建容器
docker rm 容器id
删除容器(不能删除正在运行的容器)
docker start 容器id
启动容器
docker restart 容器id
重启容器
docker stop 容器id
停止当前运行的容器
docker kill 容器id
强制停止当前容器
docker inspect 容器id
查看容器详细信息
run == create + start
常用其他命令
docker logs
查看日志
docker top 容器id
查看容器中进程信息
docker inspect 容器id
查看容器内部信息
docker exec -it 容器id /bin/bash
进入当前正在运行的容器(开启新的终端)
docker attach -it 容器id /bin/bash
(进入正在执行的终端)
docker cp 容器id:/home/xxx /home
拷贝容器文件到主机上
与Nginx、Tomcat、ElasticSearch
Docker与Nginx
docker pull nginx
下载
docker run -d --name nginx01 -p 2333:80 nginx
启动(后台,别名:nginx01,端口2333->80)
docker exec -it nginx01 /bin/bash
进入nginx,交互式
只要开启阿里云的防火墙,不用开linux防火墙端口!!!
Docker与Tomcat
docker run -it --rm tomcat:9.0
启动(停止后自动删除)
Docker与ElasticSearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
十分耗内存!!!
可视化
-
Portainer :图像化界面管理工具
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
安装并启动(阿里云开8088,linux开9000)
docker run -d -p 8088:9000 portainer/portainer
-
Rancher
Docker镜像
轻量级、可执行的独立软件包。
所有应用,直接打包docker镜像,可以直接运行起来。
联合文件系统(UnionFS)
分层、轻量级、高性能的文件系统
镜像加载原理
分层理解
commit镜像
docker commit 容器Id
提交容器
- -m=“提交的描述信息”
- -a=“作者”
容器数据卷
容器持久化和同步操作。(在容器内新加文件,自动在主机中同步存储)
容器间也可以数据共享。
删除容器主机目录文件不丢失。(数据持久化)
使用数据卷
docker run -it -v 主机目录,容器内目录
挂载:-v
运行MySQL
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
具名和匿名挂载
-v 容器内路径
查看状态 docker volume
匿名挂载(容器内路径)docker run -d -p --name nginx01 -v /etc/nginx nginx
具名挂载(卷名:容器内路径)docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx nginx
卷的路径:/var/lib/docker/volumes
- ro 只读
- rw 可读可写
DockerFile:用来构建docker镜像的构建文件
dockerfile1:
FROM centos
VOLUME ["volume01", "volume02"]
CMD echo "----end-------"
CMD /bin/bash
新建镜像:docker build -f dockerfile1路径 -t 新镜像名:tag .
绑定镜像:docker run -it --name docker02 --volumes-from docker01 镜像名:tag
(docker01创建的数据同步到了docker02上(挂载))(镜像挂载镜像)
DockerFile
官方镜像是基础包,通常我们搭建自己的镜像。
- DockerFile:构建文件,定义了一切的步骤,源代码
- DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品
- Docker容器:容器就是镜像运行起来提供服务的
构建镜像步骤:
- 编写一个DockerFile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub、阿里云镜像仓库)
注意:
- 每个保留关键字都必须是大写字母
- 执行从上到下顺序执行
- # 表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交!
DockerFile文件指令:
FROM # 基础镜像
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤: tomcat镜像,这个tomcat的压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOST # 暴露端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个生效
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 时运行ONBUILD指令。触发指令
COPY # 类似ADD,将文件拷贝到镜像中
ENV # 构建的时候设置环境变量
构建自己的CentOS
DockerFile
----------------
docker build -f DockerFile文件 -t mycentos(镜像名):0.1(tag) .
构建自己的Tomcat
#DockerFile
FROM centos
MAINTAINER dongfang<xxxx@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk.tar.gz /usr/local
ADD tomcat.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORK $MYPATH
ENV JAVA_HOME /usr/local/jdk #JAVA环境配置
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASH /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/tomcat/bin/startup.sh && tail -F /url/local/tomcat/bin/logs/catalina.out
发布镜像到DockerHub
登录DockerHub:docker login -u xxx -p xxx
提交镜像:docker push 作者名/镜像名:tag
镜像改名:docker tag 镜像id 镜像名:tag
然后push
发布镜像到阿里云镜像服务
看官网
Docker 网络
每启动一个docker,分配一个IP,也多一个网卡
evth-pair
一对虚拟设备接口,成对出现,一段连着协议,一段彼此相连
它充当一个桥梁,连接各种虚拟网络设备
容器和容器之间可以ping通
容器互联 --link
通过服务名ping docker docker run -d -P --name tomcat02 --link tomcat01 tomcat
网络模式
- bridge 桥接
docker run -d -P --name tomcat01 --net brige tomcat
(默认) - none 不配置网络
- host 和宿主机共享网络
- container 容器网络互通
自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--driver bridge
方式:桥接
--subnet 192.168.0.0/16
子网地址
--gateway 192.168.0.1
网关
启动时通过:--net mynet
指定网络
网络连通
Docker 部署 Redis集群
创建网卡 docker network create redis --subnet xxx.xxx.xxx.xxx/16
SpringBoot与Docker
- 项目打包为jar,并移入主目录
- 添加Docker插件plugin
- 主目录新建Dockerfile文件
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- 将jar包和Dockerfile文件移入linux
- 构建镜像
docker build -t 新镜像名 .
- 运行镜像
docker run -d -P --name 容器名 镜像名