IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker -> 正文阅读

[系统运维]docker

Docker

1. 概述

  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

2. Docker基本组成

  • 镜像

    ? docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

  • 容器

    ? Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建。

    ? 目前就可以把这个容器理解为就是一个简易的 Linux系统。

  • 仓库

    ? 仓库就是存放镜像的地方

3. 常用命令

1. 帮助命令

docker version       #显示docker的版本信息;
docker info          #显示docker的系统信息,包括镜像和容器的数量;
docker 命令 --help    #帮助命令 
# 帮助文档的地址: https://docs.docker.com/engine/reference/commandline/build/

2. 镜像命令

docker images      #查看所有本地主机上的镜像 可以使用docker image ls代替;
docker search      搜索镜像 
docker pull        下载镜像 docker image pull 
docker rmi         删除镜像 docker image rm

3. 容器命令

docker run 镜像id             新建容器并启动 
docker ps                    列出所有运行的容器 docker container list 
docker rm 容器id              删除指定容器 
docker start 容器id           #启动容器 
docker restart容器id          #重启容器 
docker stop 容器id            #停止当前正在运行的容器 
docker kill 容器id            #强制停止当前容器

4. 常用其他命令

docker run -d 镜像名                  后台启动命令
docker logs -t --tail n 容器id        查看n行日志
docker top 容器id                     查看容器进程信息ps
docker inspect 容器id                 查看镜像的元数据
docker exec -it 容器id bashshell      进入当前正在运行的容器
docker attach 容器id                  进入当前正在运行的容器
docker cp 容器id:容器内路径 主机目的路径       从容器内拷贝到主机上
  • 注意
  1. docker exec #进入当前容器后开启一个新的终端,可以在里面操作。(常用)

  2. docker attach # 进入容器正在执行的终端

5. 练习

  • 部署Nginx、tomcat
docker search nginx
docker pull nginx
docker ps
docker run -d --name -p 3344:80 nginx
curl localhost:3344             # 测试

查看正在运行的容器
在这里插入图片描述

进入docker容器

docker exec -it aa4bea3a7d1d  /bin/bash
exit

通过网站访问
C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20210714172125345.png

部署成功!

4. Docker 镜像

1. 镜像加载原理

  • 镜像是什么

    ? 镜像是一种轻量级、可执行的独立软件保,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某 个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件

    ? 将所有的应用和环境,直接打包为docker镜像,就可以直接运行。

  • Unions(联合文件系统)

    ? Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应 用镜像。

    ? 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

  • Docker镜像加载原理

    ? docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

    ? boots(boot file system), Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。

    ? rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等。

       由此可见对于不同的Linux发行版, boots基本是一致的, rootfs会有差別,因此不同的发行版可以公用bootfs;
       虚拟机是分钟级别,容器是秒级!
    

2. 分层理解

? 下载资源的时候,可以看到是一层层的在下载。

  • 为什么Docker镜像要采用这种分层的结构呢?

    	最大的好处,我觉得莫过于资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
    

    查看镜像分层的方式可以通过 docker image inspect 命令

3. commit镜像

? 所有的 Docker镜像都起始于一个基础镜像层,当进行修改或培加新的内容时,就会在当前镜像层之上,创建新的镜像层。

docker commit 提交容器成为一个新的副本

# 与git命令原理类似
docker commit -m="描述信息" -a=“作者” 容器id 目标镜像名:[TAG]
  • 实例 - 修改tomcat镜像包,并commit生成新的镜像包
