Docker容器学习笔记(看了狂神视频)
创始人
2024-02-28 09:07:54
0

狂神的笔记更加系统详细,推荐大家可以去看狂神的视频教程和笔记。我这里仅根据我自己的需求写的笔记,对于需要快速掌握docker的使用的朋友可以参考学习。

Docker 背景需求

之前,开发一套环境,上线一套环境,环境配置十分麻烦。那么,就有一个美好的希望:发布一个项目时,能够带上环境。
在这里插入图片描述

Docker思想

来自于集装箱,具有隔离性!

容器技术

在容器技术出来之前,是使用虚拟机技术,笨重!

  • vm: linux centos 原生镜像(一个电脑)隔离,需要开启多个虚拟机。
  • docker: 隔离,镜像(最核心的环境4M+jdk+mysql),运行镜像就可以了,小巧!

镜像( image ) : docker镜像好比一个模板,可以通过这个模板来创建容器服务,例如:Tomcat镜像—>run----->tomcat容器(提供服务器),通过这个镜像可以创建多个容器(服务/项目运行就是在容器中)

容器(container)docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建(有启动,停止,删除等命令)

仓库(repository),公有,私有仓库

在这里插入图片描述

Docker安装

docker命令

systemctl start docker  启动docker
docker version	查看版本
docker images  显示镜像有哪些
docker info 显示docker的系统信息,包括镜像和容器数量
docker --help 万能帮助文档

镜像命令

docker images -q  只显示镜像id
docker search  搜索镜像
docker pull mysql 下载镜像
docker rmi -f $(docker images -aq)   删除镜像
docker rmi -f ***

容器的命令

有了镜像才可以创建容器。

docker run [参数]  镜像       新建容器并启动 
参数说明:
--name = 'xxx'  容器名字
-d   后台方式运行
-it   使用交互方式运行,进入容器查看内容
-p 指定容器端口:-p 8080:8080
-P 随机指定端口
exit   停止容器并退出
ctrl+p+q 不停止退出
docker ps 查看正在运行的容器
docker ps -a 列出所有运行的容器+曾经运行的容器
docker -q  只显示容器编号
 删除容器docker rm 容器iddocker rm -f $(docker ps -aq)  删除所有容器
启动和停止容器的操作
docker start 容器id
docker restart
docker stop
docker kill
docker run  -d 镜像名 #后台启动容器,容器启动后,发现自己没有提供服务,就会立刻停止。
docker logs -tf --tail lo 容器id # 查看日志
ps  查看容器中进程信息
docker top 容器id
docker inspect 容器id  查看镜像元数据
进入当前正在运行的容器
docker exec -it 容器id  /bin/bash   
docker attch 容器id
从容器内拷贝文件到主机
docker cp 容器id:容器内路径  目的主机路径

练习:docker 部署 nginx

在这里插入图片描述

docker pull nginx  #从仓库下载nginx镜像
docker images # 查看镜像列表
docker run -d --name nginx-01 -p 3344:80  nginx   # 用nginx镜像创建名字为nginx-01的容器,并后台运行,设置宿主机端口:容器内部端口 3344:80
docker ps  #查看
curl localhost:3344   #本机查看url端口号
docker exec -it nginx-01 /bin/bash  #进入容器
whereis ngnix
cd /etc/nginx
ls

练习:docker 部署 tomcat

docker pull tomcat:9.0  从仓库下载镜像
docker images  查看镜像
docker run -d -p 3355:8080 --name tomcat01 tomcat  创建并运行容器
docker exec -it tomcat01 /bin/bash  进入容器

可视化

portainer, docker的图形化界面管理工具。提供一个后台面板使用。
下载:

docker run -d -p 8088:9000 restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

docker镜像

镜像,是一种轻量级,可执行的独立软件包,包含运行某个软件所需要的所有内容。

如何得到镜像:

  • 从远程仓库下载
  • 朋友拷贝
  • 自己制作一个镜像 dockerfile

docker镜像加载原理

unionFS(联合文件系统)是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统unionFS。

分层理解

docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部! 这一层就是我们通常说的容器层,容器之下的都叫镜像层。
在这里插入图片描述
在这里插入图片描述

提交镜像

docker commit   -m=“提交的描述信息”  -a=作者  容器id  目标镜像名:tag

例子:

docker run -it -p 3355:8080 tomcat  运行tomcat镜像
docker exec -it 容器id  bin/bash  进入容器
做一些修改操作
docker commit -a="lulu" -m="add webapps app" 容器id tomcat02:1.0   将更改后的容器通过commit 提交为一个镜像

容器数据卷

需求背景:数据可以持久化,不再随着容器删除而丢失!
容器之间可以有一个数据共享的技术,docker容器中产生的数据同步到本地,这就是卷技术!
目录的挂载,将容器内的目录,挂载到linux上面,实现同步。
在这里插入图片描述

使用数据卷

方式一:直接使用命令来挂载(手动挂载)

docker run -it -v 主机目录:容器内目录  镜像名 /bin/bash

具名挂载 匿名挂载 指定路径挂载
-v 容器内路径! #匿名
-v 卷名:容器内路径 #具名
-v /宿主机路径::容器内路径 #指定路径挂载

练习:mysq同步数据

docker  pull mysql:5.7  获取镜像
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d  -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASS WORD=123456 --name mysql01 mysql:5.7  运行容器,需要做数据挂载,且mysq需要配置密码

Dockerfile

dockerfile 就是用来构建docker镜像的构建文件,即命令脚本。dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

