• Docker 基础


    手把手教你配阿里镜像源

    1.注册登录

    2.在主页搜索    容器镜像服务

    3.立即开通

    4.复制命令 并 在你的命令行里执行

    一、快速入门:

    1.Docker的安装

    安装docker引擎

    官方网址:Install Docker Engine on CentOS | Docker Docs

    朋友们,有坑,千万不要用官方的仓库,就是下面这一步

    记得用国内的镜像源:

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    下图是官方的步骤,第二行代码应换成国内的镜像源

    如果,不小心用了国外的镜像源,记得按下面步骤

    1. 1.进入 /etc/yum.repos.d 目录
    2. 2. 删除与docker相关的文件
    3. 3.配置yum源
    4. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    5. 4.然后再按官方的步骤安装

    2.部署MySql

    1. docker run -d \
    2. --name myFirst \
    3. -p 3000:3306 \
    4. -e TZ=Asia/Shanghai \
    5. -e MYSQL_ROOT_PASSWORD=123 \
    6. mysql
    7. -d 是让容器在后台运行,一般与run是配套的。
    8. --name 给容器命名,必须唯一
    9. --p 设置端口映射,访问主机的3000端口 映射到 访问容器的3306端口
    10. --e 暂时不清楚?设置时区?
    11. --e 也不太清楚?得给mysql设置个初始化密码
    12. 我懂了
    13. -e KEY=VALUE 意思是设置环境变量
    14. 不同的镜像 -e不同 ,看docker hub 上镜像的说明

    通过docker ps 可以看到,myFirst这个容器正在运行

    此时你就可以 进入容器中 ,去登录mysql客户端

    docker exec -it myFirst bash

    我们也可以在linux虚拟机上去访问容器里的数据库,因为我们设置了端口映射,当访问本机的3000端口时,回去访问容器的3306端口。但记得 在连接,记得加 -h ip地址  ,虽然是在本机上操作,但还是要用上本机的ip地址。

     

    3.镜像和容器

    4.命令解读

    一般docker run 和 -d 选项是配套的。

    下面是真正的命名规范

    5.案例 拉取nginx

    docker的容器给我们准备的是 所必备的最小运行资源,因此进入容器内后,并不能使用vi 进入vim编辑器。

    1.运行容器

    2.查看容器

    当使用 docker inspect 容器name   是查看某个容器的详细信息

    当使用 docker volume inspect   是查看数据卷的详细信息,可以取看它本机上的挂载点在哪里。

    3. 查看数据卷详细信息( 当不指定路径时,本机挂载点 默认是在  /var/lib/docker/volumes/    这个路径下)

    4.当修改挂载点下的文件后,容器内相应的文件也被修改。

    数据卷就像是一个桥梁

    当我测试  docker volume prune 这个指令时,它会把 被删除容器的 数据卷清除 ,释放磁盘空间。

    6.mysql 容器的数据挂载

    遇到的问题:

    1.final shell无法正常上传文件 。因为我使用的是普通用户,普通用户只能在自己的home/用户名/目录下进行上传,是无法去 其他路径,即root用户的范围来上传文件。

    解决:使用root 用户去连接。

    本地目录挂载:必须用绝对路径或是 ./  这种形式 ,不然会被认做 数据卷

    1. docker run -d \
    2. --name mysql \
    3. -p 3306:3306 \
    4. -e TZ=Asia/Shanghai \
    5. -e MYSQL_ROOT_PASSWORD=123 \
    6. -v ./mysql/data:/var/lib/mysql \
    7. -v ./mysql/conf:/etc/mysql/conf.d \
    8. -v ./mysql/init:/docker-entrypoint-initdb.d \
    9. mysql

    7.Dockerfile 语法

    分层,可以让我们去共享某一个层。

    copy时,docker会为我们去创建目录

    下面这段代码,让我回忆了很多,我重新回顾了环境变量,软链接。

    1. # 指定基础镜像
    2. FROM ubuntu:16.04
    3. # 配置环境变量,JDK的安装目录、容器内时区
    4. ENV JAVA_DIR=/usr/local
    5. ENV TZ=Asia/Shanghai
    6. # 拷贝jdk和java项目的包
    7. COPY ./jdk8.tar.gz $JAVA_DIR/
    8. COPY ./docker-demo.jar /tmp/app.jar
    9. # 设定时区
    10. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    11. # 安装JDK
    12. RUN cd $JAVA_DIR \
    13. && tar -xf ./jdk8.tar.gz \
    14. && mv ./jdk1.8.0_144 ./java8
    15. # 配置环境变量
    16. ENV JAVA_HOME=$JAVA_DIR/java8
    17. ENV PATH=$PATH:$JAVA_HOME/bin
    18. # 指定项目监听的端口
    19. EXPOSE 8080
    20. # 入口,java项目的启动命令
    21. ENTRYPOINT ["java", "-jar", "/app.jar"]

    下面来回顾软连接:

    我忘记 -s -f  的含义, 但我从来不知道 -n是什么意思 

    我的理解:解引用时,会指向确切的文件。即$TZ 会被解析成  具体的文件 ,然后修改$TZ 的值后,软链接仍然指向原来的值,可以看看下面第3张图。

    8.自定义镜像

    这个 句点 不能缺

    实践:

    在创建并运行容器时,需要指定其 名字:版本

    9. 网络

    使用自定义网络,才可以通过 容器名 ping通

    即让 各个容器加入这个网络。

    默认情况下,容器都会加入 同一个网络中,名字叫做brige 

    当将容器连接到 自定义网络上时 ,有两种方式。

    1.将运行时的容器连接到指定网络。使用docker  network create

    2.在创建容器时连接到指定网络。使用 --network 关键字

     

    创建一个网络

    查看所有网络

    查看网络详细信息

    删除指定网络

    使指定容器加入某网络,可以 --alias 起别名

    除了brige模式,还有其他模式。

    10.项目部署

    一个容器可以配置多个端口映射

    番外篇:硬啃英语文档

    1.Docker overview 

      :响应式部署和扩展

    Docker Architecture

    守护进程

    客户端

    Docker registries: Docker 注册表

    A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker looks for images on Docker Hub by default. You can even run your own private registry.

    When you use the docker pull or docker run commands, Docker pulls the required images from your configured registry. When you use the docker push command, Docker pushes your image to your configured registry.

    Docker Objects

  • 相关阅读:
    墙裂推荐,阿里内网价值9K的Java中高级核心全解析笔记
    TypeScript 学习笔记
    新的“HTTP/2 Rapid Reset”0day攻击打破了DDoS记录
    flex布局(理论+案例解释)
    六、【计算】大数据Shuffle原理与实践(下) | 青训营笔记
    抗HER2/neu受体拟肽修饰的紫杉醇自蛋白纳米粒/环境敏感型多糖纳米粒的制备,
    独家 | 如何比较两个或多个分布形态(附链接)
    Label Contrastive Coding based Graph Neural Network for Graph Classification
    【设计模式】 - 结构型模式 - 装饰者模式
    【PHP】手术麻醉系统源码
  • 原文地址:https://blog.csdn.net/qq_64071349/article/details/133581569