• 【云原生系列】Docker学习


    目录

    一、Docker常用命令

    1 基础命令

    2 镜像命令

    2.1 docker images 查看本地主机的所有镜像

    2.2 docker search 搜索镜像

    2.3 docker pull 镜像名[:tag] 下载镜像

    2.4 docker rmi 删除镜像

    2.5 docker build 构建镜像

    3 容器命令

    3.1 如拉取一个centos镜像

    3.2 运行容器

    3.3 进入容器

    3.4 退出容器

    3.5 列出运行过的容器

    3.6 删除容器

    3.7 启动和停止容器

    4 docker网络

    4.1 查看docker网络列表

    4.2 查看网络详细信息

    5 docker挂载

    5.1 查看volume网络列表

    5.2 查看volume详细信息

    二、dockerfile文件

    1 规则

    2 示例

    3 使用-P和EXPOSE发布随机端口

    三、docker compose

    1 Compose常用命令

    2 示例


    一、Docker常用命令

    1 基础命令

    1. docker version #查看docker的版本信息
    2. docker info #查看docker的系统信息,包括镜像和容器的数量
    3. docker 命令 --help #帮助命令(可查看可选的参数)
    4. docker COMMAND --help

    命令的帮助文档地址:docker | Docker Docs

    2 镜像命令

    2.1 docker images 查看本地主机的所有镜像

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
    2. REPOSITORY TAG IMAGE ID CREATED SIZE
    3. hello-world latest bf756fb1ae65 11 months ago 13.3kB

    #解释:

    1. 1.REPOSITORY 镜像的仓库源
    2. 2.TAG 镜像的标签
    3. 3.IMAGE ID 镜像的id
    4. 4.CREATED 镜像的创建时间
    5. 5.SIZE 镜像的大小

    # 可选参数

    1. -a/--all 列出所有镜像
    2. -q/--quiet 只显示镜像的id

    2.2 docker search 搜索镜像

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
    2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    3. mysql MySQL is a widely used, open-source relation… 10308 [OK]
    4. mariadb MariaDB is a community-developed fork of MyS… 3819 [OK]
    5. mysql/mysql-server Optimized MySQL Server Docker images. Create… 754 [OK]
    6. percona Percona Server is a fork of the MySQL relati… 517 [OK]
    7. centos/mysql-57-centos7 MySQL 5.7 SQL database server 86
    8. mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 79
    9. centurylink/mysql Image containing mysql. Optimized to be link… 60 [OK]
    10. #可选参数
    11. Search the Docker Hub for images
    12. Options:
    13. -f, --filter filter Filter output based on conditions provided
    14. --format string Pretty-print search using a Go template
    15. --limit int Max number of search results (default 25)
    16. --no-trunc Don't truncate output
    17. # 搜索收藏数大于3000的镜像
    18. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
    19. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    20. mysql MySQL is a widely used, open-source relation… 10308 [OK]
    21. mariadb MariaDB is a community-developed fordockerk of MyS… 3819 [OK]


    2.3 docker pull 镜像名[:tag] 下载镜像

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
    2. # 指定版本下载
    3. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7

    2.4 docker rmi 删除镜像

    1. #1.删除指定的镜像id
    2. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
    3. #2.删除多个镜像id
    4. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
    5. #3.删除全部的镜像id
    6. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)

    2.5 docker build 构建镜像

    -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;

    1. # 会看到 docker build 命令最后有一个. . 表示当前目录
    2. docker build -t 新镜像名字:版本号 .

    3 容器命令

    3.1 如拉取一个centos镜像

    docker pull centos

    3.2 运行容器

    docker run [可选参数] image
    1. #参数说明
    2. --name="名字" 指定容器名字
    3. -d 后台方式运行
    4. -it 使用交互方式运行,进入容器查看内容
    5. -p 指定容器的端口
    6. (
    7. -p ip:主机端口:容器端口 配置主机端口映射到容器端口
    8. -p 主机端口:容器端口
    9. -p 容器端口
    10. )
    11. -P 随机指定端口(大写的P)

    3.3 进入容器

    1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
    2. [root@bd1b8900c547 /]# ls
    3. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

    3.4 退出容器

    1. #exit 停止并退出容器(后台方式运行则仅退出)
    2. #Ctrl+P+Q 不停止容器退出
    3. [root@bd1b8900c547 /]# exit
    4. exit
    5. [root@iZwz99sm8v95sckz8bd2c4Z ~]#

    3.5 列出运行过的容器

    1. #docker ps
    2. # 列出当前正在运行的容器
    3. -a # 列出所有容器的运行记录
    4. -n=? # 显示最近创建的n个容器
    5. -q # 只显示容器的编号
    6. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
    7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    8. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
    9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    10. bca129320bb5 centos "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago optimistic_shtern
    11. bd1b8900c547 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago cool_tesla
    12. cf6adbf1b506 bf756fb1ae65 "/hello" 5 hours ago Exited (0) 5 hours ago optimistic_darwin

    3.6 删除容器

    1. docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
    2. docker rm -f $(docker ps -aq) #删除所有的容器
    3. docker ps -a -q|xargs docker rm #删除所有的容器

    3.7 启动和停止容器

    1. docker start 容器id #启动容器
    2. docker restart 容器id #重启容器
    3. docker stop 容器id #停止当前运行的容器
    4. docker kill 容器id #强制停止当前容器

    4 docker网络

    4.1 查看docker网络列表

    docker network ls

    4.2 查看网络详细信息

    docker inspect 网络名

    5 docker挂载

    5.1 查看volume网络列表

    docker volume ls

    5.2 查看volume详细信息

    docker inspect 挂载名

    windows上启动没有指定路径,默认挂载路径/var/lib/docker/volumes/xxx/_data

    在资源管理中输入

    • For Docker version 20.10.+ : \\wsl$\docker-desktop-data\data\docker\volumes
    • For Docker Engine v19.03: \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

    二、dockerfile文件

    dockerfile是用来构建docker镜像的文件!命令参数脚本!

    1 规则

    1.每条保留字指令都必须都为大写,且后面都要至少一个参数

    2.指令按照从上到下,顺序执行

    3.每条指令都会创建一个新的镜像层,并对镜像进行提交

    关键字

    作用

    FROM

    当前镜像是基于那个镜像的(第一个指令必须是FROM)

    RUN

    构建镜像时需要运行的指令。可以安装各种依赖

    EXPOSE

    当前容器对外暴露的端口号(只是声明,没有实际意义)

    WORKDIR

    指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点

    如果WORKDIR的路径不存在,也会进行创建该路径

    ADD

    将宿主机目录下的文件拷贝进镜像。且ADD命令会自动处理下载URL和解压tar包

    ADD aa.txt . 将aa.txt拷贝到容器当前路径下

    ADD URL . 某文件URL下载地址下载到当前路径下

    COPY

    类似于ADD,拷贝文件和目录到镜像中

    ENV

    用来在构建镜像过程中设置环境变量

    VOLUME

    容器数据卷,用于数据保存和持久化工作(只是声明,没有实际意义)

    CMD

    指定一个容器启动时要运行的命令

    可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

    ENTRYPOINT

    指定一个容器启动时要运行的命令

    ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数

    CMD和ENTRYPOINT区别?

    1.CMD里面命令如果在运行容器时进行覆盖

    docker run 镜像:版本号 覆盖自己定义命令

    2.ENTRYPOINT里面命令如何在运行容器时进行覆盖

    docker run --entrypoint=覆盖指令 镜像:版本号 传递参数

    2 示例

    web项目docker部署,打成镜像。dockerfile文件:

    1. # 设置本镜像需要使用的基础镜像
    2. FROM openjdk:8
    3. #ENV APP_PATH = /home/toolset
    4. #
    5. #WORKDIR $APP_PATH
    6. # 把jar包添加到镜像中
    7. ADD toolset-0.0.1-SNAPSHOT.jar /home/toolset/toolset-0.0.1-SNAPSHOT.jar
    8. # 镜像暴露的端口
    9. EXPOSE 9090
    10. # 容器启动命令
    11. #ENTRYPOINT ["sh", "-c", "echo ${APP_PATH}"]
    12. ENTRYPOINT ["java", "-jar", "/home/toolset/toolset-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=test"]
    13. # 设置时区
    14. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

    构建镜像和创建容器

    1. # 构建镜像
    2. docker build -t tooset:1.0 .
    3. # 创建容器
    4. docker run -p 9090:9090 --name tooset tooset:1.0

    3 使用-P和EXPOSE发布随机端口

    因为EXPOSE通常只是作为记录机制,也就是告诉用户哪些端口会提供服务,Docker可以很容易地把Dockerfile里的EXPOSE指令转换成特定的端口绑定规则。只需要在运行时加上-P参数,Docker会自动为用户创建端口映射规则,并且帮助避免端口映射的冲突。

    添加如下行到上文使用的Web应用Dockerfile里:

    EXPOSE 1000

    EXPOSE 2000

    EXPOSE 3000


    构建镜像,命名为exposed-ports。

    docker build -t exposed-ports .


    再次用-P参数运行,但是不传入任何特定的-p规则。可以看到Docker会将EXPOSE指令相关的每个端口映射到宿主机的端口上:

    1. $ docker run -d -P --name exposed-ports-in-dockerfile exposed-ports
    2. 63264dae9db85c5d667a37dac77e0da7c8d2d699f49b69ba992485242160ad3a
    3. $ docker port exposed-ports-in-dockerfile
    4. 1000/tcp -> 0.0.0.0:49156
    5. 2000/tcp -> 0.0.0.0:49157
    6. 3000/tcp -> 0.0.0.0:49158

    三、docker compose

    1 Compose常用命令

    1. docker-compose -h # 查看帮助
    2. docker-compose up # 启动所有docker-compose服务
    3. docker-compose up -d # 启动所有docker-compose服务并后台运行
    4. docker-compose down # 停止并删除容器、网络、卷、镜像。
    5. docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
    6. docker-compose top # 展示当前docker-compose编排过的容器进程
    7. docker-compose restart [service] # 重启服务
    8. docker-compose start [service] # 启动服务
    9. docker-compose stop [service] # 停止服务
    10. docker-compose config # 检查配置,输出docker-compose.yml的配置信息
    11. docker-compose config -q # 检查配置,有问题才有输出

    2 示例

    工具集toolset项目docker compose部署

    GitHub - liangjiabao-5/toolset-dockercompose

  • 相关阅读:
    springboot 导出word模板
    Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (五) UI
    关于深度学习的概念理解(笔记)
    springboot+vue+Elementui学生考勤在线请假系统
    精品基于Uniapp+SSM实现的Android平台的健康管理系统
    谷歌计划从Chrome119起测试IP隐私保护功能
    【数学】双根号求值域问题
    【C++】STL容器——vector类的使用指南(含代码演示)(11)
    2023 江西省赛 【9.26训练补题】
    练习一:用python发邮件
  • 原文地址:https://blog.csdn.net/liangjiabao5555/article/details/132796126