dockerfile:构建文件,定义了一切的步骤,源代码
dockerImages:通过dockerfile构建生成的镜像,发布/运行的产品。
docker容器:镜像运行起来提供服务器。

dockerfile方式构建步骤:

  • 编写一个dockerfile文件
  • docker build 构建成一个镜像
  • docker run 运行镜像
  • docker push 发布镜像到仓库(DockerHub,阿里云等)

dockefile指令:

FROM  基础镜像,一切从这里开始
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建时需要运行的命令
ADD 步骤
WORKDIR  镜像的工作目录
VOLUME   挂载的目录
EXPOSE  保留端口设置
CMD  指定容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT  可追加命令
ONBUILD  当构建一个被继承dockerfile ,就运行
ENV  构建的时候设置环境变量

dockerfile语法要求:
每个关键字必须大写
每一个指令都会创建提交一个新的镜像层,并提交!

方式二:在dockerfile中 自动挂载数据卷

mkdir docker-test-volume
vim dockerfile1    #创建一个dockerfile文件,文件中的内容:指令参数
docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos:1.0  #构建镜像
docker run -it 镜像id /bin/bash  #运行镜像

Dockerfile实战

创建一个自己的centos

  1. 编写dockerfile文件:mydockerfile
FROM  centos
MAINTAINER lulu<123.qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo 'end........'
CMD /bin/bash
  1. 根据编写的dockerfile文件,构建镜像
docker build -f mydockerfile -t mycentos:0.1
  1. 基于镜像创建启动容器
docker run -it mycentos:0.1

制作tomcat镜像

  1. 准备镜像文件 tomcat压缩包,jdk压缩包
  2. 编写dockerfile文件,官方命名为‘Dockerfile’,build会自动寻找到这个文件
FROM  centos
MAINTAINER lulu<123.qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-***.tar.gz  /usr/local/
ADD tomcat***.tar.gz /usr/local/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME  /usr/local/jdk.8.0_11
ENV CLASSPATH  $JAVA_HOME /lib/
ENV CATALINA_HOME /USR/LOCAL/
ENV CATALINA_BASH
ENV PATH
RUN yum -y install vim
EXPOSE 8080
CMD /usr/local/apache-tomact-9.0  /bin/startup.sh && tail -F
  1. 构建
docker build -t diytomcat
  1. 启动
docker run -d p 9090:8080 --name lulutomcat -v /home/lulu/  :  /url/local/
  1. 访问测试
curl localhost 9090
  1. 发布项目(由于做了卷挂载,我们直接在本地编写项目,就可以发布了)

  2. 发布自己的镜像到仓库

Docker网络

理解docker0

linux 可以ping通docker容器内部,容器之间可以互ping通docker会给容器分配ip,docker有一个docker0网卡桥接模式,evth-pair技术,一对虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连,连接各种虚拟设备.
在这里插入图片描述

容器互联 --link (可以通过容器名互联)

–link 就是在hosts配置中增加了一个映射

docker run -d -p --name tomcat03 --link tomcat01 tomcat
docker exec -it tomcat03 ping tomcat02

自定义网络

docker network ls 
网络模式
bridge 桥接
none 不配置网络
host 和宿主机共享网络
container 容器网络连通

docker0 特点,默认,域名不能访问,–link 可以打通连接!
可以自定义一个网络

docker network create --driver bridge --subnet 192.168.0.0/16 --getway 192.168.0.1 mynet
docker network inspect mynet #查看自己的网络
docker run -d -p --name tomcat-net-01 --net mynet tomcat 
docker exec -it tomcat-net-01 ping tomcat-net-02

可以ping通
即自定义的网络,其包含的容器之间可以可以通过名字来ping通。

网络连接 : docker0 ,mynet

在这里插入图片描述

docker network connect mynet tomcat01
可以连通,原理:将tomcat01 放到了mynet网络下,一个容器两个ip地址。

Docker compose

Docker swarm

CI/CD jenkins

相关内容

热门资讯

《全民阅读促进条例》将施行,多... 一纸条例,用法治护航全民阅读;满城书香,焕发青春中国活力。近日,《全民阅读促进条例》(以下简称《条例...
原创 戴... 最近,关于前国脚戴琳的欠薪丑闻无疑是引发了球迷的持续关注,从10月25日,媒体人李平康率先爆料,晒出...
思想政治工作条例最新修订内容,... 思想政治工作条例最新修订内容,思想政治工作条例全文下载 思想政治工作条例最新修订,全文下载与深度解读...
CBA潜力赛为何打成“老将赛”... 计时钟归零,双方教练握手致意,观众开始退场,CBA联赛的正赛宣告结束。然而球场并未就此沉寂,替补席上...
“手术钻头断裂遗留患者体内”,... 12月21日,湖南祁阳市卫生健康局发布情况通报称,近日,有媒体报道祁阳市中医医院发生骨科手术钻头断裂...
代驾纠纷 代驾时撞伤行人、车辆发生故障…… 这些都和车主无关,应由代驾赔偿? 观点: 使用代驾服务并非将所有...
公司股东与妻子分居期间出轨女下... 近日据报道,宁夏永宁县人民法院一审查明公司股东李某乙在与妻子李某甲分居期间,与公司女员工马某某存在不...
动物学家、律师和创作者,Thi... 12月21日,以“一起·了不起”为主题的2025 ThinkPad黑FUN礼在京举办。活动现场,律师...
徐奇渊:扩内需与对外政策紧密相... 近日,中国海关总署发布了一组数据令人关注:2025年前11个月,我国货物贸易顺差达到1.08万亿美元...