docker高级篇
一.dockerfile解析
1.dockerfile是什么
dockerfile是用来构建docker镜像的文本文件,是有一条条构建镜像所需的指令和参数构成的脚本
2.dockerfile常用保留字指令
FROM #基础镜像,当前镜像是基于哪个镜像的,指定一个已经存在的镜像模板,第一条必须是from
MAINTAINER #镜像维护者的姓名和邮箱地址
RUN #容器构建是需要运行的命令
EXPOSE #当前容器对外暴露的端口号
WORKDIR #指定在创建容器后终端默认登录进来的目录
USER #指定镜像以什么样的的用户去执行
ENV #用来在构建镜像过程中设置环境变量
ADD #将宿主机的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY #拷贝文件和目录到镜像中
VOLUME #容器数据卷,用于数据保存和持久化工作
CMD #指定容器启动后要干的事
ENTRYPONIT #指定一个容器启动是要运行的命令
3.实例
#创建dockerfile文件
vim Dockerfile
FROM centos
MAINTAINER heber<heber@123.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim
RUN yum -y install vim
#安装ifconfig
RUN yum -y install net-tools
#安装Java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#添加Java包
ADD Jdk-8u171-linux-x64.tar.gz /usr/local/java
#配置Java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:PATH
EXPOSE 8080
CMD echo $MYPATH
CMD echo 'success......ok'
CMD /bin/bash
4.构建
docker build -t 镜像名字:tag .
二.docker网络
1.查看docker网络模式
docker network ls
2.docker网络能干什么
容器间的互联和通信以及端口映射
3.网络模式
NETWORK ID NAME DRIVER SCOPE
1677316bdb64 bridge bridge local
00245e67ea1c host host local
0f92e90b63c4 none null local
bridge #为每一个容器分配,设置ip,并将容器连接到docker0
host #容器不会虚拟出自己的网卡,配置自己的ip,而是用宿主机的ip和端口
none #容器有独立的network namespace ,但是并没有对其进行网络分配
container #共享一个ip
三.docker_compose容器编排
1.是什么
docker_compose是docker官方开源项目,负责实现对docker容器集群的快速编排,多服务管理工具
2.能干嘛
用来管理容器实例
compose允许用户通过一个单独的docker_compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目
3.去哪里下
#官网下载
https://docs.docker.com/compose/install
#安装
curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o usr/local/bin/docker-compose
#授权
chmod +x /usr/local/bin/docker-compose
#测试安装
docker-compose version
#卸载
rm -f /usr/local/bin/docker-compose
4.conpose核心概念
#一个文件
docker-compose.yml
#两大要素
服务 #一个个应用容器实例
工程 #由一组关联的应用容器组成的完整业务单元,在docker-compose.yml文件中定义
5.compose常用命令
docker-conpose -h #查看帮助
docker-conpose up #启动所有docker-compose服务
docker-conpose up -d #启动所有docker-compose服务并后台启动
docker-conpose down #停止并删除容器,网络,卷,镜像
docker-conpose exec yml里面的服务id #进入容器内部实例
docker-conpose ps #展示当前编排过的运行的所有容器
docker-conpose top #展示当前编排过的容器进程
docker-conpose logs yml容器id #查看容器输出日志
docker-conpose config #检查配置
docker-conpose config -q #检查配置,有问题的才输出
docker-conpose start #启动服务
docker-conpose restart #重启服务
docker-conpose stop #停止服务
6.conpose编排微服务
#编写docker-compose.yml
vim docker-conpose.yml
version:"3" #版本
servers:
microSerice:
image:heber_docker:1.8 #选择镜像
container_name:ms01 #名字
ports: #端口
-"6001:6001"
volumes: #容器数据卷
- /app/microSerice:/data
networks: #网卡
- atguigu_net
depends_no: #备注需要的依赖
- redis
- mysql
redis:
image:redis:6.0.8 #选择镜像
ports: #端口
-"6379:6379"
volumes: #容器数据卷
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks: #网卡
- atguigu_net
command:redis-server /etc/redis/redis.conf
mysql:
image:mysql:5.7 #选择镜像
environment:
MYSQL_ROOT_PASSWORD:"123456"
MYSQL_ALLOW_EMPTY_PASSWORD:"no"
MYSQL_DATABASE:"db2022"
MYSQL_USER:"heber"
MYSQL_PASSWORD:"heber123"
ports: #端口
-"3306:3306"
volumes: #容器数据卷
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks: #网卡
- atguigu_net
command:--default-authentication-plugin=mysql_native_password #解决外部无法访问
networks: #创建网卡
atguigu_net
7.启动
#验证一下
docker-conpose config -q
#启动
docker-conpose up / docker-conpose up -d
8.停止
docker-conpose stop
四.docker_portainer
1.portainer是什么
是一款轻量级的应用,它提供了图形化界面,用于方便管理docker环境,包括单机环境和集群环境
2.安装
#官网
https://www.portainer.io/
#安装
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
3.访问
http://192.168.0.119:9000/
admin/admin123.
run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
##### 3.访问
```bash
http://192.168.0.119:9000/
admin/admin123.