Docker_学习记录1

Docker简介

Docker概述

image

Docker:一次镜像,处处运行 -- 保证运行环境相同
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟

Docker的三要素:镜像(image), 容器(container), 仓库(repository)
镜像:静态的,不可修改
容器:有镜像创建
仓库:存放镜像的地方,docker hub等

Docker运行原理

image

Docker run helloworld实现流程:
image

阿里云镜像仓库:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

卸载Docker,出现无法删除/var/lib/docker的问题:

参考:

  1. https://blog.csdn.net/qq_28284093/article/details/80117367
  2. https://docs.docker.com/engine/install/ubuntu/

image




Docker常用命令

帮助启动类命令

启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
设置开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 -help

镜像命令

docker images

  • 列出本地所有的镜像
  • OPTIONS说明:-a 列出本地主机上的镜像 ;-q:只显示镜像ID

docker search 某个xx镜像名字

  • 网站:https://hub.docker.com
  • docker search [options] image_name
  • OPTIONS说明:
    • --limit:只列出N个镜像
    • docker search --limit 5 redis

docker pull 某个xx镜像名字

  • docker pull image_name [:TAG]
  • 未标注TAG,则下载默认的最新版(:latest)
  • docker pull redis
  • docker pull redis:6.0.8

docker system df:查看镜像/容器/数据卷所占的空间
docker rmi 某个xxx镜像名字/镜像ID

  • remove images
  • 删除多个镜像:docker rmi image1 image2 ……
  • 删除全部镜像:docker rmi -f $(docker images -qa)

面试题:谈谈docker虚悬镜像是什么?

  • 仓库名和标签均为<none>
  • image

容器命令

  1. 新建+启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • OPTIONS说明:启动交互式容器(前台命令行)
  • image
  • -it 选项
  • image
  • image
  1. 列出当前正在运行的容器:docker ps [optins]
  • image
  1. 退出容器
  • exit:run进去容器,exit退出,容器停止
  • ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
  1. 启动已停止运行的容器 -- docker start 容器ID或者容器名
  2. 重启容器 -- docker restart 容器ID或者容器名
  3. 停止容器 -- docker stop 容器D或者容器名
  4. 强制停止容器 -- docker kill 容器ID或容器名
  5. 删除已停止的容器 -- docker rm 容器ID或容器名

补充重要概念:

  1. 命令式启动与后台守护运行:
    image

后台模式启动:docker run -d centos
前台模式启动:docker run -it centos

  1. 查看容器日志:docker logs [OPTIONS] CONTAINER

  2. 查看容器内运行的进程:docker top CONTAINER [ps OPTIONS]

  3. 查看容器内部运行细节:docker inspect [OPTIONS] NAME | ID [NAME|ID...]
    image

  4. 重新进入doker容器:docker exec -it 容器ID bashShell

image

不小心关闭ubuntu,未退出;下面重新进入Ubuntu
image

重新进入docker attach容器D
案例演示,用centos或者unbuntu都可以

上述两个区别:

  • attach直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。(过河拆桥)
  • exec是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。(推荐使用)
  • image
  1. 从容器拷贝文件到主机:docker cp 容器:容器内路径 目的主机路径

image

  1. 导入和导出容器
  • export 导出容器的内容流,作为一个tar归档文件,[对应import命令]
    • docker export 容器ID > tar包路径
    • image
  • import 从tar包中的内容创建一个新的文件系统,再导入为镜像 [对应export]
    • cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    • image
    • image



Docker镜像

是什么?

定义

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时周要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)

分层的镜像

镜像是分层的
image

UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂我到同一个虚拟文件系统下(unite several directories into a single virtual fileSystem)。Union文件系统是Docker镜像的墨础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

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

Docker镜像加载原理

image
image

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

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用
比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像:同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

重点理解

Docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
image

Docker镜像commit操作案例

image
image

docker commit -m="提交的描述信息" a="作者" 容器ID 目标镜像名:[标签名]

总结

image




本地镜像发布到阿里云

与 Git 相似
image
image

https://cr.console.aliyun.com/repository/cn-guangzhou/yiransz/ubuntu/details

发布到私有库

https://hub.docker.com/
Docker Registry




Docker容器数据卷

docker挂载目录增加权限
--privileged=true

容器目录 -- 映射 -- 主机目录

卷:数据的持久化

docker run-it-privileged:=true-v/宿主机绝对路径目录:/容器内目录 镜像名

image

容器卷案例

  1. 宿主 vs 容器之间映射添加容器卷

    1. 直接命令添加
    2. image
    3. docker run -it --priviledged=true -v /tmp/host_data:/tmp/docker_data --name=u1_ubuntu
    4. host_data:hostin.txt <--> docker_data:hostin.txt
  2. 读写规则映射添加说明

    1. 默认规则:可读可写image
    2. ro: Read-Only
    3. 读写规则限制的是容器
  3. 卷的继承和共享

    1. image
    2. 容器1和容器2共享:docker run -it --privileged=true--volumes-from--name u2 ubuntu
    3. 任何一个容器挂掉,重启后都能够共享数据



Docker常用安装简介

总体步骤

搜索镜像 -- 拉取镜像 -- 查看镜像 -- 启动镜像 -- 停止容器 -- 移除容器
search pull docker images run stop rm

安装Tomcat

运行Tomcat容器【最新版10.1.18】:
image
image

报错404:关闭防火墙,将webapps.dist替换webapps
image
image
image

tomcat增加jdk的版本:8.0.53
image

报错:image
解决方案:(中途关闭了防火墙)重启docker
image
image

安装mysql

docker pull mysql:5.7
ps -ef | grep 3306【保证3306端口未被占用】
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker exec -it  容器ID  /bin/bash

image

mysql实际应用:

解决中文乱码,以及docker容器删除后数据保存问题
使用容器卷(日志log, 数据data, 配置configure)
image

中文乱码

mysql5 中由于编码规则,会出现中文乱码,mysql8 则不会出现。
解决中文乱码问题【修改配置文件】:
容器卷:-v /zzyyuse/mysql/conf:/etc/mysql/conf.d

  1. 在配置文件/yiran/mysql/conf中写入my.cnf文件,如下
    image

  2. 重启mysql,即可解决
    image
    image

  3. 查看字符集编码
    image

docker容器删除后数据保存

删除容器后,里面的数据怎么办?
挂载容器卷到宿主机,重启后会自动同步
image

安装redis

拉取redis:6.0.8,并执行
image
image


如何按照特定的配置文件启动redis?
修改宿主机/app/redis/redis.conf配置文件,由于挂载容器卷,启动redis后,docker中的redis配置也会更新。
【redis-server启动读取/etc/redis/redis.conf配置文件】
image

posted @ 2024-02-20 22:17  是你亦然  阅读(4)  评论(0编辑  收藏  举报