• 小飞学习Docker之使用容器


    在继续本文之前,首先要确认你已经安装了Docker,确保Docker已经就位。第一步就是执行sudo docker info命令检查相关环境。

    通过上面一章节我们已经了解到容器相当于一个跑起来的镜像,是一个运行的执行环境,那下面通过使用docker运行nginx来看下容器相关的一些操作。

    运行Nginx容器

    首先可以使用 docker run 命令来创建 Nginx 容器,执行如下命令。

    docker run --name containerName -p 8080:80 -d nginx

    来让我们先看下命令。

    1. 首先我们执行docker run,会先从本地查看有没有该镜像,如果有执行起来一个容器;如果没有就去默认的镜像仓库(这里是Docker Hub)拉取镜像到本地,然后再起一个容器。
    2. --name:给容器起一个唯一名字,方便后续使用定位;如果没有这个指令,docker 会随机生成一个名字。
    3. -p:将宿主机端口与容器端口映射,这样通过docker 的网桥,可以通过宿主机地址访问到容器内部。8080是宿主机的端口,80 是容器端口。通过这种暴露方式我们就可以通过http://localhost:8080 访问nginx 的主页。
    4. -d 是指以后台形式启动,同样有-it 使用伪终端在前端输出,后面会提到

    执行完可以看下效果:

    问题来了,因为是后台运行,我们怎么知道容器已经正常起来了?

    检查容器健康情况

    在真正生产环境上我们要判断容器是否健康,可以从浅至深的来检查几个方面。

    容器本身的运行情况

    可以通过 docker ps 命令,查看正在运行的容器,并检查是否有目标容器,关注状态

    docker ps

    另外我们从上面也可以看出是将宿主机的8080端口映射到容器的80端口了。

    业务指标

    业务指标就有很多,比如说端口是否正常被占用、程序是否正常启动、日志是否打印正常等等,像这个demo而言,只需要看下nginx首页是否可以正常访问。

    然后访问后,进一步查询容器日志,可以看到访问日志

    docker logs nginx # 容器名称

    进入容器内部

    走到这里,其实一个容器应用已经可以使用了,但问题是我们想进一步修改内容,或者说进去看业务日志,那怎么办?其实容器提供了一种伪tty的方式让我们在终端进入到容器内部,类似于ssh

    docker exec -it nginx /bin/sh

    上面的命令通过docker exec,搭配 -it 还有 /bin/sh 模拟一个终端,让我们直接于容器内部交互。执行完之后,我们就可以像平常linux系统进行修改了,举个例子,修改nginx 主页内容

    1. cd /usr/share/nginx/html
    2. vim index.html

    我们其实发现业务代码放到容器里面,那如果有多个实例岂不是要都修改?这里呢,可以理解这种方式是无状态的实例,也就说容器不与其他有依赖,易于扩展。可以使用编排工具,将修改后的镜像分批分发替换老镜像完成版本的迭代。

    当然还有另外一种方式,就是使用数据卷。

    挂载数据卷

    数据卷是一个虚拟目录,指向宿主机的某个目录,这样将容器和数据分离,同时也可以让多个容器共享同一份数据。

    可以在创建容器的时候,通过 -v 参数让宿主机的一个目录挂载到容器的制定目录下。

    docker run --name nginx -v /opt/html:/usr/share/nginx/html -p 8080:80 -d nginx

    这里是将宿主机的/opt/html挂载到容器下的/usr/share/nginx/html下,这样不管修改哪一侧,都会同步。

    容器常用命令总结

    容器常用命令

    操作命令

    常用参数说明

    docker run

    创建启动容器

    -it:可交互的伪终端,进入容器内部

    --name:为容器起名

    --rm:运行完毕删除容器

    -d:容器后台运行

    -v:卷挂载

    docker ps

    列出正在运行的容器

    docker exec 

    进入容器内部执行

    -it:交互终端执行

    docker rm

    删除容器

    docker start | stop

    启动或停止容器

    docker logs

    查询运行日志

    docker inspect

    获取容器配置信息

    --format '{{.NetworkSettings.IPAddress}}' 容器名称

  • 相关阅读:
    先行进位加法器
    MOS管在户用储能上的应用-REASUNOS瑞森半导体
    Android 双向滑动
    Zookeeper和Eureka的区别
    【数据库系统概论】第一章数据库绪论
    Crazy Binary String
    泛型通配符,上下限 ,生活案例介绍
    SpringCloud-Gateway解决跨域问题
    程序媛小姐姐直播讲解第七周PHP上机作业
    Tech Lead(技术经理) 带人之道
  • 原文地址:https://blog.csdn.net/u010402483/article/details/126756715