首页 > 其他分享 >Docker学习总结

Docker学习总结

时间:2022-09-05 19:44:25浏览次数:90  
标签:总结 容器 tomcat 学习 镜像 Docker root docker

Docker学习总结

docker其实就是帮助我们在linux上安装各种软件的小帮手。我是这么认为的哈,他里面引入了两个概念,镜像和容器,镜像就是我们所要安装的软件,只不过是docker所需要的格式,容器就是镜像运行的地方。相当于一个小型linux系统。


Docker初识

- Docker是一个开源的应用容器引擎,官网:https://www.docker.com
- 诞生于2013年初,基于Go语言实现, dotCloud公司出品(后改名为Docker Inc)
- Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
- 容器是完全使用沙箱机制,相互隔离。

 

* 仓库(Repository):
    - 仓库是集中存放镜像文件的场所。
    - 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
    
* 镜像(Image)
    - 就是一个只读模板,比如:一个镜像可以包含一个完整的CentOS,里面仅安装jdk或用户的其他应用。
    - 镜像可以用来创建docker容器。

* 容器(Container):
    - 镜像和容器的关系,就像是Java中的类和对象一样。
    - 容器是从镜像创建的运行实例,它可以被启动、停止、 删除。
    - 每个容器都是相互隔离的、保证安全的平台。
    - 可以把容器看做是一个简易版的Linux 环境(包括root用户权限、进程空间、用户空间)和运行在其中的应用程序。

 


基于CentOS 7安装Docker:

  1. # 1、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
  2. yum install -y yum-utils device-mapper-persistent-data lvm2
  3. # 2、设置yum源
  4. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5. # 3、安装docker,出现输入的界面都按 y
  6. yum install -y docker-ce
  7. # 4、查看docker版本,验证是否验证成功
  8. docker -v
  9. # 5、启动docker环境
  10. systemctl start docker
  11. # 6、设置开机自启动
  12. systemctl enable docker

配置镜像加速器

默认情况下,将来从docker hub(Docker Hub)上下载docker镜像,太慢。一般都会配置镜像加速器:

创建或修改 /etc/docker/daemon.json文件,修改为如下形式:

  1. # 中国科技大学镜像地址
  2. {
  3. "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
  4. }
  5. # 网易云镜像地址
  6. {
  7. "registry-mirrors":["http://hub-mirror.c.163.com"]
  8. }
  9. # 阿里云镜像,需要自己手动生成的加速地址:https://cr.console.aliyun.com/
  1. # 重启docker
  2. systemctl restart docker
  3. # 查看是否成功
  4. docker info

Docker常用命令(重点)

进程相关命令

  1. # 启动服务
  2. systemctl start docker
  3. # 停止服务
  4. systemctl stop docker
  5. # 重启服务
  6. systemctl restart docker
  7. # 查看服务的状态
  8. systemctl status docker
  9. # 设置开机自启动
  10. systemctl enable docker

镜像相关命令

  1. # 查看本地镜像
  2. docker images
  3. # 搜索镜像仓库,推荐:https://hub.docker.com/
  4. docker search 镜像名称
  5. # 下载(拉取)镜像,镜像名称格式为 名称:版本号
  6. docker pull 镜像名称
  7. # 删除镜像(慎重)
  8. docker rmi 镜像名称

容器相关命令

  1. # 查看本地容器
  2. docker ps # 能查看正在运行
  3. docker ps -a # 能查看所有的容器(运行的和停止的)
  4. # 创建一个新的容器并运行(-d 后台运行容器,并返回容器ID -p 主机端口:容器端口 指定映射关系)
  5. docker run -d -p 80:80 --name=容器名 镜像名称
  6. # 进入容器内部
  7. docker exec -it 容器名称 /bin/bash
  8. # 查看容器信息
  9. docker inspect 容器名称
  10. # 启动容器
  11. docker start 容器名称
  12. # 停止容器
  13. docker stop 容器名称
  14. # 删除容器
  15. docker rm 容器名称

 

