Docker的学习(下)
此教程基于【编程不良人】2021年最新Docker容器技术&Docker-Compose实战教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1ZT4y1K75K?p=1
官方文档地址:https://docs.docker.com/get-started/
中文文档地址:https://vuepress.mirror.docker-practice.com/
24.Docker Compose简介、安装
在linux中安装docker compose,首先输入
sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s -`uname -m` > /usr/local/bin/docker-compose
之后修改下载好的docker compose名字,
之后移动这么docker-compose到我们的/usr/local/bin目录下,因为这个目录已经配置了环境变量,我们之后就可以直接使用docker compose的命令,无须在配置环境变量,之后输入
sudo chmod +x /usr/local/bin/docker-compose
表示给予/usr/local/bin/docker-compose这个目录执行权限
之后查看docker compose是否安装成功
docker-compose -v
25.Docker Compose的第一个环境
首先我们在某个目录创建一个docker-compose.yml文件,之后打开该文件书写相关信息,
版本号为docker-compose的版本号,目前4.0以下的版本都可写,ports的书写建议用引号包起来,如将8080:8080改为"8080:8080",因为你使用的端口号小于60且没放到引号中,yaml会自动解析xx:yy 这种数字格式为60进制,可能会得到错误的结果。
附docker compose与docker引擎的对应版本:
保存文件,之后在该目录下输入docker-compose up 或者 dcoker-compose up -d (表示后台启动),发现不同服务的启动日志会以不同的颜色显示
注意:docker-compose up 启动的前提是你的docker compose文件名为docker-compose.yml,如果你的docker compose文件名不叫这个,则需要指定docker compose的名字,如 docker-compose -f 你的docker compose名字 up
之后我们通过浏览器访问8080端口和8083端口,结果如下
26.Docker Compose的命令模板
volumes
我们继续书写docker-compose.yml,使用自定义数据卷的方式将宿主机的/root/apps与容器的/usr/local/tomcat/webapps作映射,
之后运行docker-compose,我们输入docker-compose up ,发现tomcat已经将我们宿主机/root/apps下的所有文件都当作一个web应用进行部署了
我们继续书写docker-compose代码,使用自动创建数据卷的方式,此处需要注意的是,我们的数据卷需要先声明
之后重新运行docker-compose,我们输入docker volume ls 查看所有的数据卷,发现我们自动创建的数据卷tomcatwebapps并不叫tomcatwebapps,而是叫hello_tomcatwebapps,这是因为我们的docker-compose.yml所在的文件夹叫hello,docker-compose会将这个目录作为项目名自动拼接上。如果需要自定义项目名,可以通过 -p 项目名的形式进行启动docker-compose,
如 docker-compose -p apps(自定义项目名)up
我们也可以自定义,但是这种方式必须在启动服务之前手动创建这个数据卷,所有我们一般用默认的即可,即将true改为false
networks
我们继续书写docker-compose.yml文件,指定容器连接的网络
之后启动docker-compose,查看启动日志发现创建的是hello_hello网桥,即和volumes一样,docker-compose会将docker-compose.yml所在这个目录作为项目名自动拼接上
我们可以通过docker network ls 查看所有的网桥,我们不想加上项目名,继续书写docker-compose.yml文件,
但是使用这种方式后我们必须在启动服务时先创建这个网桥,dcoker network create -d bridge hello (创建hello网桥)
container_name
我们可以指定每个容器的名称,我们继续书写docker-compose.yml文件,
之后启动docker-compose,查看服务启动日志,发现名称已经改变
之后我们进入端口为8080的tomcat01容器的终端交互模式,并抓取tomcat02的内容,
ip a 查看ip地址:
environment
此处我们以配置mysql为例,我们继续打开docker-compose.yml文件
之后启动docker-compose,并使用navicat连接mysql数据库,新增一个数据库,之后进入所对应的数据卷,发现我们所创建的数据库test已经存在
command
此处我们以配置redis为例,我们继续打开docker-compose.yml文件
之后启动docker-compose,并使用RDM连接redis,新增一个数据,之后进入所对应的数据卷,发现我们持久化文件已经存在
27-28.Docker Compose回顾
29.Docker Compose模板命令总结
env_file
从文件中获取环境变量,可以为单独的文件路径或列表,可以用来替代environment,如我们如果直接在docker compose中的environment中书写mysql的密码,这样不安全。我们在docker-compose所在的目录下新建一个mysql.env文件,书写如下代码:
之后继续书写docker-compose文件,替换environment
depends_on
解决容器的依赖、启动先后的问题,继续书写docker-compose文件,
healthcheck
通过命令检查容器是否健康运行
以下表示对tomcat01这个服务在1分30s内对运行 cmd curl -f http://localhost 发起请求看是否能响应,重试次数为3次,超时时间为10s
sysctls
配置容器内核参数
用来修改容器中系统内部参数,并不是必须的,有些服务启动受容器内操作系统参数限制可能会无法启动必须通过修改容器中参数才能启动
ulimits
指定容器的ulimits限制值
总结:
30.Docker Compose中模板指令build的使用
首先,我们的dockerfile文件如下
之后编写docker-compose.yml文件,
之后输入docker-compose up 或 docker-compose -d (后台启动) up 启动docker-compose,
问题:为什么我们此处先写bulid能给我们先构建镜像在运行呢?
这是我们我们启动docker compose使用的是up指令,up指令非常强大,它能帮助我们构建镜像再运行
31.Docker Compose指令的使用
up
docker-compose up 表示启动所有服务
docker-compose up 服务名 表示启动某个服务
down
停止up命令所启动的容器,并移除网络,我们自己创建的网桥并不会移除,只会移除它自动创建的
exec
进入指定的容器
ps
列出项目中目前的所有容器
restart
重启项目中的服务
top
查看所有容器:
查看具体某个容器:
pause、unpause
暂停、恢复暂停的服务:
logs
docker-compose logs 查看所有的容器启动日志
docker-compose logs 容器名称 | 容器id 查看某个容器启动日志
32.Docker可视化工具Portainer的使用
首先我们输入 docker pull portainer/portainer ,之后启动portainer
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portianer_data:/data portainer/portainer
之后我们访问9000端口,我们需要先进行注册
之后我们选择连接本地的portainer
之后进入到主界面
我们点击进去就可以查看更多详情
网桥管理:
容器管理:
通过docker compose启动
我们也可以在docker-compose.yml文件中使用portainer
之后 docker-compose up 即可
喜欢请关注我
至此,我们的Docker的学习(下)就讲解完毕了,喜欢我的话可以关注我的微信公众号 我爱学习呀嘻嘻 ,不定期分享各类资源哦。
Docker的学习(上)
Docker的学习(中)
|