# 1、启动一个默认的tomcat 
docker run -d -p 8080:8080 tomcat 
# 2、发现这个默认的tomcat 是没有webapps应用,官方的镜像默认webapps下面是没有文件的! 
docker exec -it 容器id 
# 3、拷贝文件进去 
cd -r wedapps.dist/* webapps
exit
# 4、将操作过的容器通过commit调教为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己 的一个修改的镜像。 
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG] 
docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0

docker commit -a=“kuangcheng” -m=“add webapps app” 291391e6d02c tomcat02:1.0

5. 数据卷

1. 什么是数据卷

  • 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化

  • MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地

  • 容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

  • 总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

2. 使用数据卷

  • 直接使用命令挂载 -v

**docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口 **

docker run -it -v /home/ceshi:/home centos /bin/bash -p 8080:8080

3. 实战:安装MySQL

# 获取mysql镜像 
docker pull mysql:5.7 
# 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点! 
# 参考官网hub 
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 
#启动我们得 
-d 后台运行 
-p 端口映射 
-v 卷挂载 
-e 环境配置 
-- name 容器名字 
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:5.7

实现了容器数据持久化的功能。

4. 具名和匿名挂载

  • 匿名挂载
# 匿名挂载 
-v 容器内路径! 
docker run -d -P --name nginx01 -v /etc/nginx nginx 

# 查看所有的volume的情况 
docker volume ls DRIVER VOLUME NAME local 33ae588fae6d34f511a769948f0d3d123c9d45c442ac7728cb85599c2657e50d local 
# 这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路劲! 
  • 具名挂载
# 具名挂载 
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx 
docker volume ls 

所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data下

如果指定了目录,docker volume ls 是查看不到的。

  • 常见的三种挂载
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载 
-v 容器内路径                 #匿名挂载 
-v 卷名:容器内路径            #具名挂载 
-v /宿主机路径:容器内路径      #指定路径挂载 docker volume ls 是查看不到的
  • 拓展
# 通过 -v 容器内路径: ro rw 改变读写权限 
ro #readonly 只读 
rw #readwrite 可读可写 
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx 
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx 
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

5. 数据容器卷

  • 多个MySQL同步数据!

  • 命名的容器挂载数据卷!

--volumes-from 
  • 测试:多个mysql实现数据共享
? ~ 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:5.7 ? ~ docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7 # 这个时候,可以实现两个容器数据同步!

容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!

6. Dockerfile

Dockerfile 就是用来构建docker镜像的构建文件

1. 创建自己的镜像centos

  • 脚本语言
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile 
# 文件中的内容 指令(大写) 参数 
FROM centos 
VOLUME ["volume01","volume02"] 

CMD echo "----end----" 
CMD /bin/bash 
#这里的每个命令,就是镜像的一层!
  • 创建镜像
docker build -f dockerfile1 -t centos_kc
  • 查看一下卷挂载
docker inspect 容器id

2. Docker常用指令

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。

Docker容器:容器就是镜像运行起来提供服务。

  • 常用指令
FROM               # 基础镜像,一切从这里开始构建 
MAINTAINER         # 镜像是谁写的, 姓名+邮箱 
RUN                # 镜像构建的时候需要运行的命令 
ADD                # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录 
WORKDIR            # 镜像的工作目录 
VOLUME             # 挂载的目录 
EXPOSE             # 保留端口配置 
CMD                # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 
ENTRYPOINT         # 指定这个容器启动的时候要运行的命令,可以追加命令 
ONBUILD            # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY               # 类似ADD,将我们文件拷贝到镜像中 
ENV                # 构建的时候设置环境变量!

3 .实战 创建自己的centos

原先的centos,没有基本的vim、ipconfig指令

创建自己的centos

 # 1.编写Dockerfile文件 
 vim mydockerfile-centos 
 FROM centos 
 MAINTAINER cheng<1204598429@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  
 
 # 2、通过这个文件构建镜像 
 # 命令 docker build -f 文件路径 -t 镜像名:[tag] . 
 docker build -f mydockerfile-centos -t mycentos:0.1 .
docker images     # 查看镜像
docker run -it --name mycentos mycentos:0.1 /bin/bash   # 运行并进入容器
  • CMD 和 ENTRYPOINT区别
CMD                # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替 代。
ENTRYPOINT         # 指定这个容器启动的时候要运行的命令,可以追加命令

4. 实战:Tomcat镜像

自己写一个Tomcat镜像,并提交

  1. 准备镜像文件

    准备tomcat 和 jdk到当前目录,编写好README 。

  2. 编写dockerfile

FROM centos 
MAINTAINER cheng<1204598429@qq.com> 
COPY README /usr/local/README #复制文件 

ADD jdk-8u231-linux-x64.tar.gz /usr/local/ #复制解压 
ADD apache-tomcat-9.0.35.tar.gz /usr/local/ #复制解压 

RUN yum -y install vim 
ENV MYPATH /usr/local #设置环境变量 
WORKDIR $MYPATH #设置工作目录 
ENV JAVA_HOME /usr/local/jdk1.8.0_231 #设置环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35 #设置环境变量 
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib #设置环境变量 分隔符是: 

EXPOSE 8080 #设置暴露的端口 

CMD /usr/local/apache-tomcat-9.0.35/bin/startup.sh && tail -F /usr/local/apache- tomcat-9.0.35/logs/catalina.out # 设置默认命令
  1. 构建镜像
# 因为dockerfile命名使用默认命名 因此不用使用-f 指定文件 
docker build -t mytomcat:0.1 .
  1. run镜像
docker run -d -p 8080:8080 --name tomcat01 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test - v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.35/logs mytomcat:0.1
  1. 访问访问测试

  2. 发布项目

我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!

5. 发布自己的镜像

1. docker公共仓库

  1. 注册 https://hub.docker.com/
  2. 登录
docker login -u username -p password
  1. 提交镜像
docker push mytomcat

注意:

# 会发现push不上去,因为如果没有前缀的话默认是push到 官方的library 
# 解决方法 
# 第一种 build的时候添加你的dockerhub用户名,然后在push就可以放到自己的仓库了 
docker build -t chengcoder/mytomcat:0.1 . 
# 第二种 使用docker tag #然后再次push 
docker tag 容器id chengcoder/mytomcat:1.0 #然后再次push

2. 阿里云镜像服务

容器镜像服务 (aliyun.com)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mnq0xbyY-1626355538067)(问题总结.assets/image-20210715212418067.png)]

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:42:51  更:2021-07-16 11:45:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 11:09:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计