如果服务器提示你

说明你的linux服务关闭了请求转发功能, docker容器访问一般是需要做转发的,怎么开启呢?

修改文件vim /usr/lib/sysctl.d/00-system.conf,在最后追加一行net.ipv4.ip_forward=1

改完之后需要重启网络服务systemctl restart network

 


Docker部署程序

部署MySQL

  1. # 搜索mysql镜像
  2. docker search mysql
  3. # 拉取mysql镜像
  4. docker pull mysql:5.7
  5. # 创建并启动容器
  6. docker run -d -p 3306:3306 --name=mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 \
  7. --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

部署Tomcat

  1. # 搜索tomcat镜像
  2. docker search tomcat
  3. # 拉取tomcat镜像
  4. docker pull tomcat:8.5
  5. # 创建并启动容器
  6. docker run -d --name=tomcat8.5 -p 8080:8080 tomcat:8.5
  7. # 在本地模拟一个项目(创建一个hello目录,然后向目录中输出一个文件index.html,内容为hello world)
  8. mkdir ./hello
  9. echo "hello world" > ./hello/index.html
  10. # 从宿主机复制文件到容器(docker cp 宿主机路径 容器名称:容器路径)
  11. docker cp ./hello tomcat8.5:/usr/local/tomcat/webapps/

部署Redis

  1. # 搜索redis镜像
  2. docker search redis
  3. # 拉取redis镜像
  4. docker pull redis:5.0
  5. # 创建并启动容器
  6. docker run -d --name=redis5.0 -p 6379:6379 redis:5.0

 

部署Nginx

  1. # 搜索nginx镜像
  2. docker search nginx
  3. # 拉取tomcat镜像
  4. docker pull nginx
  5. # 创建并启动容器
  6. docker run -d --name=nginx -p 80:80 nginx

DockerCompose

Compose介绍

* 在以后的开发中,可能存在同一环境中出现多个程序的情况,这些程序都会单独的作为容器启动,比如说:
    container-order  订单程序
    container-user   用户程序
    container-redis  redis
    container-mysql  mysql
* 这些容器需要同时启动,同时停止,如果我们一个个的去操作,就会变的很麻烦,这时候我们就需要一个批量操作容器的工具


* Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用
* Compose通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景

 

Compose安装

  1. # 安装docekr compose 工具
  2. curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  3. # 设置权限
  4. chmod +x /usr/local/bin/docker-compose
  5. # 查看版本
  6. docker-compose -version

Compose案例

通过docker compose进行容器批量管理:一次性启动三个容器(nginx,tomcat,redis)

1) 创建docker-compose目录

  1. mkdir ~/docker-compose
  2. cd ~/docker-compose

2) 创建docker-compose.yml文件,内容如下

  1. version: '3'
  2. services:
  3. nginx:
  4. container_name: my_nginx
  5. image: nginx
  6. ports:
  7. - 80:80
  8. tomcat:
  9. container_name: my_tomcat
  10. image: tomcat:8.5
  11. ports:
  12. - 8080:8080
  13. redis:
  14. container_name: my_redis
  15. image: redis:5.0
  16. ports:
  17. - 6379:6379

3) 启动容器

  1. # 为了演示效果更佳明显,我们使用下面命令先停止并删除所有容器
  2. docker stop $(docker ps -q)
  3. docker rm $(docker ps -aq)
  4. # 执行命令,启动容器
  5. # 执行此命令的时候,需要和配置文件在同一个目录下
  6. docker-compose up -d

4) 停止并删除容器  

  1. # 执行此命令的时候,需要和配置文件在同一个目录下
  2. docker-compose down


 

Docker数据卷(重点)

数据卷概念

思考这样两问题:

  • Docker容器删除后,容器中的数据会不会永久丢失,如果是,岂不是很危险?

  • 容器之间可不可以实现文件的共享呢?

数据卷:

  • 数据卷是宿主机中的一个目录或文件,它可以被挂载到容器中,在容器中对它的操作可以直接反应到宿主机上

  • 一个容器可以被挂载多个数据卷,一个数据卷也可以被多个容器同时挂载

 

 

配置数据卷

 

  1. # 在/root目录下创建tomcat目录用于存储tomcat数据信息
  2. mkdir -p /root/tomcat/webapps
  3. # 创建容器,设置端口映射、目录映射
  4. # docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
  5. docker run -d --name=tomcat1 -p 8081:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
  6. docker run -d --name=tomcat2 -p 8082:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5

Docker镜像制作

镜像构成

Docker镜像是一个分层文件系统,最底端是bootfs,它会直接使用宿主机的bootfs;第二层是root文件系统rootfs,称为base image

然后再往上可以叠加其他的镜像文件,一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。

 

 

使用容器制作镜像

docker允许将一个容器直接转化为镜像,使用的命令如下:

docker commit 容器id 镜像名称:版本号

 案例:修改当前的nginx容器中的index.html文件内容为hehe,然后将修改后的容器做成一个名为mynginx:hehe的镜像

  1. #1. 查看当前正在运行的容器
  2. [root@itcast ~]# docker ps
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. 0ce0bf14399d nginx "/docker-entrypoint.…" 14 hours ago Up 14 hours 0.0.0.0:80->80/tcp nginx
  5. #2. 进入nginx容器,然后向主页面覆盖写入"hehe",然后退出容器
  6. [root@itcast ~]# docker exec -it nginx /bin/bash
  7. root@0ce0bf14399d:/# echo "hehe" > /usr/share/nginx/html/index.html
  8. root@0ce0bf14399d:/# exit
  9. #3. 将修改之后的容器生成为mynginx:hehe镜像
  10. [root@itcast ~]# docker commit nginx mynginx:hehe
  11. sha256:139a9ea6a6008bc5557566e54316ccd8b93f508dba1daf7296235a461c8d471e
  12. #4. 查看镜像
  13. [root@itcast ~]# docker images
  14. REPOSITORY TAG IMAGE ID CREATED SIZE
  15. mynginx hehe 139a9ea6a600 8 seconds ago 133MB

 

 

使用Dockerfile制作镜像

Dockerfile是一个用于描述生产docker镜像的文件,它里面是一条条的指令,每条指令都会对镜像产生一定影响。

 

案例:基于jdk1.8环境运行springboot项目,打包为镜像  

 1) 将springboot-hello-0.0.1-SNAPSHOT.jar上传到linux

 2)创建一个springboot-dockerfile文件,内容如下

 

  1. # 定义基础镜像(从哪个镜像的基础上开始做)
  2. FROM java:8
  3. # 定义作者信息(可以省略)
  4. MAINTAINER itheima <[email protected]>
  5. # 将jar包添加到容器,并改名为app.jar
  6. ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
  7. # 镜像启动容器的时候,执行的命令
  8. CMD java -jar app.jar

3) 通过dockerfile构建镜像

  1. # -f :指定要使用的Dockerfile路径 -t :指定生成的镜像名称 . 镜像构建过程中的上下文环境的目录
  2. docker build -f ./springboot-dockerfile -t app-itheima .

4) 查看生成的镜像,并运行为容器

  1. [root@itcast ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. app-itheima latest 663f3e3e33fb 35 minutes ago 661MB
  4. [root@itcast ~]# docker run -d -p 18080:8080 app-itheima:latest
  5. 5ea166a3dbec4c091d7a70f84b75703f55a9ccd93f3a45466e4eeb9ac56fdb17
  6. [root@itcast ~]#
  7. [root@itcast ~]# docker ps
  8. CONTAINER ID IMAGE COMMAND CREATED PORTS NAMES
  9. 5ea166a3dbec app-itheima:latest "/bin/sh -c 'java -j…" 7 seconds ago 0.0.0.0:18080->8080/tcp serene_antonelli

5)访问测试  

镜像导入导出(扩展)

需求:将mynginx:hehe镜像共享给其他人,或者是将别人共享给的镜像包导入到系统中

  1. # 将镜像保存成tar包: docker save -o 包名 镜像:版本
  2. [root@itcast ~]# docker save -o mynginx.tar mynginx:hehe
  3. [root@itcast ~]# ls
  4. mynginx.tar
  5. # 接下来删除我们本地的mynginx:hehe镜像
  6. [root@itcast ~]# docker rmi mynginx:hehe
  7. Untagged: mynginx:hehe
  8. Deleted: sha256:0121bd7115b67719cc215cea3c2a2b090c0a42a1d70cbd46d4d243fa9c8b0edd
  9. # 然后再从tar包中将镜像导入到本机
  10. [root@itcast ~]# docker load -i mynginx.tar
  11. Loaded image: mynginx:hehe

Docker和VM对比【了解】

 

相同:

  • 容器和虚拟机具有相似的资源隔离和分配优势

不同:

  • 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。

  • 传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统

特性容器虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
CPU/内存消耗
系统支持量单机支持上百个容器一般十几个

 

https://blog.csdn.net/weixin_65549694/article/details/125766861

标签:总结,容器,tomcat,学习,镜像,Docker,root,docker
From: https://www.cnblogs.com/sunny3158/p/16659323.html

相关文章

  • 2022-09-05 第四小组 王星苹 学习笔记
    学习心得简单的做一个java里面要连接网页和数据库实现注册,主要是代码,建议先写好工具类,这样之后写东西的时候直接就可以用了,比如新学的密码加密的盐的工具类,之前的JDBC工具......
  • ar智慧教育大屏互动系统提升学习趣味和效率-深圳华锐视点
    AR大屏互动又称体感AR互动,是通过硬件大屏显示屏幕、体感互动系统软件以及三维数字内容,通过感应装置来感应站在大屏前的参与者的动作手势时,大屏里面的内容变随着参与者......
  • 随便记录一下db2 docker
    随便记录一下db2docker,目前还不知道怎么在启动时自动执行sql创建表和插入数据。docker-compose.ymlfiledb2:image:ibmcom/db2privileged:trueenviro......
  • Markdown基础使用学习
    MarkDown学习标题:#+标题名字二级标题:##+标题名字三级... 字体两个*+字+两个=加粗一个=斜体引用一个大于号+内容 图片!【图片名字】(路径)符号全部小写 ......
  • SQL*LOADER错误总结
    copy自:SQL*LOADER错误总结在使用SQL*LOADER装载数据时,由于平面文件的多样化和数据格式问题总会遇到形形色色的一些小问题,下面是工作中累积、整理记录的遇到的一些形形色色......
  • Django学习笔记
    Django本篇博客是我在B站学习的笔记。B站教程地址Django介绍起源2005年发布,采用Python语言编写的开源框架。早期的时候Django主做新闻和内容管理的重量级的Python......
  • Java学习-第一部分-第二阶段-第八节:IO流
    IO流笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)IO流体系图文件什么是文件文件.对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文......
  • 【博学谷学习记录】超强总结,用心分享|狂野架构师SpringCloud-Gateway
    目录SpringCloudGateway的工作流程Gateway动态路由配置中基于Path的路由方式过滤器分类常见默认过滤器添加响应头前缀处理增加前缀自定义过滤器1、实现GatewayFilter接口2......
  • docker安装和简易使用教程
    安装在安装docker之前需要的安装包sudoapt-getupdatesudoapt-getinstall\apt-transport-https\ca-certificates\curl\gnupg\......
  • Redis总结
    Redis底层数据结构当数据量小,通过数组实现的压缩数据结构用下标访问更快;当数据量大,维护数组的元数据占用空间随之增长,所以使用普通存储redis支持<string,valu......